summaryrefslogtreecommitdiffstats
path: root/manifest.py
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2008-11-06 11:07:14 -0800
committerShawn O. Pearce <sop@google.com>2008-11-06 11:23:08 -0800
commit70939e2f73bf118c89cf4af4988dba807c50a0ce (patch)
treeb1849b9a48572876b35cd621192cbb4c712e816e /manifest.py
parentae6e0949d187c35d79dbc0b21788fdbb2c65bf78 (diff)
downloadgit-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.py27
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')