sync: start clearing git settings that disabled pruning
For projects that no longer share their per-project objects directly, we
no longer have to disable the git settings that disable pruning. See
commit "project: stop directly sharing objects/ between shared projects"
for more details.
Bug: https://crbug.com/gerrit/15553
Change-Id: Ica0e83c3002716424c2bc9111b3b3d3a76c30973
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/337535
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: LaMont Jones <lamontjones@google.com>
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 57ee054..507d1c9 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -657,21 +657,27 @@
tidy_dirs = {}
for project in projects:
- # Make sure pruning never kicks in with shared projects.
+ # Make sure pruning never kicks in with shared projects that do not use
+ # alternates to avoid corruption.
if (not project.use_git_worktrees and
len(project.manifest.GetProjectsWithName(project.name, all_manifests=True)) > 1):
- if not opt.quiet:
- print('\r%s: Shared project %s found, disabling pruning.' %
- (project.relpath, project.name))
- if git_require((2, 7, 0)):
- project.EnableRepositoryExtension('preciousObjects')
+ if project.UseAlternates:
+ # Undo logic set by previous versions of repo.
+ project.config.SetString('extensions.preciousObjects', None)
+ project.config.SetString('gc.pruneExpire', None)
else:
- # This isn't perfect, but it's the best we can do with old git.
- print('\r%s: WARNING: shared projects are unreliable when using old '
- 'versions of git; please upgrade to git-2.7.0+.'
- % (project.relpath,),
- file=sys.stderr)
- project.config.SetString('gc.pruneExpire', 'never')
+ if not opt.quiet:
+ print('\r%s: Shared project %s found, disabling pruning.' %
+ (project.relpath, project.name))
+ if git_require((2, 7, 0)):
+ project.EnableRepositoryExtension('preciousObjects')
+ else:
+ # This isn't perfect, but it's the best we can do with old git.
+ print('\r%s: WARNING: shared projects are unreliable when using old '
+ 'versions of git; please upgrade to git-2.7.0+.'
+ % (project.relpath,),
+ file=sys.stderr)
+ project.config.SetString('gc.pruneExpire', 'never')
project.config.SetString('gc.autoDetach', 'false')
# Only call git gc once per objdir, but call pack-refs for the remainder.
if project.objdir not in tidy_dirs: