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 fdc31778..bd1ab69b 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
| @@ -164,6 +164,9 @@ class XmlManifest(object): | |||
| 164 | if r.revision is not None: | 164 | if r.revision is not None: |
| 165 | e.setAttribute('revision', r.revision) | 165 | e.setAttribute('revision', r.revision) |
| 166 | 166 | ||
| 167 | def _ParseGroups(self, groups): | ||
| 168 | return [x for x in re.split(r'[,\s]+', groups) if x] | ||
| 169 | |||
| 167 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): | 170 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): |
| 168 | """Write the current manifest out to the given file descriptor. | 171 | """Write the current manifest out to the given file descriptor. |
| 169 | """ | 172 | """ |
| @@ -171,7 +174,7 @@ class XmlManifest(object): | |||
| 171 | 174 | ||
| 172 | groups = mp.config.GetString('manifest.groups') | 175 | groups = mp.config.GetString('manifest.groups') |
| 173 | if groups: | 176 | if groups: |
| 174 | groups = [x for x in re.split(r'[,\s]+', groups) if x] | 177 | groups = self._ParseGroups(groups) |
| 175 | 178 | ||
| 176 | doc = xml.dom.minidom.Document() | 179 | doc = xml.dom.minidom.Document() |
| 177 | root = doc.createElement('manifest') | 180 | root = doc.createElement('manifest') |
| @@ -505,6 +508,23 @@ class XmlManifest(object): | |||
| 505 | if node.nodeName == 'project': | 508 | if node.nodeName == 'project': |
| 506 | project = self._ParseProject(node) | 509 | project = self._ParseProject(node) |
| 507 | recursively_add_projects(project) | 510 | recursively_add_projects(project) |
| 511 | if node.nodeName == 'extend-project': | ||
| 512 | name = self._reqatt(node, 'name') | ||
| 513 | |||
| 514 | if name not in self._projects: | ||
| 515 | raise ManifestParseError('extend-project element specifies non-existent ' | ||
| 516 | 'project: %s' % name) | ||
| 517 | |||
| 518 | path = node.getAttribute('path') | ||
| 519 | groups = node.getAttribute('groups') | ||
| 520 | if groups: | ||
| 521 | groups = self._ParseGroups(groups) | ||
| 522 | |||
| 523 | for p in self._projects[name]: | ||
| 524 | if path and p.relpath != path: | ||
| 525 | continue | ||
| 526 | if groups: | ||
| 527 | p.groups.extend(groups) | ||
| 508 | if node.nodeName == 'repo-hooks': | 528 | if node.nodeName == 'repo-hooks': |
| 509 | # Get the name of the project and the (space-separated) list of enabled. | 529 | # Get the name of the project and the (space-separated) list of enabled. |
| 510 | repo_hooks_project = self._reqatt(node, 'in-project') | 530 | repo_hooks_project = self._reqatt(node, 'in-project') |
| @@ -745,7 +765,7 @@ class XmlManifest(object): | |||
| 745 | groups = '' | 765 | groups = '' |
| 746 | if node.hasAttribute('groups'): | 766 | if node.hasAttribute('groups'): |
| 747 | groups = node.getAttribute('groups') | 767 | groups = node.getAttribute('groups') |
| 748 | groups = [x for x in re.split(r'[,\s]+', groups) if x] | 768 | groups = self._ParseGroups(groups) |
| 749 | 769 | ||
| 750 | if parent is None: | 770 | if parent is None: |
| 751 | relpath, worktree, gitdir, objdir = self.GetProjectPaths(name, path) | 771 | relpath, worktree, gitdir, objdir = self.GetProjectPaths(name, path) |
