Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: gclient_scm.py

Issue 247493002: Eliminate all interactive terminal prompts from git. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: fix scm_unittest.py Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | scm.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Gclient-specific SCM-specific operations.""" 5 """Gclient-specific SCM-specific operations."""
6 6
7 from __future__ import print_function 7 from __future__ import print_function
8 8
9 import logging 9 import logging
10 import os 10 import os
(...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 def _GetCurrentBranch(self): 953 def _GetCurrentBranch(self):
954 # Returns name of current branch or None for detached HEAD 954 # Returns name of current branch or None for detached HEAD
955 branch = self._Capture(['rev-parse', '--abbrev-ref=strict', 'HEAD']) 955 branch = self._Capture(['rev-parse', '--abbrev-ref=strict', 'HEAD'])
956 if branch == 'HEAD': 956 if branch == 'HEAD':
957 return None 957 return None
958 return branch 958 return branch
959 959
960 def _Capture(self, args, **kwargs): 960 def _Capture(self, args, **kwargs):
961 kwargs.setdefault('cwd', self.checkout_path) 961 kwargs.setdefault('cwd', self.checkout_path)
962 kwargs.setdefault('stderr', subprocess2.PIPE) 962 kwargs.setdefault('stderr', subprocess2.PIPE)
963 return subprocess2.check_output(['git'] + args, **kwargs).strip() 963 env = scm.GIT.ApplyEnvVars(kwargs)
964 return subprocess2.check_output(['git'] + args, env=env, **kwargs).strip()
964 965
965 def _UpdateBranchHeads(self, options, fetch=False): 966 def _UpdateBranchHeads(self, options, fetch=False):
966 """Adds, and optionally fetches, "branch-heads" refspecs if requested.""" 967 """Adds, and optionally fetches, "branch-heads" refspecs if requested."""
967 if hasattr(options, 'with_branch_heads') and options.with_branch_heads: 968 if hasattr(options, 'with_branch_heads') and options.with_branch_heads:
968 config_cmd = ['config', 'remote.%s.fetch' % self.remote, 969 config_cmd = ['config', 'remote.%s.fetch' % self.remote,
969 '+refs/branch-heads/*:refs/remotes/branch-heads/*', 970 '+refs/branch-heads/*:refs/remotes/branch-heads/*',
970 '^\\+refs/branch-heads/\\*:.*$'] 971 '^\\+refs/branch-heads/\\*:.*$']
971 self._Run(config_cmd, options) 972 self._Run(config_cmd, options)
972 if fetch: 973 if fetch:
973 cfg = gclient_utils.DefaultIndexPackConfig(self.url) 974 cfg = gclient_utils.DefaultIndexPackConfig(self.url)
974 fetch_cmd = cfg + ['fetch', self.remote] 975 fetch_cmd = cfg + ['fetch', self.remote]
975 if options.verbose: 976 if options.verbose:
976 fetch_cmd.append('--verbose') 977 fetch_cmd.append('--verbose')
977 self._Run(fetch_cmd, options, retry=True) 978 self._Run(fetch_cmd, options, retry=True)
978 979
979 def _Run(self, args, options, **kwargs): 980 def _Run(self, args, options, **kwargs):
980 cwd = kwargs.setdefault('cwd', self.checkout_path) 981 cwd = kwargs.setdefault('cwd', self.checkout_path)
981 kwargs.setdefault('stdout', self.out_fh) 982 kwargs.setdefault('stdout', self.out_fh)
982 kwargs['filter_fn'] = self.filter 983 kwargs['filter_fn'] = self.filter
983 kwargs.setdefault('print_stdout', False) 984 kwargs.setdefault('print_stdout', False)
984 # Don't prompt for passwords; just fail quickly and noisily. 985 env = scm.GIT.ApplyEnvVars(kwargs)
985 # By default, git will use an interactive terminal prompt when a username/
986 # password is needed. That shouldn't happen in the chromium workflow,
987 # and if it does, then gclient may hide the prompt in the midst of a flood
988 # of terminal spew. The only indication that something has gone wrong
989 # will be when gclient hangs unresponsively. Instead, we disable the
990 # password prompt and simply allow git to fail noisily. The error
991 # message produced by git will be copied to gclient's output.
992 env = kwargs.get('env') or kwargs.setdefault('env', os.environ.copy())
993 env.setdefault('GIT_ASKPASS', 'true')
994 env.setdefault('SSH_ASKPASS', 'true')
995
996 cmd = ['git'] + args 986 cmd = ['git'] + args
997 header = "running '%s' in '%s'" % (' '.join(cmd), cwd) 987 header = "running '%s' in '%s'" % (' '.join(cmd), cwd)
998 self.filter(header) 988 self.filter(header)
999 return gclient_utils.CheckCallAndFilter(cmd, **kwargs) 989 return gclient_utils.CheckCallAndFilter(cmd, env=env, **kwargs)
1000 990
1001 991
1002 class SVNWrapper(SCMWrapper): 992 class SVNWrapper(SCMWrapper):
1003 """ Wrapper for SVN """ 993 """ Wrapper for SVN """
1004 name = 'svn' 994 name = 'svn'
1005 995
1006 @staticmethod 996 @staticmethod
1007 def BinaryExists(): 997 def BinaryExists():
1008 """Returns true if the command exists.""" 998 """Returns true if the command exists."""
1009 try: 999 try:
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 new_command.append('--force') 1451 new_command.append('--force')
1462 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: 1452 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
1463 new_command.extend(('--accept', 'theirs-conflict')) 1453 new_command.extend(('--accept', 'theirs-conflict'))
1464 elif options.manually_grab_svn_rev: 1454 elif options.manually_grab_svn_rev:
1465 new_command.append('--force') 1455 new_command.append('--force')
1466 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: 1456 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
1467 new_command.extend(('--accept', 'postpone')) 1457 new_command.extend(('--accept', 'postpone'))
1468 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: 1458 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
1469 new_command.extend(('--accept', 'postpone')) 1459 new_command.extend(('--accept', 'postpone'))
1470 return new_command 1460 return new_command
OLDNEW
« no previous file with comments | « no previous file | scm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698