From 717ece9d81ab428ff7358fb3d8a941f8371b626c Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Tue, 13 Nov 2012 08:49:16 +0900 Subject: [PATCH] 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 --- manifest_xml.py | 19 ++++++++++++++----- 1 file 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): self.reviewUrl = review self.resolvedFetchUrl = self._resolveFetchUrl() + def __eq__(self, other): + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + return self.__dict__ != other.__dict__ + def _resolveFetchUrl(self): url = self.fetchUrl.rstrip('/') manifestUrl = self.manifestUrl.rstrip('/') @@ -365,11 +371,14 @@ class XmlManifest(object): for node in itertools.chain(*node_list): if node.nodeName == 'remote': remote = self._ParseRemote(node) - if self._remotes.get(remote.name): - raise ManifestParseError( - 'duplicate remote %s in %s' % - (remote.name, self.manifestFile)) - self._remotes[remote.name] = remote + if remote: + if remote.name in self._remotes: + if remote != self._remotes[remote.name]: + raise ManifestParseError( + 'remote %s already exists with different attributes' % + (remote.name)) + else: + self._remotes[remote.name] = remote for node in itertools.chain(*node_list): if node.nodeName == 'default':