diff options
author | David Pursehouse <david.pursehouse@sonymobile.com> | 2012-11-13 08:49:16 +0900 |
---|---|---|
committer | David Pursehouse <david.pursehouse@sonymobile.com> | 2012-11-13 09:35:37 +0900 |
commit | 717ece9d81ab428ff7358fb3d8a941f8371b626c (patch) | |
tree | 6016811bf8504da6042727f46ff8510d61a84a42 | |
parent | 5566ae5ddea409279b13e538b513a73062862c3e (diff) | |
download | git-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.py | 19 |
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': |