diff --git a/roll_dep.py b/roll_dep.py index 60398791b8..a0e34149bf 100755 --- a/roll_dep.py +++ b/roll_dep.py @@ -15,12 +15,26 @@ import subprocess import sys +NEED_SHELL = sys.platform.startswith('win') + + +def check_output(*args, **kwargs): + """subprocess.check_output() passing shell=True on Windows for git.""" + kwargs.setdefault('shell', NEED_SHELL) + return subprocess.check_output(*args, **kwargs) + + +def check_call(*args, **kwargs): + """subprocess.check_call() passing shell=True on Windows for git.""" + kwargs.setdefault('shell', NEED_SHELL) + subprocess.check_call(*args, **kwargs) + + def is_pristine(root, merge_base='origin/master'): """Returns True if a git checkout is pristine.""" cmd = ['git', 'diff', '--ignore-submodules', merge_base] - return not ( - subprocess.check_output(cmd, cwd=root).strip() or - subprocess.check_output(cmd + ['--cached'], cwd=root).strip()) + return not (check_output(cmd, cwd=root).strip() or + check_output(cmd + ['--cached'], cwd=root).strip()) def roll(root, deps_dir, key, reviewers, bug): @@ -37,8 +51,8 @@ def roll(root, deps_dir, key, reviewers, bug): print >> sys.stderr, 'Ensure %s is clean first.' % root return 1 - full_dir = os.path.join(os.path.dirname(root), deps_dir) - head = subprocess.check_output( + full_dir = os.path.normpath(os.path.join(os.path.dirname(root), deps_dir)) + head = check_output( ['git', 'rev-parse', 'HEAD'], cwd=full_dir).strip() if not head in deps_content: @@ -58,8 +72,8 @@ def roll(root, deps_dir, key, reviewers, bug): print('Found old revision %s' % head) - subprocess.check_call(['git', 'fetch', 'origin'], cwd=full_dir) - master = subprocess.check_output( + check_call(['git', 'fetch', 'origin'], cwd=full_dir) + master = check_output( ['git', 'rev-parse', 'origin/master'], cwd=full_dir).strip() print('Found new revision %s' % master) @@ -69,7 +83,7 @@ def roll(root, deps_dir, key, reviewers, bug): commit_range = '%s..%s' % (head[:9], master[:9]) - logs = subprocess.check_output( + logs = check_output( ['git', 'log', commit_range, '--date=short', '--format=%ad %ae %s'], cwd=full_dir).strip() logs = re.sub(r'(?m)^(\d\d\d\d-\d\d-\d\d [^@]+)@[^ ]+( .*)$', r'\1\2', logs) @@ -95,8 +109,8 @@ def roll(root, deps_dir, key, reviewers, bug): deps_content = deps_content.replace(head, master) with open(deps, 'wb') as f: f.write(deps_content) - subprocess.check_call(['git', 'add', 'DEPS'], cwd=root) - subprocess.check_call(['git', 'commit', '-m', msg], cwd=root) + check_call(['git', 'add', 'DEPS'], cwd=root) + check_call(['git', 'commit', '-m', msg], cwd=root) print('') if not reviewers: print('You forgot to pass -r, make sure to insert a R=foo@example.com line') @@ -114,7 +128,7 @@ def main(): parser.add_option( '-r', '--reviewer', default='', help='To specify multiple reviewers, use comma separated list, e.g. ' - '-r joe,jack,john. Defaults to @chromium.org') + '-r joe,jane,john. Defaults to @chromium.org') parser.add_option('-b', '--bug', default='') options, args = parser.parse_args() if not len(args) or len(args) > 2: