summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
authorConley Owens <cco3@android.com>2014-05-08 18:38:32 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-05-08 18:38:33 +0000
commite9f75b1782dbf6ce9a8f22256316dbb66cdbab11 (patch)
tree1f645764ff04aa5f104b9c3eb9d287f09c80dddc /manifest_xml.py
parenta35e4021619eac80ebc162b91f42c919a145bd5b (diff)
parent36ea2fb6ee0f42144d44cf9aa7196bfa3b56e9e6 (diff)
downloadgit-repo-e9f75b1782dbf6ce9a8f22256316dbb66cdbab11.tar.gz
Merge "Enable remotes to define their own revision"
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index a79f7142..fdc31778 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -63,12 +63,14 @@ class _XmlRemote(object):
63 alias=None, 63 alias=None,
64 fetch=None, 64 fetch=None,
65 manifestUrl=None, 65 manifestUrl=None,
66 review=None): 66 review=None,
67 revision=None):
67 self.name = name 68 self.name = name
68 self.fetchUrl = fetch 69 self.fetchUrl = fetch
69 self.manifestUrl = manifestUrl 70 self.manifestUrl = manifestUrl
70 self.remoteAlias = alias 71 self.remoteAlias = alias
71 self.reviewUrl = review 72 self.reviewUrl = review
73 self.revision = revision
72 self.resolvedFetchUrl = self._resolveFetchUrl() 74 self.resolvedFetchUrl = self._resolveFetchUrl()
73 75
74 def __eq__(self, other): 76 def __eq__(self, other):
@@ -159,6 +161,8 @@ class XmlManifest(object):
159 e.setAttribute('alias', r.remoteAlias) 161 e.setAttribute('alias', r.remoteAlias)
160 if r.reviewUrl is not None: 162 if r.reviewUrl is not None:
161 e.setAttribute('review', r.reviewUrl) 163 e.setAttribute('review', r.reviewUrl)
164 if r.revision is not None:
165 e.setAttribute('revision', r.revision)
162 166
163 def Save(self, fd, peg_rev=False, peg_rev_upstream=True): 167 def Save(self, fd, peg_rev=False, peg_rev_upstream=True):
164 """Write the current manifest out to the given file descriptor. 168 """Write the current manifest out to the given file descriptor.
@@ -240,7 +244,8 @@ class XmlManifest(object):
240 if d.remote: 244 if d.remote:
241 remoteName = d.remote.remoteAlias or d.remote.name 245 remoteName = d.remote.remoteAlias or d.remote.name
242 if not d.remote or p.remote.name != remoteName: 246 if not d.remote or p.remote.name != remoteName:
243 e.setAttribute('remote', p.remote.name) 247 remoteName = p.remote.name
248 e.setAttribute('remote', remoteName)
244 if peg_rev: 249 if peg_rev:
245 if self.IsMirror: 250 if self.IsMirror:
246 value = p.bare_git.rev_parse(p.revisionExpr + '^0') 251 value = p.bare_git.rev_parse(p.revisionExpr + '^0')
@@ -252,8 +257,10 @@ class XmlManifest(object):
252 # isn't our value, and the if the default doesn't already have that 257 # isn't our value, and the if the default doesn't already have that
253 # covered. 258 # covered.
254 e.setAttribute('upstream', p.revisionExpr) 259 e.setAttribute('upstream', p.revisionExpr)
255 elif not d.revisionExpr or p.revisionExpr != d.revisionExpr: 260 else:
256 e.setAttribute('revision', p.revisionExpr) 261 revision = self.remotes[remoteName].revision or d.revisionExpr
262 if not revision or revision != p.revisionExpr:
263 e.setAttribute('revision', p.revisionExpr)
257 264
258 for c in p.copyfiles: 265 for c in p.copyfiles:
259 ce = doc.createElement('copyfile') 266 ce = doc.createElement('copyfile')
@@ -592,8 +599,11 @@ class XmlManifest(object):
592 review = node.getAttribute('review') 599 review = node.getAttribute('review')
593 if review == '': 600 if review == '':
594 review = None 601 review = None
602 revision = node.getAttribute('revision')
603 if revision == '':
604 revision = None
595 manifestUrl = self.manifestProject.config.GetString('remote.origin.url') 605 manifestUrl = self.manifestProject.config.GetString('remote.origin.url')
596 return _XmlRemote(name, alias, fetch, manifestUrl, review) 606 return _XmlRemote(name, alias, fetch, manifestUrl, review, revision)
597 607
598 def _ParseDefault(self, node): 608 def _ParseDefault(self, node):
599 """ 609 """
@@ -686,7 +696,7 @@ class XmlManifest(object):
686 raise ManifestParseError("no remote for project %s within %s" % 696 raise ManifestParseError("no remote for project %s within %s" %
687 (name, self.manifestFile)) 697 (name, self.manifestFile))
688 698
689 revisionExpr = node.getAttribute('revision') 699 revisionExpr = node.getAttribute('revision') or remote.revision
690 if not revisionExpr: 700 if not revisionExpr:
691 revisionExpr = self._default.revisionExpr 701 revisionExpr = self._default.revisionExpr
692 if not revisionExpr: 702 if not revisionExpr: