Simplify GIT.Capture() code to always redirect stderr by default and always throw an exception on failure.
Make gclient_scm_test silent.
Replace raise Exception() with raise gclient_utils.Error().
BUG=54084
TEST=none
Review URL: http://codereview.chromium.org/3353018
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@58936 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient_scm.py b/gclient_scm.py
index 7b8e238..bbed095 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -258,10 +258,9 @@
backoff_time = 5
for _ in range(10):
try:
- remote_output, remote_err = scm.GIT.Capture(
+ remote_output = scm.GIT.Capture(
['remote'] + verbose + ['update'],
- self.checkout_path,
- print_error=False)
+ cwd=self.checkout_path)
break
except gclient_utils.CheckCallError, e:
# Hackish but at that point, git is known to work so just checking for
@@ -276,9 +275,7 @@
raise
if verbose:
- options.stdout.write(remote_output.strip() + '\n')
- # git remote update prints to stderr when used with --verbose
- options.stdout.write(remote_err.strip() + '\n')
+ options.stdout.write(remote_output)
# This is a big hammer, debatable if it should even be here...
if options.force or options.reset:
@@ -331,10 +328,8 @@
options.stdout.write('Trying fast-forward merge to branch : %s\n' %
upstream_branch)
try:
- merge_output, merge_err = scm.GIT.Capture(['merge', '--ff-only',
- upstream_branch],
- self.checkout_path,
- print_error=False)
+ merge_output = scm.GIT.Capture(['merge', '--ff-only', upstream_branch],
+ cwd=self.checkout_path)
except gclient_utils.CheckCallError, e:
if re.match('fatal: Not possible to fast-forward, aborting.', e.stderr):
if not printed_path:
@@ -342,7 +337,7 @@
printed_path = True
while True:
try:
- # TODO(maruel): That can't work.
+ # TODO(maruel): That can't work with --jobs.
action = str(raw_input("Cannot fast-forward merge, attempt to "
"rebase? (y)es / (q)uit / (s)kip : "))
except ValueError:
@@ -382,10 +377,7 @@
if not printed_path:
options.stdout.write('\n_____ %s%s\n' % (self.relpath, rev_str))
printed_path = True
- print merge_output.strip()
- if merge_err:
- options.stdout.write('Merge produced error output:\n%s\n' %
- merge_err.strip())
+ options.stdout.write(merge_output)
if not verbose:
# Make the output a little prettier. It's nice to have some
# whitespace between projects when syncing.
@@ -530,13 +522,11 @@
rebase_cmd.append(branch)
try:
- rebase_output, rebase_err = scm.GIT.Capture(rebase_cmd,
- self.checkout_path,
- print_error=False)
+ rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path)
except gclient_utils.CheckCallError, e:
- if re.match(r'cannot rebase: you have unstaged changes', e.stderr) or \
- re.match(r'cannot rebase: your index contains uncommitted changes',
- e.stderr):
+ if (re.match(r'cannot rebase: you have unstaged changes', e.stderr) or
+ re.match(r'cannot rebase: your index contains uncommitted changes',
+ e.stderr)):
while True:
rebase_action = str(raw_input("Cannot rebase because of unstaged "
"changes.\n'git reset --hard HEAD' ?\n"
@@ -546,8 +536,7 @@
if re.match(r'yes|y', rebase_action, re.I):
self._Run(['reset', '--hard', 'HEAD'], options)
# Should this be recursive?
- rebase_output, rebase_err = scm.GIT.Capture(rebase_cmd,
- self.checkout_path)
+ rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path)
break
elif re.match(r'quit|q', rebase_action, re.I):
raise gclient_utils.Error("Please merge or rebase manually\n"
@@ -572,10 +561,7 @@
self.checkout_path
+ "%s" % ' '.join(rebase_cmd))
- print rebase_output.strip()
- if rebase_err:
- options.stdout.write('Rebase produced error output:\n%s\n' %
- rebase_err.strip())
+ options.stdout.write(rebase_output)
if not options.verbose:
# Make the output a little prettier. It's nice to have some
# whitespace between projects when syncing.
@@ -601,7 +587,7 @@
# Make sure the tree is clean; see git-rebase.sh for reference
try:
scm.GIT.Capture(['update-index', '--ignore-submodules', '--refresh'],
- self.checkout_path, print_error=False)
+ cwd=self.checkout_path)
except gclient_utils.CheckCallError:
raise gclient_utils.Error('\n____ %s%s\n'
'\tYou have unstaged changes.\n'
@@ -609,8 +595,8 @@
% (self.relpath, rev_str))
try:
scm.GIT.Capture(['diff-index', '--cached', '--name-status', '-r',
- '--ignore-submodules', 'HEAD', '--'], self.checkout_path,
- print_error=False)
+ '--ignore-submodules', 'HEAD', '--'],
+ cwd=self.checkout_path)
except gclient_utils.CheckCallError:
raise gclient_utils.Error('\n____ %s%s\n'
'\tYour index contains uncommitted changes\n'
@@ -622,10 +608,8 @@
# reference by a commit). If not, error out -- most likely a rebase is
# in progress, try to detect so we can give a better error.
try:
- _, _ = scm.GIT.Capture(
- ['name-rev', '--no-undefined', 'HEAD'],
- self.checkout_path,
- print_error=False)
+ scm.GIT.Capture(['name-rev', '--no-undefined', 'HEAD'],
+ cwd=self.checkout_path)
except gclient_utils.CheckCallError:
# Commit is not contained by any rev. See if the user is rebasing:
if self._IsRebasing():
@@ -652,8 +636,8 @@
return branch
def _Capture(self, args):
- return gclient_utils.CheckCall(['git'] + args,
- cwd=self.checkout_path)[0].strip()
+ return gclient_utils.CheckCall(
+ ['git'] + args, cwd=self.checkout_path, print_error=False)[0].strip()
def _Run(self, args, options, **kwargs):
kwargs.setdefault('cwd', self.checkout_path)