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
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="android-build"
name="platform/build"
remote="korg"
revision="android-1.0" />
</manifest>
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/manifest.py b/manifest.py
index 45b0f9a..89dd5be 100644
--- a/manifest.py
+++ b/manifest.py
@@ -26,6 +26,7 @@
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 @@
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 @@
"no <manifest> 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':