summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index 95c67d73..ad0017cc 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -637,7 +637,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
637 637
638 self._loaded = True 638 self._loaded = True
639 639
640 def _ParseManifestXml(self, path, include_root): 640 def _ParseManifestXml(self, path, include_root, parent_groups=''):
641 try: 641 try:
642 root = xml.dom.minidom.parse(path) 642 root = xml.dom.minidom.parse(path)
643 except (OSError, xml.parsers.expat.ExpatError) as e: 643 except (OSError, xml.parsers.expat.ExpatError) as e:
@@ -656,12 +656,17 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
656 for node in manifest.childNodes: 656 for node in manifest.childNodes:
657 if node.nodeName == 'include': 657 if node.nodeName == 'include':
658 name = self._reqatt(node, 'name') 658 name = self._reqatt(node, 'name')
659 include_groups = ''
660 if parent_groups:
661 include_groups = parent_groups
662 if node.hasAttribute('groups'):
663 include_groups = node.getAttribute('groups') + ',' + include_groups
659 fp = os.path.join(include_root, name) 664 fp = os.path.join(include_root, name)
660 if not os.path.isfile(fp): 665 if not os.path.isfile(fp):
661 raise ManifestParseError("include %s doesn't exist or isn't a file" 666 raise ManifestParseError("include %s doesn't exist or isn't a file"
662 % (name,)) 667 % (name,))
663 try: 668 try:
664 nodes.extend(self._ParseManifestXml(fp, include_root)) 669 nodes.extend(self._ParseManifestXml(fp, include_root, include_groups))
665 # should isolate this to the exact exception, but that's 670 # should isolate this to the exact exception, but that's
666 # tricky. actual parsing implementation may vary. 671 # tricky. actual parsing implementation may vary.
667 except (KeyboardInterrupt, RuntimeError, SystemExit): 672 except (KeyboardInterrupt, RuntimeError, SystemExit):
@@ -670,6 +675,11 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
670 raise ManifestParseError( 675 raise ManifestParseError(
671 "failed parsing included manifest %s: %s" % (name, e)) 676 "failed parsing included manifest %s: %s" % (name, e))
672 else: 677 else:
678 if parent_groups and node.nodeName == 'project':
679 nodeGroups = parent_groups
680 if node.hasAttribute('groups'):
681 nodeGroups = node.getAttribute('groups') + ',' + nodeGroups
682 node.setAttribute('groups', nodeGroups)
673 nodes.append(node) 683 nodes.append(node)
674 return nodes 684 return nodes
675 685