summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
authorNico Sallembien <nsallembien@google.com>2010-04-06 10:40:01 -0700
committerNico Sallembien <nsallembien@google.com>2010-04-13 10:20:37 -0700
commita1bfd2cd7253b1662e08f5ec5be3d863430c756c (patch)
tree48cf4d0a983e37b50220cecc043793d6a5f0c319 /manifest_xml.py
parent6d7508b3d52781a3f8170a4257c65e2de176cc68 (diff)
downloadgit-repo-a1bfd2cd7253b1662e08f5ec5be3d863430c756c.tar.gz
Add a 'smart sync' option to repo syncv1.6.9.2
This option allows the user to specify a manifest server to use when syncing. This manifest server will provide a manifest pegging each project to a known green build. This allows developers to work on a known good tree that is known to build and pass tests, preventing failed builds to hamper productivity. The manifest used is not "sticky" so as to allow subsequent 'repo sync' calls to sync to the tip of the tree. Change-Id: Id0a24ece20f5a88034ad364b416a1dd2e394226d
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py32
1 files changed, 29 insertions, 3 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index 7d02f9d6..d0c9debe 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -65,8 +65,8 @@ class XmlManifest(object):
65 65
66 self._Unload() 66 self._Unload()
67 67
68 def Link(self, name): 68 def Override(self, name):
69 """Update the repo metadata to use a different manifest. 69 """Use a different manifest, just for the current instantiation.
70 """ 70 """
71 path = os.path.join(self.manifestProject.worktree, name) 71 path = os.path.join(self.manifestProject.worktree, name)
72 if not os.path.isfile(path): 72 if not os.path.isfile(path):
@@ -80,6 +80,11 @@ class XmlManifest(object):
80 finally: 80 finally:
81 self.manifestFile = old 81 self.manifestFile = old
82 82
83 def Link(self, name):
84 """Update the repo metadata to use a different manifest.
85 """
86 self.Override(name)
87
83 try: 88 try:
84 if os.path.exists(self.manifestFile): 89 if os.path.exists(self.manifestFile):
85 os.remove(self.manifestFile) 90 os.remove(self.manifestFile)
@@ -123,6 +128,12 @@ class XmlManifest(object):
123 root.appendChild(e) 128 root.appendChild(e)
124 root.appendChild(doc.createTextNode('')) 129 root.appendChild(doc.createTextNode(''))
125 130
131 if self._manifest_server:
132 e = doc.createElement('manifest-server')
133 e.setAttribute('url', self._manifest_server)
134 root.appendChild(e)
135 root.appendChild(doc.createTextNode(''))
136
126 sort_projects = list(self.projects.keys()) 137 sort_projects = list(self.projects.keys())
127 sort_projects.sort() 138 sort_projects.sort()
128 139
@@ -169,6 +180,11 @@ class XmlManifest(object):
169 return self._default 180 return self._default
170 181
171 @property 182 @property
183 def manifest_server(self):
184 self._Load()
185 return self._manifest_server
186
187 @property
172 def IsMirror(self): 188 def IsMirror(self):
173 return self.manifestProject.config.GetBoolean('repo.mirror') 189 return self.manifestProject.config.GetBoolean('repo.mirror')
174 190
@@ -178,6 +194,7 @@ class XmlManifest(object):
178 self._remotes = {} 194 self._remotes = {}
179 self._default = None 195 self._default = None
180 self.branch = None 196 self.branch = None
197 self._manifest_server = None
181 198
182 def _Load(self): 199 def _Load(self):
183 if not self._loaded: 200 if not self._loaded:
@@ -247,6 +264,15 @@ class XmlManifest(object):
247 self._default = _Default() 264 self._default = _Default()
248 265
249 for node in config.childNodes: 266 for node in config.childNodes:
267 if node.nodeName == 'manifest-server':
268 url = self._reqatt(node, 'url')
269 if self._manifest_server is not None:
270 raise ManifestParseError, \
271 'duplicate manifest-server in %s' % \
272 (self.manifestFile)
273 self._manifest_server = url
274
275 for node in config.childNodes:
250 if node.nodeName == 'project': 276 if node.nodeName == 'project':
251 project = self._ParseProject(node) 277 project = self._ParseProject(node)
252 if self._projects.get(project.name): 278 if self._projects.get(project.name):
@@ -315,7 +341,7 @@ class XmlManifest(object):
315 def _ParseProject(self, node): 341 def _ParseProject(self, node):
316 """ 342 """
317 reads a <project> element from the manifest file 343 reads a <project> element from the manifest file
318 """ 344 """
319 name = self._reqatt(node, 'name') 345 name = self._reqatt(node, 'name')
320 346
321 remote = self._get_remote(node) 347 remote = self._get_remote(node)