diff options
Diffstat (limited to 'manifest_xml.py')
-rw-r--r-- | manifest_xml.py | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/manifest_xml.py b/manifest_xml.py index 6dc01a47..b33ec627 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 | ||
32 | import gitc_utils | ||
32 | from git_config import GitConfig | 33 | from git_config import GitConfig |
33 | from git_refs import R_HEADS, HEAD | 34 | from git_refs import R_HEADS, HEAD |
34 | from project import RemoteSpec, Project, MetaProject | 35 | from 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'), |
@@ -306,6 +308,8 @@ class XmlManifest(object): | |||
306 | if p.clone_depth: | 308 | if p.clone_depth: |
307 | e.setAttribute('clone-depth', str(p.clone_depth)) | 309 | e.setAttribute('clone-depth', str(p.clone_depth)) |
308 | 310 | ||
311 | self._output_manifest_project_extras(p, e) | ||
312 | |||
309 | if p.subprojects: | 313 | if p.subprojects: |
310 | subprojects = set(subp.name for subp in p.subprojects) | 314 | subprojects = set(subp.name for subp in p.subprojects) |
311 | output_projects(p, e, list(sorted(subprojects))) | 315 | output_projects(p, e, list(sorted(subprojects))) |
@@ -323,6 +327,10 @@ class XmlManifest(object): | |||
323 | 327 | ||
324 | doc.writexml(fd, '', ' ', '\n', 'UTF-8') | 328 | doc.writexml(fd, '', ' ', '\n', 'UTF-8') |
325 | 329 | ||
330 | def _output_manifest_project_extras(self, p, e): | ||
331 | """Manifests can modify e if they support extra project attributes.""" | ||
332 | pass | ||
333 | |||
326 | @property | 334 | @property |
327 | def paths(self): | 335 | def paths(self): |
328 | self._Load() | 336 | self._Load() |
@@ -712,7 +720,7 @@ class XmlManifest(object): | |||
712 | def _UnjoinName(self, parent_name, name): | 720 | def _UnjoinName(self, parent_name, name): |
713 | return os.path.relpath(name, parent_name) | 721 | return os.path.relpath(name, parent_name) |
714 | 722 | ||
715 | def _ParseProject(self, node, parent = None): | 723 | def _ParseProject(self, node, parent = None, **extra_proj_attrs): |
716 | """ | 724 | """ |
717 | reads a <project> element from the manifest file | 725 | reads a <project> element from the manifest file |
718 | """ | 726 | """ |
@@ -807,7 +815,8 @@ class XmlManifest(object): | |||
807 | clone_depth = clone_depth, | 815 | clone_depth = clone_depth, |
808 | upstream = upstream, | 816 | upstream = upstream, |
809 | parent = parent, | 817 | parent = parent, |
810 | dest_branch = dest_branch) | 818 | dest_branch = dest_branch, |
819 | **extra_proj_attrs) | ||
811 | 820 | ||
812 | for n in node.childNodes: | 821 | for n in node.childNodes: |
813 | if n.nodeName == 'copyfile': | 822 | if n.nodeName == 'copyfile': |
@@ -938,3 +947,26 @@ class XmlManifest(object): | |||
938 | diff['added'].append(toProjects[proj]) | 947 | diff['added'].append(toProjects[proj]) |
939 | 948 | ||
940 | return diff | 949 | return diff |
950 | |||
951 | |||
952 | class GitcManifest(XmlManifest): | ||
953 | |||
954 | def __init__(self, repodir, gitc_client_name): | ||
955 | """Initialize the GitcManifest object.""" | ||
956 | super(GitcManifest, self).__init__(repodir) | ||
957 | self.isGitcClient = True | ||
958 | self.gitc_client_name = gitc_client_name | ||
959 | self.gitc_client_dir = os.path.join(gitc_utils.GITC_MANIFEST_DIR, | ||
960 | gitc_client_name) | ||
961 | self.manifestFile = os.path.join(self.gitc_client_dir, '.manifest') | ||
962 | |||
963 | def _ParseProject(self, node, parent = None): | ||
964 | """Override _ParseProject and add support for GITC specific attributes.""" | ||
965 | return super(GitcManifest, self)._ParseProject( | ||
966 | node, parent=parent, old_revision=node.getAttribute('old-revision')) | ||
967 | |||
968 | def _output_manifest_project_extras(self, p, e): | ||
969 | """Output GITC Specific Project attributes""" | ||
970 | if p.old_revision: | ||
971 | e.setAttribute('old-revision', str(p.old_revision)) | ||
972 | |||