Fix XmlManifest.Save with remotes that have 'alias' set
When the alias attribute is set for a remote, the RemoteSpec attached to
a Project only contains the alias name used by git, not the original
name used in the manifest. But that's not enough information to
reconstruct the manifest, so save off the original manifest name as
another RemoteSpec parameter, only used to write the manifest out.
Bug: Issue 181
Bug: Issue 219
Change-Id: Id7417dfd6ce5572e4e5fe14f22924fdf088ca4f3
diff --git a/manifest_xml.py b/manifest_xml.py
index 3ac607e..bc4d8c4 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -102,7 +102,10 @@
remoteName = self.name
if self.remoteAlias:
remoteName = self.remoteAlias
- return RemoteSpec(remoteName, url, self.reviewUrl)
+ return RemoteSpec(remoteName,
+ url=url,
+ review=self.reviewUrl,
+ orig_name=self.name)
class XmlManifest(object):
"""manages the repo configuration file"""
@@ -249,9 +252,9 @@
e.setAttribute('path', relpath)
remoteName = None
if d.remote:
- remoteName = d.remote.remoteAlias or d.remote.name
- if not d.remote or p.remote.name != remoteName:
- remoteName = p.remote.name
+ remoteName = d.remote.name
+ if not d.remote or p.remote.orig_name != remoteName:
+ remoteName = p.remote.orig_name
e.setAttribute('remote', remoteName)
if peg_rev:
if self.IsMirror:
@@ -267,7 +270,7 @@
# isn't our value
e.setAttribute('upstream', p.revisionExpr)
else:
- revision = self.remotes[remoteName].revision or d.revisionExpr
+ revision = self.remotes[p.remote.orig_name].revision or d.revisionExpr
if not revision or revision != p.revisionExpr:
e.setAttribute('revision', p.revisionExpr)
if p.upstream and p.upstream != p.revisionExpr:
diff --git a/project.py b/project.py
index e0bd9c1..8213e43 100644
--- a/project.py
+++ b/project.py
@@ -315,11 +315,13 @@
name,
url=None,
review=None,
- revision=None):
+ revision=None,
+ orig_name=None):
self.name = name
self.url = url
self.review = review
self.revision = revision
+ self.orig_name = orig_name
class RepoHook(object):