diff options
Diffstat (limited to 'manifest_xml.py')
-rw-r--r-- | manifest_xml.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/manifest_xml.py b/manifest_xml.py index 6d70c86b..890c954d 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
@@ -168,6 +168,9 @@ class XmlManifest(object): | |||
168 | if r.revision is not None: | 168 | if r.revision is not None: |
169 | e.setAttribute('revision', r.revision) | 169 | e.setAttribute('revision', r.revision) |
170 | 170 | ||
171 | def _ParseGroups(self, groups): | ||
172 | return [x for x in re.split(r'[,\s]+', groups) if x] | ||
173 | |||
171 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): | 174 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): |
172 | """Write the current manifest out to the given file descriptor. | 175 | """Write the current manifest out to the given file descriptor. |
173 | """ | 176 | """ |
@@ -175,7 +178,7 @@ class XmlManifest(object): | |||
175 | 178 | ||
176 | groups = mp.config.GetString('manifest.groups') | 179 | groups = mp.config.GetString('manifest.groups') |
177 | if groups: | 180 | if groups: |
178 | groups = [x for x in re.split(r'[,\s]+', groups) if x] | 181 | groups = self._ParseGroups(groups) |
179 | 182 | ||
180 | doc = xml.dom.minidom.Document() | 183 | doc = xml.dom.minidom.Document() |
181 | root = doc.createElement('manifest') | 184 | root = doc.createElement('manifest') |
@@ -511,6 +514,23 @@ class XmlManifest(object): | |||
511 | if node.nodeName == 'project': | 514 | if node.nodeName == 'project': |
512 | project = self._ParseProject(node) | 515 | project = self._ParseProject(node) |
513 | recursively_add_projects(project) | 516 | recursively_add_projects(project) |
517 | if node.nodeName == 'extend-project': | ||
518 | name = self._reqatt(node, 'name') | ||
519 | |||
520 | if name not in self._projects: | ||
521 | raise ManifestParseError('extend-project element specifies non-existent ' | ||
522 | 'project: %s' % name) | ||
523 | |||
524 | path = node.getAttribute('path') | ||
525 | groups = node.getAttribute('groups') | ||
526 | if groups: | ||
527 | groups = self._ParseGroups(groups) | ||
528 | |||
529 | for p in self._projects[name]: | ||
530 | if path and p.relpath != path: | ||
531 | continue | ||
532 | if groups: | ||
533 | p.groups.extend(groups) | ||
514 | if node.nodeName == 'repo-hooks': | 534 | if node.nodeName == 'repo-hooks': |
515 | # Get the name of the project and the (space-separated) list of enabled. | 535 | # Get the name of the project and the (space-separated) list of enabled. |
516 | repo_hooks_project = self._reqatt(node, 'in-project') | 536 | repo_hooks_project = self._reqatt(node, 'in-project') |
@@ -751,7 +771,7 @@ class XmlManifest(object): | |||
751 | groups = '' | 771 | groups = '' |
752 | if node.hasAttribute('groups'): | 772 | if node.hasAttribute('groups'): |
753 | groups = node.getAttribute('groups') | 773 | groups = node.getAttribute('groups') |
754 | groups = [x for x in re.split(r'[,\s]+', groups) if x] | 774 | groups = self._ParseGroups(groups) |
755 | 775 | ||
756 | if parent is None: | 776 | if parent is None: |
757 | relpath, worktree, gitdir, objdir = self.GetProjectPaths(name, path) | 777 | relpath, worktree, gitdir, objdir = self.GetProjectPaths(name, path) |