summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2008-10-23 16:19:27 -0700
committerShawn O. Pearce <sop@google.com>2008-10-23 16:20:14 -0700
commit5cc6679fb84ec887a09895c53a279df821faad49 (patch)
tree36c80f9302586c639385084d1970f982b1434006
parent632768bc65ae0f1dc9eb9260c9146c42d9965a18 (diff)
downloadgit-repo-5cc6679fb84ec887a09895c53a279df821faad49.tar.gz
Support user supplied custom .repo/local_manifest.xml filesv1.0.5
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>
-rw-r--r--manifest.py22
1 files 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
26from error import ManifestParseError 26from error import ManifestParseError
27 27
28MANIFEST_FILE_NAME = 'manifest.xml' 28MANIFEST_FILE_NAME = 'manifest.xml'
29LOCAL_MANIFEST_NAME = 'local_manifest.xml'
29 30
30class _Default(object): 31class _Default(object):
31 """Project defaults within the manifest.""" 32 """Project defaults within the manifest."""
@@ -108,10 +109,20 @@ class Manifest(object):
108 109
109 def _Load(self): 110 def _Load(self):
110 if not self._loaded: 111 if not self._loaded:
111 self._ParseManifest() 112 self._ParseManifest(True)
113
114 local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME)
115 if os.path.exists(local):
116 try:
117 real = self.manifestFile
118 self.manifestFile = local
119 self._ParseManifest(False)
120 finally:
121 self.manifestFile = real
122
112 self._loaded = True 123 self._loaded = True
113 124
114 def _ParseManifest(self): 125 def _ParseManifest(self, is_root_file):
115 root = xml.dom.minidom.parse(self.manifestFile) 126 root = xml.dom.minidom.parse(self.manifestFile)
116 if not root or not root.childNodes: 127 if not root or not root.childNodes:
117 raise ManifestParseError, \ 128 raise ManifestParseError, \
@@ -124,9 +135,10 @@ class Manifest(object):
124 "no <manifest> in %s" % \ 135 "no <manifest> in %s" % \
125 self.manifestFile 136 self.manifestFile
126 137
127 self.branch = config.getAttribute('branch') 138 if is_root_file:
128 if not self.branch: 139 self.branch = config.getAttribute('branch')
129 self.branch = 'default' 140 if not self.branch:
141 self.branch = 'default'
130 142
131 for node in config.childNodes: 143 for node in config.childNodes:
132 if node.nodeName == 'remote': 144 if node.nodeName == 'remote':