Browse Source

Add sync-c option to manifest

There are use-cases when fetching all branch is impractical and
we really need to fetch only one branch/tag.
e.g. there is a large project with binaries and every update of a
binary file is put to a separate branch.
The whole project history might be too large to allow users fetch it.

Add 'sync-c' option to 'project' and 'default' tags to make it possible
to configure 'sync-c' behavior at per-project and per-manifest level.

Note that currently there is no possibility to revert boolean flag from
command line. If 'sync-c' is set in manifest then you cannot make
full fetch by providing a repo tool argument.

Change-Id: Ie36fe5737304930493740370239403986590f593
Anatol Pomazau 14 năm trước cách đây
mục cha
commit
79770d269e
3 tập tin đã thay đổi với 28 bổ sung2 xóa
  1. 2 0
      docs/manifest-format.txt
  2. 22 1
      manifest_xml.py
  3. 4 1
      project.py

+ 2 - 0
docs/manifest-format.txt

@@ -39,6 +39,7 @@ following DTD:
     <!ATTLIST default remote   IDREF #IMPLIED>
     <!ATTLIST default revision CDATA #IMPLIED>
     <!ATTLIST default sync-j   CDATA #IMPLIED>
+    <!ATTLIST default sync-c   CDATA #IMPLIED>
 
     <!ELEMENT manifest-server (EMPTY)>
     <!ATTLIST url              CDATA #REQUIRED>
@@ -49,6 +50,7 @@ following DTD:
     <!ATTLIST project remote   IDREF #IMPLIED>
     <!ATTLIST project revision CDATA #IMPLIED>
     <!ATTLIST project groups   CDATA #IMPLIED>
+    <!ATTLIST project sync-c   CDATA #IMPLIED>
 
     <!ELEMENT annotation (EMPTY)>
     <!ATTLIST annotation name  CDATA #REQUIRED>

+ 22 - 1
manifest_xml.py

@@ -35,6 +35,7 @@ class _Default(object):
   revisionExpr = None
   remote = None
   sync_j = 1
+  sync_c = False
 
 class _XmlRemote(object):
   def __init__(self,
@@ -159,6 +160,9 @@ class XmlManifest(object):
     if d.sync_j > 1:
       have_default = True
       e.setAttribute('sync-j', '%d' % d.sync_j)
+    if d.sync_c:
+      have_default = True
+      e.setAttribute('sync-c', 'true')
     if have_default:
       root.appendChild(e)
       root.appendChild(doc.createTextNode(''))
@@ -212,6 +216,9 @@ class XmlManifest(object):
           ae.setAttribute('value', a.value)
           e.appendChild(ae)
 
+      if p.sync_c:
+        e.setAttribute('sync-c', 'true')
+
     if self._repo_hooks_project:
       root.appendChild(doc.createTextNode(''))
       e = doc.createElement('repo-hooks')
@@ -444,11 +451,18 @@ class XmlManifest(object):
     d.revisionExpr = node.getAttribute('revision')
     if d.revisionExpr == '':
       d.revisionExpr = None
+
     sync_j = node.getAttribute('sync-j')
     if sync_j == '' or sync_j is None:
       d.sync_j = 1
     else:
       d.sync_j = int(sync_j)
+
+    sync_c = node.getAttribute('sync-c')
+    if not sync_c:
+      d.sync_c = False
+    else:
+      d.sync_c = sync_c.lower() in ("yes", "true", "1")
     return d
 
   def _ParseNotice(self, node):
@@ -526,6 +540,12 @@ class XmlManifest(object):
     else:
       rebase = rebase.lower() in ("yes", "true", "1")
 
+    sync_c = node.getAttribute('sync-c')
+    if not sync_c:
+      sync_c = False
+    else:
+      sync_c = sync_c.lower() in ("yes", "true", "1")
+
     groups = ''
     if node.hasAttribute('groups'):
       groups = node.getAttribute('groups')
@@ -550,7 +570,8 @@ class XmlManifest(object):
                       revisionExpr = revisionExpr,
                       revisionId = None,
                       rebase = rebase,
-                      groups = groups)
+                      groups = groups,
+                      sync_c = sync_c)
 
     for n in node.childNodes:
       if n.nodeName == 'copyfile':

+ 4 - 1
project.py

@@ -510,7 +510,8 @@ class Project(object):
                revisionExpr,
                revisionId,
                rebase = True,
-               groups = None):
+               groups = None,
+               sync_c = False):
     self.manifest = manifest
     self.name = name
     self.remote = remote
@@ -531,6 +532,7 @@ class Project(object):
 
     self.rebase = rebase
     self.groups = groups
+    self.sync_c = sync_c
 
     self.snapshots = {}
     self.copyfiles = []
@@ -964,6 +966,7 @@ class Project(object):
     and self._ApplyCloneBundle(initial=is_new, quiet=quiet):
       is_new = False
 
+    current_branch_only = current_branch_only or self.sync_c or self.manifest.default.sync_c
     if not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir,
                              current_branch_only=current_branch_only):
       return False