summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py32
1 files changed, 21 insertions, 11 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index e2f58e62..3517c151 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,12 @@ 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)
264 if p.upstream and p.upstream != p.revisionExpr:
265 e.setAttribute('upstream', p.upstream)
257 266
258 for c in p.copyfiles: 267 for c in p.copyfiles:
259 ce = doc.createElement('copyfile') 268 ce = doc.createElement('copyfile')
@@ -310,7 +319,7 @@ class XmlManifest(object):
310 @property 319 @property
311 def projects(self): 320 def projects(self):
312 self._Load() 321 self._Load()
313 return self._paths.values() 322 return list(self._paths.values())
314 323
315 @property 324 @property
316 def remotes(self): 325 def remotes(self):
@@ -592,8 +601,11 @@ class XmlManifest(object):
592 review = node.getAttribute('review') 601 review = node.getAttribute('review')
593 if review == '': 602 if review == '':
594 review = None 603 review = None
604 revision = node.getAttribute('revision')
605 if revision == '':
606 revision = None
595 manifestUrl = self.manifestProject.config.GetString('remote.origin.url') 607 manifestUrl = self.manifestProject.config.GetString('remote.origin.url')
596 return _XmlRemote(name, alias, fetch, manifestUrl, review) 608 return _XmlRemote(name, alias, fetch, manifestUrl, review, revision)
597 609
598 def _ParseDefault(self, node): 610 def _ParseDefault(self, node):
599 """ 611 """
@@ -686,7 +698,7 @@ class XmlManifest(object):
686 raise ManifestParseError("no remote for project %s within %s" % 698 raise ManifestParseError("no remote for project %s within %s" %
687 (name, self.manifestFile)) 699 (name, self.manifestFile))
688 700
689 revisionExpr = node.getAttribute('revision') 701 revisionExpr = node.getAttribute('revision') or remote.revision
690 if not revisionExpr: 702 if not revisionExpr:
691 revisionExpr = self._default.revisionExpr 703 revisionExpr = self._default.revisionExpr
692 if not revisionExpr: 704 if not revisionExpr:
@@ -872,10 +884,8 @@ class XmlManifest(object):
872 fromProjects = self.paths 884 fromProjects = self.paths
873 toProjects = manifest.paths 885 toProjects = manifest.paths
874 886
875 fromKeys = fromProjects.keys() 887 fromKeys = sorted(fromProjects.keys())
876 fromKeys.sort() 888 toKeys = sorted(toProjects.keys())
877 toKeys = toProjects.keys()
878 toKeys.sort()
879 889
880 diff = {'added': [], 'removed': [], 'changed': [], 'unreachable': []} 890 diff = {'added': [], 'removed': [], 'changed': [], 'unreachable': []}
881 891