| Index: tools/check_git_config.py
|
| diff --git a/tools/check_git_config.py b/tools/check_git_config.py
|
| index f343ff2359d91034c508a195b0a13e2d862b2287..9ddbb53faea88fd9d428ef96a566d7c283938df5 100755
|
| --- a/tools/check_git_config.py
|
| +++ b/tools/check_git_config.py
|
| @@ -44,7 +44,7 @@ GCLIENT_CONFIG = os.path.join(os.path.dirname(REPO_ROOT), '.gclient')
|
|
|
| # Incremented whenever some changes to scrip logic are made. Change in version
|
| # will cause the check to be rerun on next gclient runhooks invocation.
|
| -CHECKER_VERSION = 0
|
| +CHECKER_VERSION = 1
|
|
|
| # Do not attempt to upload a report after this date.
|
| UPLOAD_DISABLE_TS = datetime.datetime(2014, 10, 1)
|
| @@ -69,10 +69,14 @@ GOOD_GCLIENT_SOLUTION = {
|
| BAD_ACL_ERRORS = (
|
| '(prohibited by Gerrit)',
|
| 'does not match your user account',
|
| + 'Git repository not found',
|
| 'Invalid user name or password',
|
| 'Please make sure you have the correct access rights',
|
| )
|
|
|
| +# Git executable to call.
|
| +GIT_EXE = 'git.bat' if sys.platform == 'win32' else 'git'
|
| +
|
|
|
| def is_on_bot():
|
| """True when running under buildbot."""
|
| @@ -105,7 +109,7 @@ def read_git_config(prop):
|
| """
|
| try:
|
| proc = subprocess.Popen(
|
| - ['git', 'config', prop], stdout=subprocess.PIPE, cwd=REPO_ROOT)
|
| + [GIT_EXE, 'config', prop], stdout=subprocess.PIPE, cwd=REPO_ROOT)
|
| out, _ = proc.communicate()
|
| return out.strip()
|
| except OSError as exc:
|
| @@ -130,7 +134,7 @@ def read_netrc_user(netrc_obj, host):
|
| def get_git_version():
|
| """Returns version of git or None if git is not available."""
|
| try:
|
| - proc = subprocess.Popen(['git', '--version'], stdout=subprocess.PIPE)
|
| + proc = subprocess.Popen([GIT_EXE, '--version'], stdout=subprocess.PIPE)
|
| out, _ = proc.communicate()
|
| return out.strip() if proc.returncode == 0 else ''
|
| except OSError as exc:
|
| @@ -159,6 +163,23 @@ def read_gclient_solution():
|
| return None, None, None
|
|
|
|
|
| +def read_git_insteadof(host):
|
| + """Reads relevant insteadOf config entries."""
|
| + try:
|
| + proc = subprocess.Popen([GIT_EXE, 'config', '-l'], stdout=subprocess.PIPE)
|
| + out, _ = proc.communicate()
|
| + lines = []
|
| + for line in out.strip().split('\n'):
|
| + line = line.lower()
|
| + if 'insteadof=' in line and host in line:
|
| + lines.append(line)
|
| + return '\n'.join(lines)
|
| + except OSError as exc:
|
| + if exc.errno != errno.ENOENT:
|
| + logging.exception('Unexpected error when calling git')
|
| + return ''
|
| +
|
| +
|
| def scan_configuration():
|
| """Scans local environment for git related configuration values."""
|
| # Git checkout?
|
| @@ -198,6 +219,7 @@ def scan_configuration():
|
| 'username': getpass.getuser(),
|
| 'git_user_email': read_git_config('user.email') if is_git else '',
|
| 'git_user_name': read_git_config('user.name') if is_git else '',
|
| + 'git_insteadof': read_git_insteadof('chromium.googlesource.com'),
|
| 'chromium_netrc_email':
|
| read_netrc_user(netrc_obj, 'chromium.googlesource.com'),
|
| 'chrome_internal_netrc_email':
|
| @@ -310,21 +332,22 @@ def check_git_config(conf, report_url, verbose):
|
| with temp_directory() as tmp:
|
| # Prepare a simple commit on a new timeline.
|
| runner = Runner(tmp, verbose)
|
| - runner.run(['git', 'init', '.'])
|
| + runner.run([GIT_EXE, 'init', '.'])
|
| if conf['git_user_name']:
|
| - runner.run(['git', 'config', 'user.name', conf['git_user_name']])
|
| + runner.run([GIT_EXE, 'config', 'user.name', conf['git_user_name']])
|
| if conf['git_user_email']:
|
| - runner.run(['git', 'config', 'user.email', conf['git_user_email']])
|
| + runner.run([GIT_EXE, 'config', 'user.email', conf['git_user_email']])
|
| with open(os.path.join(tmp, 'timestamp'), 'w') as f:
|
| f.write(str(int(time.time() * 1000)))
|
| - runner.run(['git', 'add', 'timestamp'])
|
| - runner.run(['git', 'commit', '-m', 'Push test.'])
|
| + runner.run([GIT_EXE, 'add', 'timestamp'])
|
| + runner.run([GIT_EXE, 'commit', '-m', 'Push test.'])
|
| # Try to push multiple times if it fails due to issues other than ACLs.
|
| attempt = 0
|
| while attempt < 5:
|
| attempt += 1
|
| logging.info('Pushing to %s %s', TEST_REPO_URL, ref)
|
| - ret = runner.run(['git', 'push', TEST_REPO_URL, 'HEAD:%s' % ref, '-f'])
|
| + ret = runner.run(
|
| + [GIT_EXE, 'push', TEST_REPO_URL, 'HEAD:%s' % ref, '-f'])
|
| if not ret:
|
| push_works = True
|
| break
|
| @@ -356,10 +379,14 @@ def check_gclient_config(conf):
|
| current = {
|
| 'name': 'src',
|
| 'deps_file': conf['gclient_deps'],
|
| - 'managed': conf['gclient_managed'],
|
| + 'managed': conf['gclient_managed'] or False,
|
| 'url': conf['gclient_url'],
|
| }
|
| - if current != GOOD_GCLIENT_SOLUTION:
|
| + good = GOOD_GCLIENT_SOLUTION
|
| + if current == good:
|
| + return
|
| + # Show big warning if url or deps_file is wrong.
|
| + if current['url'] != good['url'] or current['deps_file'] != good['deps_file']:
|
| print '-' * 80
|
| print 'Your gclient solution is not set to use supported git workflow!'
|
| print
|
| @@ -367,10 +394,30 @@ def check_gclient_config(conf):
|
| print pprint.pformat(current, indent=2)
|
| print
|
| print 'Correct \'src\' solution to use git:'
|
| - print pprint.pformat(GOOD_GCLIENT_SOLUTION, indent=2)
|
| + print pprint.pformat(good, indent=2)
|
| print
|
| print 'Please update your .gclient file ASAP.'
|
| print '-' * 80
|
| + # Show smaller (additional) warning about managed workflow.
|
| + if current['managed']:
|
| + print '-' * 80
|
| + print (
|
| + 'You are using managed gclient mode with git, which was deprecated '
|
| + 'on 8/22/13:')
|
| + print (
|
| + 'https://groups.google.com/a/chromium.org/'
|
| + 'forum/#!topic/chromium-dev/n9N5N3JL2_U')
|
| + print
|
| + print (
|
| + 'It is strongly advised to switch to unmanaged mode. For more '
|
| + 'information about managed mode and reasons for its deprecation see:')
|
| + print 'http://www.chromium.org/developers/how-tos/get-the-code#Managed_mode'
|
| + print
|
| + print (
|
| + 'There\'s also a large suite of tools to assist managing git '
|
| + 'checkouts.\nSee \'man depot_tools\' (or read '
|
| + 'depot_tools/man/html/depot_tools.html).')
|
| + print '-' * 80
|
|
|
|
|
| def upload_report(
|
|
|