summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py55
1 files changed, 52 insertions, 3 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index bf730caa..e1ef330f 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -283,9 +283,8 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
283 def _ParseGroups(self, groups): 283 def _ParseGroups(self, groups):
284 return [x for x in re.split(r'[,\s]+', groups) if x] 284 return [x for x in re.split(r'[,\s]+', groups) if x]
285 285
286 def Save(self, fd, peg_rev=False, peg_rev_upstream=True, peg_rev_dest_branch=True, groups=None): 286 def ToXml(self, peg_rev=False, peg_rev_upstream=True, peg_rev_dest_branch=True, groups=None):
287 """Write the current manifest out to the given file descriptor. 287 """Return the current manifest XML."""
288 """
289 mp = self.manifestProject 288 mp = self.manifestProject
290 289
291 if groups is None: 290 if groups is None:
@@ -459,6 +458,56 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
459 ' '.join(self._repo_hooks_project.enabled_repo_hooks)) 458 ' '.join(self._repo_hooks_project.enabled_repo_hooks))
460 root.appendChild(e) 459 root.appendChild(e)
461 460
461 return doc
462
463 def ToDict(self, **kwargs):
464 """Return the current manifest as a dictionary."""
465 # Elements that may only appear once.
466 SINGLE_ELEMENTS = {
467 'notice',
468 'default',
469 'manifest-server',
470 'repo-hooks',
471 }
472 # Elements that may be repeated.
473 MULTI_ELEMENTS = {
474 'remote',
475 'remove-project',
476 'project',
477 'extend-project',
478 'include',
479 # These are children of 'project' nodes.
480 'annotation',
481 'project',
482 'copyfile',
483 'linkfile',
484 }
485
486 doc = self.ToXml(**kwargs)
487 ret = {}
488
489 def append_children(ret, node):
490 for child in node.childNodes:
491 if child.nodeType == xml.dom.Node.ELEMENT_NODE:
492 attrs = child.attributes
493 element = dict((attrs.item(i).localName, attrs.item(i).value)
494 for i in range(attrs.length))
495 if child.nodeName in SINGLE_ELEMENTS:
496 ret[child.nodeName] = element
497 elif child.nodeName in MULTI_ELEMENTS:
498 ret.setdefault(child.nodeName, []).append(element)
499 else:
500 raise ManifestParseError('Unhandled element "%s"' % (child.nodeName,))
501
502 append_children(element, child)
503
504 append_children(ret, doc.firstChild)
505
506 return ret
507
508 def Save(self, fd, **kwargs):
509 """Write the current manifest out to the given file descriptor."""
510 doc = self.ToXml(**kwargs)
462 doc.writexml(fd, '', ' ', '\n', 'UTF-8') 511 doc.writexml(fd, '', ' ', '\n', 'UTF-8')
463 512
464 def _output_manifest_project_extras(self, p, e): 513 def _output_manifest_project_extras(self, p, e):