summaryrefslogtreecommitdiffstats
path: root/subcmds/sync.py
diff options
context:
space:
mode:
authorGabe Black <gabeblack@chromium.org>2014-10-09 17:54:35 -0700
committerMike Frysinger <vapier@google.com>2016-09-14 00:19:44 -0400
commit2ff302929ca12b309ab35a3f957cd0179f382d74 (patch)
tree64d3150bea0efd2989a22f28e750c09614f9e772 /subcmds/sync.py
parent7a77c16d376f504bd06d017ba10c91e3a6073b08 (diff)
downloadgit-repo-2ff302929ca12b309ab35a3f957cd0179f382d74.tar.gz
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
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r--subcmds/sync.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 9124a653..ecf2ffc0 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -397,9 +397,12 @@ later is required to fix a server side protocol bug.
397 return fetched 397 return fetched
398 398
399 def _GCProjects(self, projects): 399 def _GCProjects(self, projects):
400 gitdirs = {} 400 gc_gitdirs = {}
401 for project in projects: 401 for project in projects:
402 gitdirs[project.gitdir] = project.bare_git 402 if len(project.manifest.GetProjectsWithName(project.name)) > 1:
403 print('Shared project %s found, disabling pruning.' % project.name)
404 project.bare_git.config('--replace-all', 'gc.pruneExpire', 'never')
405 gc_gitdirs[project.gitdir] = project.bare_git
403 406
404 has_dash_c = git_require((1, 7, 2)) 407 has_dash_c = git_require((1, 7, 2))
405 if multiprocessing and has_dash_c: 408 if multiprocessing and has_dash_c:
@@ -409,7 +412,7 @@ later is required to fix a server side protocol bug.
409 jobs = min(self.jobs, cpu_count) 412 jobs = min(self.jobs, cpu_count)
410 413
411 if jobs < 2: 414 if jobs < 2:
412 for bare_git in gitdirs.values(): 415 for bare_git in gc_gitdirs.values():
413 bare_git.gc('--auto') 416 bare_git.gc('--auto')
414 return 417 return
415 418
@@ -431,7 +434,7 @@ later is required to fix a server side protocol bug.
431 finally: 434 finally:
432 sem.release() 435 sem.release()
433 436
434 for bare_git in gitdirs.values(): 437 for bare_git in gc_gitdirs.values():
435 if err_event.isSet(): 438 if err_event.isSet():
436 break 439 break
437 sem.acquire() 440 sem.acquire()