summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2012-11-13 08:49:16 +0900
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2012-11-13 09:35:37 +0900
commit717ece9d81ab428ff7358fb3d8a941f8371b626c (patch)
tree6016811bf8504da6042727f46ff8510d61a84a42
parent5566ae5ddea409279b13e538b513a73062862c3e (diff)
downloadgit-repo-717ece9d81ab428ff7358fb3d8a941f8371b626c.tar.gz
Better handling of duplicate remotes
In the current implementation, an error is raised if a remote with the same name is defined more than once. The check is only that the remote has the same name as an existing remote. With the support for multiple local manifests, it is more likely than before that the same remote is defined in more than one manifest. Change the check so that it only raises an error if a remote is defined more than once with the same name, but different attributes. Change-Id: Ic3608646cf9f40aa2bea7015d3ecd099c5f5f835
-rw-r--r--manifest_xml.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index d16f1a98..a3e78fe9 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -54,6 +54,12 @@ class _XmlRemote(object):
54 self.reviewUrl = review 54 self.reviewUrl = review
55 self.resolvedFetchUrl = self._resolveFetchUrl() 55 self.resolvedFetchUrl = self._resolveFetchUrl()
56 56
57 def __eq__(self, other):
58 return self.__dict__ == other.__dict__
59
60 def __ne__(self, other):
61 return self.__dict__ != other.__dict__
62
57 def _resolveFetchUrl(self): 63 def _resolveFetchUrl(self):
58 url = self.fetchUrl.rstrip('/') 64 url = self.fetchUrl.rstrip('/')
59 manifestUrl = self.manifestUrl.rstrip('/') 65 manifestUrl = self.manifestUrl.rstrip('/')
@@ -365,11 +371,14 @@ class XmlManifest(object):
365 for node in itertools.chain(*node_list): 371 for node in itertools.chain(*node_list):
366 if node.nodeName == 'remote': 372 if node.nodeName == 'remote':
367 remote = self._ParseRemote(node) 373 remote = self._ParseRemote(node)
368 if self._remotes.get(remote.name): 374 if remote:
369 raise ManifestParseError( 375 if remote.name in self._remotes:
370 'duplicate remote %s in %s' % 376 if remote != self._remotes[remote.name]:
371 (remote.name, self.manifestFile)) 377 raise ManifestParseError(
372 self._remotes[remote.name] = remote 378 'remote %s already exists with different attributes' %
379 (remote.name))
380 else:
381 self._remotes[remote.name] = remote
373 382
374 for node in itertools.chain(*node_list): 383 for node in itertools.chain(*node_list):
375 if node.nodeName == 'default': 384 if node.nodeName == 'default':