diff --git a/gclient.py b/gclient.py index f1428c52b..3569f8ebe 100755 --- a/gclient.py +++ b/gclient.py @@ -1233,12 +1233,19 @@ solutions = [ dep.url, self.root_dir, dep.name, self.outbuf) actual_url = scm.GetActualRemoteURL(self._options) if actual_url and not scm.DoesRemoteURLMatch(self._options): + mirror = scm.GetCacheMirror() + if mirror: + mirror_string = '%s (exists=%s)' % (mirror.mirror_path, + mirror.exists()) + else: + mirror_string = 'not used' raise gclient_utils.Error(''' Your .gclient file seems to be broken. The requested URL is different from what is actually checked out in %(checkout_path)s. The .gclient file contains: -%(expected_url)s (%(expected_scm)s) +URL: %(expected_url)s (%(expected_scm)s) +Cache mirror: %(mirror_string)s The local checkout in %(checkout_path)s reports: %(actual_url)s (%(actual_scm)s) @@ -1250,6 +1257,7 @@ want to set 'managed': False in .gclient. ''' % {'checkout_path': os.path.join(self.root_dir, dep.name), 'expected_url': dep.url, 'expected_scm': gclient_scm.GetScmName(dep.url), + 'mirror_string' : mirror_string, 'actual_url': actual_url, 'actual_scm': gclient_scm.GetScmName(actual_url)}) diff --git a/gclient_scm.py b/gclient_scm.py index 9a6f51234..5cf839f00 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -173,19 +173,24 @@ class SCMWrapper(object): # Get the second token of the first line of the log. return log.splitlines()[0].split(' ', 1)[1] + def GetCacheMirror(self): + if (getattr(self, 'cache_dir', None)): + url, _ = gclient_utils.SplitUrlRevision(self.url) + return git_cache.Mirror(url) + return None + def GetActualRemoteURL(self, options): """Attempt to determine the remote URL for this SCMWrapper.""" # Git if os.path.exists(os.path.join(self.checkout_path, '.git')): actual_remote_url = self._get_first_remote_url(self.checkout_path) - # If a cache_dir is used, obtain the actual remote URL from the cache. - if getattr(self, 'cache_dir', None): - url, _ = gclient_utils.SplitUrlRevision(self.url) - mirror = git_cache.Mirror(url) - if (mirror.exists() and mirror.mirror_path.replace('\\', '/') == - actual_remote_url.replace('\\', '/')): - actual_remote_url = self._get_first_remote_url(mirror.mirror_path) + mirror = self.GetCacheMirror() + # If the cache is used, obtain the actual remote URL from there. + if (mirror and mirror.exists() and + mirror.mirror_path.replace('\\', '/') == + actual_remote_url.replace('\\', '/')): + actual_remote_url = self._get_first_remote_url(mirror.mirror_path) return actual_remote_url # Svn