diff options
author | Mike Frysinger <vapier@google.com> | 2021-11-05 15:22:01 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2021-11-05 20:13:30 +0000 |
commit | 0531a623e19dd414840d062e19048a2ee5def235 (patch) | |
tree | a71c8b20c5ba9aa67df7568e7d8ca3b21496fa31 /subcmds/sync.py | |
parent | 2273f46cb36893d20ab77d4dde1461d670d88e2c (diff) | |
download | git-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>
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r-- | subcmds/sync.py | 9 |
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 |