mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
When syncing a project with a shared object store, disable automatic pruning.
The shared object stores confuse git and make it throw away objects which are still in use. We'll avoid that problem by disabling automatic pruning on those projects, but there's nothing preventing a user from changing the config back or pruning a repository manually. BUG=chromium:375945 TEST=Ran repo sync on fresh ChromeOS checkout, starting with a branch of repo with this change. Verified that the kernel projects and no others were identified as having shared object stores, and that repo successfully disabled automatic pruning in their configs. Re-enabled pruning and ran repo sync just on one of the kernel directories. Verified that pruning was re-disabled as a result. Change-Id: I728ed5b06f0087aeb5a23ba8f5410a7cd10af5b0
This commit is contained in:
parent
7a77c16d37
commit
2ff302929c
@ -397,9 +397,12 @@ later is required to fix a server side protocol bug.
|
||||
return fetched
|
||||
|
||||
def _GCProjects(self, projects):
|
||||
gitdirs = {}
|
||||
gc_gitdirs = {}
|
||||
for project in projects:
|
||||
gitdirs[project.gitdir] = project.bare_git
|
||||
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')
|
||||
gc_gitdirs[project.gitdir] = project.bare_git
|
||||
|
||||
has_dash_c = git_require((1, 7, 2))
|
||||
if multiprocessing and has_dash_c:
|
||||
@ -409,7 +412,7 @@ later is required to fix a server side protocol bug.
|
||||
jobs = min(self.jobs, cpu_count)
|
||||
|
||||
if jobs < 2:
|
||||
for bare_git in gitdirs.values():
|
||||
for bare_git in gc_gitdirs.values():
|
||||
bare_git.gc('--auto')
|
||||
return
|
||||
|
||||
@ -431,7 +434,7 @@ later is required to fix a server side protocol bug.
|
||||
finally:
|
||||
sem.release()
|
||||
|
||||
for bare_git in gitdirs.values():
|
||||
for bare_git in gc_gitdirs.values():
|
||||
if err_event.isSet():
|
||||
break
|
||||
sem.acquire()
|
||||
|
Loading…
Reference in New Issue
Block a user