diff options
author | Nico Sallembien <nsallembien@google.com> | 2010-04-06 10:40:01 -0700 |
---|---|---|
committer | Nico Sallembien <nsallembien@google.com> | 2010-04-13 10:20:37 -0700 |
commit | a1bfd2cd7253b1662e08f5ec5be3d863430c756c (patch) | |
tree | 48cf4d0a983e37b50220cecc043793d6a5f0c319 /manifest_xml.py | |
parent | 6d7508b3d52781a3f8170a4257c65e2de176cc68 (diff) | |
download | git-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.py | 32 |
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) |