From 5cc6679fb84ec887a09895c53a279df821faad49 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 23 Oct 2008 16:19:27 -0700 Subject: [PATCH] Support user supplied custom .repo/local_manifest.xml files By creating a .repo/local_manifest.xml the user can add extra projects into their client space, without touching the main manifest script. For example: $ cat .repo/local_manifest.xml Signed-off-by: Shawn O. Pearce --- manifest.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/manifest.py b/manifest.py index 45b0f9a5..89dd5bed 100644 --- a/manifest.py +++ b/manifest.py @@ -26,6 +26,7 @@ from remote import Remote from error import ManifestParseError MANIFEST_FILE_NAME = 'manifest.xml' +LOCAL_MANIFEST_NAME = 'local_manifest.xml' class _Default(object): """Project defaults within the manifest.""" @@ -108,10 +109,20 @@ class Manifest(object): def _Load(self): if not self._loaded: - self._ParseManifest() + self._ParseManifest(True) + + local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME) + if os.path.exists(local): + try: + real = self.manifestFile + self.manifestFile = local + self._ParseManifest(False) + finally: + self.manifestFile = real + self._loaded = True - def _ParseManifest(self): + def _ParseManifest(self, is_root_file): root = xml.dom.minidom.parse(self.manifestFile) if not root or not root.childNodes: raise ManifestParseError, \ @@ -124,9 +135,10 @@ class Manifest(object): "no in %s" % \ self.manifestFile - self.branch = config.getAttribute('branch') - if not self.branch: - self.branch = 'default' + if is_root_file: + self.branch = config.getAttribute('branch') + if not self.branch: + self.branch = 'default' for node in config.childNodes: if node.nodeName == 'remote':