From 79770d269e319dee578beed682669703d4c764ba Mon Sep 17 00:00:00 2001 From: Anatol Pomazau Date: Fri, 20 Apr 2012 14:41:59 -0700 Subject: [PATCH] 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 --- docs/manifest-format.txt | 2 ++ manifest_xml.py | 23 ++++++++++++++++++++++- project.py | 5 ++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 764e41eb..53789651 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt @@ -39,6 +39,7 @@ following DTD: + @@ -49,6 +50,7 @@ following DTD: + diff --git a/manifest_xml.py b/manifest_xml.py index d20eac2a..ca65e33f 100644 --- a/manifest_xml.py +++ b/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': diff --git a/project.py b/project.py index 2b740007..40f6f317 100644 --- a/project.py +++ b/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