From 70939e2f73bf118c89cf4af4988dba807c50a0ce Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 6 Nov 2008 11:07:14 -0800 Subject: Add 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 --- manifest.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'manifest.py') 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): (project.name, self.manifestFile) self._projects[project.name] = project + for node in config.childNodes: + if node.nodeName == 'add-remote': + pn = self._reqatt(node, 'to-project') + project = self._projects.get(pn) + if not project: + raise ManifestParseError, \ + 'project %s not defined in %s' % \ + (pn, self.manifestFile) + self._ParseProjectExtraRemote(project, node) + def _AddMetaProjectMirror(self, m): name = None m_url = m.GetRemote(m.remote.name).url @@ -281,18 +291,21 @@ class Manifest(object): for n in node.childNodes: if n.nodeName == 'remote': - r = self._ParseRemote(n) - if project.extraRemotes.get(r.name) \ - or project.remote.name == r.name: - raise ManifestParseError, \ - 'duplicate remote %s in project %s in %s' % \ - (r.name, project.name, self.manifestFile) - project.extraRemotes[r.name] = r + self._ParseProjectExtraRemote(project, n) elif n.nodeName == 'copyfile': self._ParseCopyFile(project, n) return project + def _ParseProjectExtraRemote(self, project, n): + r = self._ParseRemote(n) + if project.extraRemotes.get(r.name) \ + or project.remote.name == r.name: + raise ManifestParseError, \ + 'duplicate remote %s in project %s in %s' % \ + (r.name, project.name, self.manifestFile) + project.extraRemotes[r.name] = r + def _ParseCopyFile(self, project, node): src = self._reqatt(node, 'src') dest = self._reqatt(node, 'dest') -- cgit v1.2.3-54-g00ecf