summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2021-11-05 15:22:01 -0400
committerMike Frysinger <vapier@google.com>2021-11-05 20:13:30 +0000
commit0531a623e19dd414840d062e19048a2ee5def235 (patch)
treea71c8b20c5ba9aa67df7568e7d8ca3b21496fa31
parent2273f46cb36893d20ab77d4dde1461d670d88e2c (diff)
downloadgit-repo-0531a623e19dd414840d062e19048a2ee5def235.tar.gz
sync: make --prune the default
If a remote deletes a ref, and it points to an object that doesn't exist locally, we can get into a bad state, and the only way for the user to recover is to run `repo sync --prune` (and to know that is the option they need). The error message is not helpful: fatal: bad object refs/remotes/cros/firmware-zork-13421.B-master error: https://chromium.googlesource.com/chromiumos/platform/ec did not send all necessary objects This situation can also come up when the remote renames refs in a UNIX FS incompatible way. For example, replacing refs/heads/foo with refs/heads/foo/bar. Also add a --no-prune option for users to disable the behavior. Bug: https://issuetracker.google.com/203366450 Change-Id: Icf45d838a10938feb091d29800f7e49240830ec3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/322956 Reviewed-by: Andrew Lamb <andrewlamb@google.com> Tested-by: Mike Frysinger <vapier@google.com>
-rw-r--r--subcmds/sync.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index d4e302ac..2e6afccc 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -249,8 +249,10 @@ later is required to fix a server side protocol bug.
249 p.add_option('--retry-fetches', 249 p.add_option('--retry-fetches',
250 default=0, action='store', type='int', 250 default=0, action='store', type='int',
251 help='number of times to retry fetches on transient errors') 251 help='number of times to retry fetches on transient errors')
252 p.add_option('--prune', dest='prune', action='store_true', 252 p.add_option('--prune', action='store_true',
253 help='delete refs that no longer exist on the remote') 253 help='delete refs that no longer exist on the remote (default)')
254 p.add_option('--no-prune', dest='prune', action='store_false',
255 help='do not delete refs that no longer exist on the remote')
254 if show_smart: 256 if show_smart:
255 p.add_option('-s', '--smart-sync', 257 p.add_option('-s', '--smart-sync',
256 dest='smart_sync', action='store_true', 258 dest='smart_sync', action='store_true',
@@ -927,6 +929,9 @@ later is required to fix a server side protocol bug.
927 if None in [opt.manifest_server_username, opt.manifest_server_password]: 929 if None in [opt.manifest_server_username, opt.manifest_server_password]:
928 self.OptionParser.error('both -u and -p must be given') 930 self.OptionParser.error('both -u and -p must be given')
929 931
932 if opt.prune is None:
933 opt.prune = True
934
930 def Execute(self, opt, args): 935 def Execute(self, opt, args):
931 if opt.jobs: 936 if opt.jobs:
932 self.jobs = opt.jobs 937 self.jobs = opt.jobs