diff --git a/subcmds/sync.py b/subcmds/sync.py index 808df208..f41de8df 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -560,9 +560,20 @@ later is required to fix a server side protocol bug. def _GCProjects(self, projects, opt, err_event): gc_gitdirs = {} for project in projects: + # Make sure pruning never kicks in with shared projects. if len(project.manifest.GetProjectsWithName(project.name)) > 1: - print('Shared project %s found, disabling pruning.' % project.name) - project.bare_git.config('--replace-all', 'gc.pruneExpire', 'never') + print('%s: Shared project %s found, disabling pruning.' % + (project.relpath, project.name)) + if git_require((2, 7, 0)): + project.config.SetString('core.repositoryFormatVersion', '1') + project.config.SetString('extensions.preciousObjects', 'true') + else: + # This isn't perfect, but it's the best we can do with old git. + print('%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') gc_gitdirs[project.gitdir] = project.bare_git has_dash_c = git_require((1, 7, 2))