From 40b53b7477e24f1c67fbfeabc7d2e0cae89b0d21 Mon Sep 17 00:00:00 2001 From: "thakis@chromium.org" Date: Tue, 23 Jun 2015 21:04:02 +0000 Subject: [PATCH] make `python build/vs_toolchain.py update` work a bit better on non-windows It still early-exits on non-Windows, so no visible change yet. BUG=495204 Review URL: https://codereview.chromium.org/1181943003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@295807 0039d316-1c4b-4281-b951-d872f2087c98 --- win_toolchain/get_toolchain_if_necessary.py | 25 +++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/win_toolchain/get_toolchain_if_necessary.py b/win_toolchain/get_toolchain_if_necessary.py index c41ccc5a1..0a589ec7d 100755 --- a/win_toolchain/get_toolchain_if_necessary.py +++ b/win_toolchain/get_toolchain_if_necessary.py @@ -128,7 +128,7 @@ def HaveSrcInternalAccess(): def LooksLikeGoogler(): """Checks for a USERDOMAIN environment variable of 'GOOGLE', which probably implies the current user is a Googler.""" - return os.environ.get('USERDOMAIN').upper() == 'GOOGLE' + return os.environ.get('USERDOMAIN', '').upper() == 'GOOGLE' def CanAccessToolchainBucket(): @@ -190,6 +190,15 @@ def DownloadUsingGsutil(filename): return temp_dir, target_path +def RmDir(path): + """Deletes path and all the files it contains.""" + if sys.platform != 'win32': + shutil.rmtree(path, ignore_errors=True) + else: + # shutil.rmtree() doesn't delete read-only files on Windows. + subprocess.check_call('rmdir /s/q "%s"' % path, shell=True) + + def DoTreeMirror(target_dir, tree_sha1): """In order to save temporary space on bots that do not have enough space to download ISOs, unpack them, and copy to the target location, the whole tree @@ -200,7 +209,7 @@ def DoTreeMirror(target_dir, tree_sha1): with zipfile.ZipFile(local_zip, 'r', zipfile.ZIP_DEFLATED, True) as zf: zf.extractall(target_dir) if temp_dir: - subprocess.check_call('rmdir /s/q "%s"' % temp_dir, shell=True) + RmDir(temp_dir) def main(): @@ -222,6 +231,7 @@ def main(): cmd.extend(['--output-json', winpath(options.output_json)]) cmd.extend(args) sys.exit(subprocess.call(cmd)) + assert sys.platform != 'cygwin' # We assume that the Pro hash is the first one. desired_hashes = args @@ -263,12 +273,13 @@ def main(): print(' desired_hashes: %s' % ', '.join(desired_hashes)) sys.stdout.flush() DelayBeforeRemoving(target_dir) - # This stays resident and will make the rmdir below fail. - with open(os.devnull, 'wb') as nul: - subprocess.call(['taskkill', '/f', '/im', 'mspdbsrv.exe'], - stdin=nul, stdout=nul, stderr=nul) + if sys.platform == 'win32': + # This stays resident and will make the rmdir below fail. + with open(os.devnull, 'wb') as nul: + subprocess.call(['taskkill', '/f', '/im', 'mspdbsrv.exe'], + stdin=nul, stdout=nul, stderr=nul) if os.path.isdir(target_dir): - subprocess.check_call('rmdir /s/q "%s"' % target_dir, shell=True) + RmDir(target_dir) DoTreeMirror(target_dir, desired_hashes[0])