summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py44
1 files changed, 40 insertions, 4 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index 7e719600..3ac607ec 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -29,6 +29,7 @@ else:
29 urllib = imp.new_module('urllib') 29 urllib = imp.new_module('urllib')
30 urllib.parse = urlparse 30 urllib.parse = urlparse
31 31
32import gitc_utils
32from git_config import GitConfig 33from git_config import GitConfig
33from git_refs import R_HEADS, HEAD 34from git_refs import R_HEADS, HEAD
34from project import RemoteSpec, Project, MetaProject 35from project import RemoteSpec, Project, MetaProject
@@ -112,6 +113,7 @@ class XmlManifest(object):
112 self.manifestFile = os.path.join(self.repodir, MANIFEST_FILE_NAME) 113 self.manifestFile = os.path.join(self.repodir, MANIFEST_FILE_NAME)
113 self.globalConfig = GitConfig.ForUser() 114 self.globalConfig = GitConfig.ForUser()
114 self.localManifestWarning = False 115 self.localManifestWarning = False
116 self.isGitcClient = False
115 117
116 self.repoProject = MetaProject(self, 'repo', 118 self.repoProject = MetaProject(self, 'repo',
117 gitdir = os.path.join(repodir, 'repo/.git'), 119 gitdir = os.path.join(repodir, 'repo/.git'),
@@ -165,12 +167,13 @@ class XmlManifest(object):
165 def _ParseGroups(self, groups): 167 def _ParseGroups(self, groups):
166 return [x for x in re.split(r'[,\s]+', groups) if x] 168 return [x for x in re.split(r'[,\s]+', groups) if x]
167 169
168 def Save(self, fd, peg_rev=False, peg_rev_upstream=True): 170 def Save(self, fd, peg_rev=False, peg_rev_upstream=True, groups=None):
169 """Write the current manifest out to the given file descriptor. 171 """Write the current manifest out to the given file descriptor.
170 """ 172 """
171 mp = self.manifestProject 173 mp = self.manifestProject
172 174
173 groups = mp.config.GetString('manifest.groups') 175 if groups is None:
176 groups = mp.config.GetString('manifest.groups')
174 if groups: 177 if groups:
175 groups = self._ParseGroups(groups) 178 groups = self._ParseGroups(groups)
176 179
@@ -303,6 +306,11 @@ class XmlManifest(object):
303 if p.sync_s: 306 if p.sync_s:
304 e.setAttribute('sync-s', 'true') 307 e.setAttribute('sync-s', 'true')
305 308
309 if p.clone_depth:
310 e.setAttribute('clone-depth', str(p.clone_depth))
311
312 self._output_manifest_project_extras(p, e)
313
306 if p.subprojects: 314 if p.subprojects:
307 subprojects = set(subp.name for subp in p.subprojects) 315 subprojects = set(subp.name for subp in p.subprojects)
308 output_projects(p, e, list(sorted(subprojects))) 316 output_projects(p, e, list(sorted(subprojects)))
@@ -320,6 +328,10 @@ class XmlManifest(object):
320 328
321 doc.writexml(fd, '', ' ', '\n', 'UTF-8') 329 doc.writexml(fd, '', ' ', '\n', 'UTF-8')
322 330
331 def _output_manifest_project_extras(self, p, e):
332 """Manifests can modify e if they support extra project attributes."""
333 pass
334
323 @property 335 @property
324 def paths(self): 336 def paths(self):
325 self._Load() 337 self._Load()
@@ -709,7 +721,7 @@ class XmlManifest(object):
709 def _UnjoinName(self, parent_name, name): 721 def _UnjoinName(self, parent_name, name):
710 return os.path.relpath(name, parent_name) 722 return os.path.relpath(name, parent_name)
711 723
712 def _ParseProject(self, node, parent = None): 724 def _ParseProject(self, node, parent = None, **extra_proj_attrs):
713 """ 725 """
714 reads a <project> element from the manifest file 726 reads a <project> element from the manifest file
715 """ 727 """
@@ -804,7 +816,8 @@ class XmlManifest(object):
804 clone_depth = clone_depth, 816 clone_depth = clone_depth,
805 upstream = upstream, 817 upstream = upstream,
806 parent = parent, 818 parent = parent,
807 dest_branch = dest_branch) 819 dest_branch = dest_branch,
820 **extra_proj_attrs)
808 821
809 for n in node.childNodes: 822 for n in node.childNodes:
810 if n.nodeName == 'copyfile': 823 if n.nodeName == 'copyfile':
@@ -935,3 +948,26 @@ class XmlManifest(object):
935 diff['added'].append(toProjects[proj]) 948 diff['added'].append(toProjects[proj])
936 949
937 return diff 950 return diff
951
952
953class GitcManifest(XmlManifest):
954
955 def __init__(self, repodir, gitc_client_name):
956 """Initialize the GitcManifest object."""
957 super(GitcManifest, self).__init__(repodir)
958 self.isGitcClient = True
959 self.gitc_client_name = gitc_client_name
960 self.gitc_client_dir = os.path.join(gitc_utils.get_gitc_manifest_dir(),
961 gitc_client_name)
962 self.manifestFile = os.path.join(self.gitc_client_dir, '.manifest')
963
964 def _ParseProject(self, node, parent = None):
965 """Override _ParseProject and add support for GITC specific attributes."""
966 return super(GitcManifest, self)._ParseProject(
967 node, parent=parent, old_revision=node.getAttribute('old-revision'))
968
969 def _output_manifest_project_extras(self, p, e):
970 """Output GITC Specific Project attributes"""
971 if p.old_revision:
972 e.setAttribute('old-revision', str(p.old_revision))
973