Просмотр исходного кода

Merge "init: --dissociate option to copy objects borrowed with --reference"

David Pursehouse 7 лет назад
Родитель
Сommit
36391bf5ca
3 измененных файлов с 24 добавлено и 0 удалено
  1. 10 0
      project.py
  2. 3 0
      repo
  3. 11 0
      subcmds/init.py

+ 10 - 0
project.py

@@ -1310,6 +1310,16 @@ class Project(object):
                               submodules=submodules)):
                               submodules=submodules)):
       return False
       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:
     if self.worktree:
       self._InitMRef()
       self._InitMRef()
     else:
     else:

+ 3 - 0
repo

@@ -190,6 +190,9 @@ group.add_option('--mirror',
 group.add_option('--reference',
 group.add_option('--reference',
                  dest='reference',
                  dest='reference',
                  help='location of mirror directory', metavar='DIR')
                  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,
 group.add_option('--depth', type='int', default=None,
                  dest='depth',
                  dest='depth',
                  help='create a shallow clone with given depth; see git clone')
                  help='create a shallow clone with given depth; see git clone')

+ 11 - 0
subcmds/init.py

@@ -61,6 +61,11 @@ directory use as much data as possible from the local reference
 directory when fetching from the server. This will make the sync
 directory when fetching from the server. This will make the sync
 go a lot faster by reducing data traffic on the network.
 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
 The --no-clone-bundle option disables any attempt to use
 $URL/clone.bundle to bootstrap a new Git repository from a
 $URL/clone.bundle to bootstrap a new Git repository from a
 resumeable bundle file on a content delivery network. This
 resumeable bundle file on a content delivery network. This
@@ -103,6 +108,9 @@ to update the working directory files.
     g.add_option('--reference',
     g.add_option('--reference',
                  dest='reference',
                  dest='reference',
                  help='location of mirror directory', metavar='DIR')
                  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,
     g.add_option('--depth', type='int', default=None,
                  dest='depth',
                  dest='depth',
                  help='create a shallow clone with given depth; see git clone')
                  help='create a shallow clone with given depth; see git clone')
@@ -219,6 +227,9 @@ to update the working directory files.
     if opt.reference:
     if opt.reference:
       m.config.SetString('repo.reference', opt.reference)
       m.config.SetString('repo.reference', opt.reference)
 
 
+    if opt.dissociate:
+      m.config.SetString('repo.dissociate', 'true')
+
     if opt.archive:
     if opt.archive:
       if is_new:
       if is_new:
         m.config.SetString('repo.archive', 'true')
         m.config.SetString('repo.archive', 'true')