Improve diagnostic message for wrong gclient config

BUG=591814
TEST=gclient sync prints the correct report locally
when config is wrong.

Review-Url: https://codereview.chromium.org/2018803002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300671 0039d316-1c4b-4281-b951-d872f2087c98
changes/30/350330/1
levarum@chromium.org 9 years ago
parent 7ae58956f6
commit 27a6f9a5cb

@ -1233,12 +1233,19 @@ solutions = [
dep.url, self.root_dir, dep.name, self.outbuf) dep.url, self.root_dir, dep.name, self.outbuf)
actual_url = scm.GetActualRemoteURL(self._options) actual_url = scm.GetActualRemoteURL(self._options)
if actual_url and not scm.DoesRemoteURLMatch(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(''' raise gclient_utils.Error('''
Your .gclient file seems to be broken. The requested URL is different from what Your .gclient file seems to be broken. The requested URL is different from what
is actually checked out in %(checkout_path)s. is actually checked out in %(checkout_path)s.
The .gclient file contains: 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: The local checkout in %(checkout_path)s reports:
%(actual_url)s (%(actual_scm)s) %(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), ''' % {'checkout_path': os.path.join(self.root_dir, dep.name),
'expected_url': dep.url, 'expected_url': dep.url,
'expected_scm': gclient_scm.GetScmName(dep.url), 'expected_scm': gclient_scm.GetScmName(dep.url),
'mirror_string' : mirror_string,
'actual_url': actual_url, 'actual_url': actual_url,
'actual_scm': gclient_scm.GetScmName(actual_url)}) 'actual_scm': gclient_scm.GetScmName(actual_url)})

@ -173,19 +173,24 @@ class SCMWrapper(object):
# Get the second token of the first line of the log. # Get the second token of the first line of the log.
return log.splitlines()[0].split(' ', 1)[1] 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): def GetActualRemoteURL(self, options):
"""Attempt to determine the remote URL for this SCMWrapper.""" """Attempt to determine the remote URL for this SCMWrapper."""
# Git # Git
if os.path.exists(os.path.join(self.checkout_path, '.git')): if os.path.exists(os.path.join(self.checkout_path, '.git')):
actual_remote_url = self._get_first_remote_url(self.checkout_path) 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. mirror = self.GetCacheMirror()
if getattr(self, 'cache_dir', None): # If the cache is used, obtain the actual remote URL from there.
url, _ = gclient_utils.SplitUrlRevision(self.url) if (mirror and mirror.exists() and
mirror = git_cache.Mirror(url) mirror.mirror_path.replace('\\', '/') ==
if (mirror.exists() and mirror.mirror_path.replace('\\', '/') == actual_remote_url.replace('\\', '/')):
actual_remote_url.replace('\\', '/')): actual_remote_url = self._get_first_remote_url(mirror.mirror_path)
actual_remote_url = self._get_first_remote_url(mirror.mirror_path)
return actual_remote_url return actual_remote_url
# Svn # Svn

Loading…
Cancel
Save