diff options
author | Shawn O. Pearce <sop@google.com> | 2008-11-06 11:07:14 -0800 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2008-11-06 11:23:08 -0800 |
commit | 70939e2f73bf118c89cf4af4988dba807c50a0ce (patch) | |
tree | b1849b9a48572876b35cd621192cbb4c712e816e /manifest.py | |
parent | ae6e0949d187c35d79dbc0b21788fdbb2c65bf78 (diff) | |
download | git-repo-70939e2f73bf118c89cf4af4988dba807c50a0ce.tar.gz |
Add <add-remote to-project="..."> to inject additional remotes
This way users can add forks they know about to an existing project
that was already declared in the primary manifest. This is mostly
useful with the Linux kernel project, where multiple forks is quite
common for the main upstream tree (e.g. Linus' tree), a platform
architecture tree (e.g. ARM) and a device specific tree (e.g. the
msm7k tree used by Android).
Signed-off-by: Shawn O. Pearce <sop@google.com>
Diffstat (limited to 'manifest.py')
-rw-r--r-- | manifest.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/manifest.py b/manifest.py index 65455687..2ac1453a 100644 --- a/manifest.py +++ b/manifest.py | |||
@@ -165,6 +165,16 @@ class Manifest(object): | |||
165 | (project.name, self.manifestFile) | 165 | (project.name, self.manifestFile) |
166 | self._projects[project.name] = project | 166 | self._projects[project.name] = project |
167 | 167 | ||
168 | for node in config.childNodes: | ||
169 | if node.nodeName == 'add-remote': | ||
170 | pn = self._reqatt(node, 'to-project') | ||
171 | project = self._projects.get(pn) | ||
172 | if not project: | ||
173 | raise ManifestParseError, \ | ||
174 | 'project %s not defined in %s' % \ | ||
175 | (pn, self.manifestFile) | ||
176 | self._ParseProjectExtraRemote(project, node) | ||
177 | |||
168 | def _AddMetaProjectMirror(self, m): | 178 | def _AddMetaProjectMirror(self, m): |
169 | name = None | 179 | name = None |
170 | m_url = m.GetRemote(m.remote.name).url | 180 | m_url = m.GetRemote(m.remote.name).url |
@@ -281,18 +291,21 @@ class Manifest(object): | |||
281 | 291 | ||
282 | for n in node.childNodes: | 292 | for n in node.childNodes: |
283 | if n.nodeName == 'remote': | 293 | if n.nodeName == 'remote': |
284 | r = self._ParseRemote(n) | 294 | self._ParseProjectExtraRemote(project, n) |
285 | if project.extraRemotes.get(r.name) \ | ||
286 | or project.remote.name == r.name: | ||
287 | raise ManifestParseError, \ | ||
288 | 'duplicate remote %s in project %s in %s' % \ | ||
289 | (r.name, project.name, self.manifestFile) | ||
290 | project.extraRemotes[r.name] = r | ||
291 | elif n.nodeName == 'copyfile': | 295 | elif n.nodeName == 'copyfile': |
292 | self._ParseCopyFile(project, n) | 296 | self._ParseCopyFile(project, n) |
293 | 297 | ||
294 | return project | 298 | return project |
295 | 299 | ||
300 | def _ParseProjectExtraRemote(self, project, n): | ||
301 | r = self._ParseRemote(n) | ||
302 | if project.extraRemotes.get(r.name) \ | ||
303 | or project.remote.name == r.name: | ||
304 | raise ManifestParseError, \ | ||
305 | 'duplicate remote %s in project %s in %s' % \ | ||
306 | (r.name, project.name, self.manifestFile) | ||
307 | project.extraRemotes[r.name] = r | ||
308 | |||
296 | def _ParseCopyFile(self, project, node): | 309 | def _ParseCopyFile(self, project, node): |
297 | src = self._reqatt(node, 'src') | 310 | src = self._reqatt(node, 'src') |
298 | dest = self._reqatt(node, 'dest') | 311 | dest = self._reqatt(node, 'dest') |