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 <ganadist@gmail.com>
diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt
index 7778409..0e6cbe3 100644
--- a/docs/manifest-format.txt
+++ b/docs/manifest-format.txt
@@ -47,6 +47,7 @@
<!ATTLIST default sync-j CDATA #IMPLIED>
<!ATTLIST default sync-c CDATA #IMPLIED>
<!ATTLIST default sync-s CDATA #IMPLIED>
+ <!ATTLIST default sync-tags CDATA #IMPLIED>
<!ELEMENT manifest-server EMPTY>
<!ATTLIST manifest-server url CDATA #REQUIRED>
@@ -63,6 +64,7 @@
<!ATTLIST project groups CDATA #IMPLIED>
<!ATTLIST project sync-c CDATA #IMPLIED>
<!ATTLIST project sync-s CDATA #IMPLIED>
+ <!ATTLIST default sync-tags CDATA #IMPLIED>
<!ATTLIST project upstream CDATA #IMPLIED>
<!ATTLIST project clone-depth CDATA #IMPLIED>
<!ATTLIST project force-path CDATA #IMPLIED>
@@ -170,6 +172,10 @@
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 9b5d784..0654222 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -63,6 +63,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 2248a7e..6ef7d3d 100644
--- a/project.py
+++ b/project.py
@@ -660,6 +660,7 @@
groups=None,
sync_c=False,
sync_s=False,
+ sync_tags=True,
clone_depth=None,
upstream=None,
parent=None,
@@ -683,6 +684,7 @@
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 @@
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 @@
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 @@
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)