From a32c92c206ad02f473cfa9558d4eac8f0fc738a8 Mon Sep 17 00:00:00 2001 From: YOUNG HO CHA Date: Wed, 14 Feb 2018 16:57:31 +0900 Subject: [PATCH] implement optional 'sync-tags' in the manifest file Allow the 'default' and 'project' element in the manifest file to apply "--no-tags" option equivalent. Change-Id: I7e0f8c17a0e25cca744d45df049076d203c52ff5 Signed-off-by: YOUNG HO CHA --- docs/manifest-format.txt | 6 ++++++ manifest_xml.py | 20 ++++++++++++++++++++ project.py | 8 ++++++++ 3 files changed, 34 insertions(+) diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 77784099..0e6cbe32 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt @@ -47,6 +47,7 @@ following DTD: + @@ -63,6 +64,7 @@ following DTD: + @@ -170,6 +172,10 @@ their own will use this value. Attribute `sync-s`: Set to true to also sync sub-projects. +Attribute `sync-tags`: Set to false to only sync the given Git +branch (specified in the `revision` attribute) rather than +the other ref tags. + Element manifest-server ----------------------- diff --git a/manifest_xml.py b/manifest_xml.py index 9b5d7847..0654222e 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -63,6 +63,7 @@ class _Default(object): sync_j = 1 sync_c = False sync_s = False + sync_tags = True def __eq__(self, other): return self.__dict__ == other.__dict__ @@ -238,6 +239,9 @@ class XmlManifest(object): if d.sync_s: have_default = True e.setAttribute('sync-s', 'true') + if not d.sync_tags: + have_default = True + e.setAttribute('sync-tags', 'false') if have_default: root.appendChild(e) root.appendChild(doc.createTextNode('')) @@ -327,6 +331,9 @@ class XmlManifest(object): if p.sync_s: e.setAttribute('sync-s', 'true') + if not p.sync_tags: + e.setAttribute('sync-tags', 'false') + if p.clone_depth: e.setAttribute('clone-depth', str(p.clone_depth)) @@ -702,6 +709,12 @@ class XmlManifest(object): d.sync_s = False else: d.sync_s = sync_s.lower() in ("yes", "true", "1") + + sync_tags = node.getAttribute('sync-tags') + if not sync_tags: + d.sync_tags = True + else: + d.sync_tags = sync_tags.lower() in ("yes", "true", "1") return d def _ParseNotice(self, node): @@ -796,6 +809,12 @@ class XmlManifest(object): else: sync_s = sync_s.lower() in ("yes", "true", "1") + sync_tags = node.getAttribute('sync-tags') + if not sync_tags: + sync_tags = self._default.sync_tags + else: + sync_tags = sync_tags.lower() in ("yes", "true", "1") + clone_depth = node.getAttribute('clone-depth') if clone_depth: try: @@ -841,6 +860,7 @@ class XmlManifest(object): groups = groups, sync_c = sync_c, sync_s = sync_s, + sync_tags = sync_tags, clone_depth = clone_depth, upstream = upstream, parent = parent, diff --git a/project.py b/project.py index 2248a7ef..6ef7d3d3 100644 --- a/project.py +++ b/project.py @@ -660,6 +660,7 @@ class Project(object): groups=None, sync_c=False, sync_s=False, + sync_tags=True, clone_depth=None, upstream=None, parent=None, @@ -683,6 +684,7 @@ class Project(object): groups: The `groups` attribute of manifest.xml's project element. sync_c: The `sync-c` attribute of manifest.xml's project element. sync_s: The `sync-s` attribute of manifest.xml's project element. + sync_tags: The `sync-tags` attribute of manifest.xml's project element. upstream: The `upstream` attribute of manifest.xml's project element. parent: The parent Project object. is_derived: False if the project was explicitly defined in the manifest; @@ -715,6 +717,7 @@ class Project(object): self.groups = groups self.sync_c = sync_c self.sync_s = sync_s + self.sync_tags = sync_tags self.clone_depth = clone_depth self.upstream = upstream self.parent = parent @@ -1289,6 +1292,10 @@ class Project(object): elif self.manifest.default.sync_c: current_branch_only = True + if not no_tags: + if not self.sync_tags: + no_tags = True + if self.clone_depth: depth = self.clone_depth else: @@ -1900,6 +1907,7 @@ class Project(object): groups=self.groups, sync_c=self.sync_c, sync_s=self.sync_s, + sync_tags=self.sync_tags, parent=self, is_derived=True) result.append(subproject)