Fix gsutil execution on Windows.

5498b95831de0711fda19f2aabac4645ffb6cc78 runs gsutil using 'os.execv',
which, on Windows, apparently causes it to return before completion.

Also add verbosity to '7z' failures on toolchain downloading.

BUG=chromium:445425
TEST=bot
  - Ran on bot, this fix solves the problem that we were seeing.

R=pgervais@chromium.org, sergeyberezin@chromium.org

Review URL: https://codereview.chromium.org/828463003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@293507 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gsutil.py b/gsutil.py
index 7e6bb44..6578d78 100755
--- a/gsutil.py
+++ b/gsutil.py
@@ -28,7 +28,9 @@
 
 
 class SubprocessError(Exception):
-  pass
+  def __init__(self, message=None, code=0):
+    super(SubprocessError, self).__init__(message)
+    self.code = code
 
 
 class InvalidGsutilError(Exception):
@@ -46,7 +48,7 @@
       sys.stdout.write(line)
   code = proc.wait()
   if code:
-    raise SubprocessError('%s failed with %s' % (args, code))
+    raise SubprocessError('%s failed with %s' % (args, code), code)
   return ''.join(out)
 
 
@@ -125,7 +127,11 @@
   else:
     gsutil_bin = fallback
   cmd = [sys.executable, gsutil_bin] + args
-  os.execv(cmd[0], cmd)
+  try:
+    call(cmd)
+  except SubprocessError as e:
+    return e.code
+  return 0
 
 
 def parse_args():
@@ -145,7 +151,7 @@
 
 def main():
   force_version, fallback, target, args = parse_args()
-  run_gsutil(force_version, fallback, target, args)
+  return run_gsutil(force_version, fallback, target, args)
 
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/win_toolchain/toolchain2013.py b/win_toolchain/toolchain2013.py
index 3ca83b4..35dc1fc 100755
--- a/win_toolchain/toolchain2013.py
+++ b/win_toolchain/toolchain2013.py
@@ -150,7 +150,7 @@
   # TODO(scottmg): Do this (and exe) manually with python code.
   # Note that at the beginning of main() we set the working directory to 7z's
   # location so that 7z can find its codec dll.
-  RunOrDie('7z x "%s" -y "-o%s" >nul' % (iso_path, target_path))
+  RunOrDie('7z x "%s" -y "-o%s"' % (iso_path, target_path))
   return target_path
 
 
@@ -431,7 +431,7 @@
   local_zip = DownloadUsingGsutil(tree_sha1 + '.zip')
   sys.stdout.write('Extracting %s...\n' % local_zip)
   sys.stdout.flush()
-  RunOrDie('7z x "%s" -y "-o%s" >nul' % (local_zip, target_dir))
+  RunOrDie('7z x "%s" -y "-o%s"' % (local_zip, target_dir))
 
 
 def main():