summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
authorNikolai Merinov <n.merinov@inango-systems.com>2018-10-19 15:07:05 +0500
committerNikolai Merinov <n.merinov@inango-systems.com>2018-10-19 23:51:23 +0500
commit09f0abb0efde83cfc4b850ebdc41f6ed3b61a123 (patch)
tree18265441fc938e567fbf7fae409de11bc2e6bfd7 /project.py
parentb3133a31642ea88f0e4fe9c382411d43278dc9e4 (diff)
downloadgit-repo-09f0abb0efde83cfc4b850ebdc41f6ed3b61a123.tar.gz
init: --dissociate option to copy objects borrowed with --reference
"repo init --reference" has two purposes: to decrease bandwidth used at clone time, and to decrease disk usage afterward, by using the reference repositories as an alternate store of objects even after the clone. The downside is that it makes the borrowing repositories dependent on the reference repositories, so it is easy to end up with missing objects by mistake after a cleanup operation like "git gc". To prevent that, v2.3.0-rc0~30^2 (clone: --dissociate option to mark that reference is only temporary, 2014-10-14), "git clone" gained a --dissociate option that makes --reference reuse objects from the reference repository at clone time but copy them over instead of using the reference as an alternate. This is more straightforward to use than plain --reference, at the cost of higher disk usage. Introduce a --dissociate to "repo init" that brings the same benefits to repo. The option is simply passed on to "git clone". Change-Id: Ib50a549eb71e0a2b3e234aea57537923962a80d4
Diffstat (limited to 'project.py')
-rwxr-xr-xproject.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/project.py b/project.py
index d551351b..a7001b01 100755
--- a/project.py
+++ b/project.py
@@ -1310,6 +1310,16 @@ class Project(object):
1310 submodules=submodules)): 1310 submodules=submodules)):
1311 return False 1311 return False
1312 1312
1313 mp = self.manifest.manifestProject
1314 dissociate = mp.config.GetBoolean('repo.dissociate')
1315 if dissociate:
1316 alternates_file = os.path.join(self.gitdir, 'objects/info/alternates')
1317 if os.path.exists(alternates_file):
1318 cmd = ['repack', '-a', '-d']
1319 if GitCommand(self, cmd, bare=True).Wait() != 0:
1320 return False
1321 platform_utils.remove(alternates_file)
1322
1313 if self.worktree: 1323 if self.worktree:
1314 self._InitMRef() 1324 self._InitMRef()
1315 else: 1325 else: