Merge "init: --dissociate option to copy objects borrowed with --reference"
diff --git a/project.py b/project.py
index ddcffdd..84e3684 100755
--- a/project.py
+++ b/project.py
@@ -1310,6 +1310,16 @@
submodules=submodules)):
return False
+ mp = self.manifest.manifestProject
+ dissociate = mp.config.GetBoolean('repo.dissociate')
+ if dissociate:
+ alternates_file = os.path.join(self.gitdir, 'objects/info/alternates')
+ if os.path.exists(alternates_file):
+ cmd = ['repack', '-a', '-d']
+ if GitCommand(self, cmd, bare=True).Wait() != 0:
+ return False
+ platform_utils.remove(alternates_file)
+
if self.worktree:
self._InitMRef()
else:
diff --git a/repo b/repo
index 6d3e8c2..998731c 100755
--- a/repo
+++ b/repo
@@ -190,6 +190,9 @@
group.add_option('--reference',
dest='reference',
help='location of mirror directory', metavar='DIR')
+group.add_option('--dissociate',
+ dest='dissociate', action='store_true',
+ help='dissociate from reference mirrors after clone')
group.add_option('--depth', type='int', default=None,
dest='depth',
help='create a shallow clone with given depth; see git clone')
diff --git a/subcmds/init.py b/subcmds/init.py
index 4e51dfe..6e99658 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -61,6 +61,11 @@
directory when fetching from the server. This will make the sync
go a lot faster by reducing data traffic on the network.
+The --dissociate option can be used to borrow the objects from
+the directory specified with the --reference option only to reduce
+network transfer, and stop borrowing from them after a first clone
+is made by making necessary local copies of borrowed objects.
+
The --no-clone-bundle option disables any attempt to use
$URL/clone.bundle to bootstrap a new Git repository from a
resumeable bundle file on a content delivery network. This
@@ -103,6 +108,9 @@
g.add_option('--reference',
dest='reference',
help='location of mirror directory', metavar='DIR')
+ g.add_option('--dissociate',
+ dest='dissociate', action='store_true',
+ help='dissociate from reference mirrors after clone')
g.add_option('--depth', type='int', default=None,
dest='depth',
help='create a shallow clone with given depth; see git clone')
@@ -219,6 +227,9 @@
if opt.reference:
m.config.SetString('repo.reference', opt.reference)
+ if opt.dissociate:
+ m.config.SetString('repo.dissociate', 'true')
+
if opt.archive:
if is_new:
m.config.SetString('repo.archive', 'true')