Index: win_toolchain/get_toolchain_if_necessary.py |
diff --git a/win_toolchain/get_toolchain_if_necessary.py b/win_toolchain/get_toolchain_if_necessary.py |
index fe1ec85023081325ca1f71df19b9c5c350363e4a..654d5659c98fe9907ab65c542b8df6c2822bfba2 100755 |
--- a/win_toolchain/get_toolchain_if_necessary.py |
+++ b/win_toolchain/get_toolchain_if_necessary.py |
@@ -103,7 +103,7 @@ def CalculateHash(root): |
def SaveTimestampsAndHash(root, sha1): |
- """Save timestamps and the final hash to be able to early-out more quickly |
+ """Saves timestamps and the final hash to be able to early-out more quickly |
next time.""" |
file_list = GetFileList(root) |
timestamps_data = { |
@@ -125,36 +125,42 @@ def main(): |
# Move to depot_tools\win_toolchain where we'll store our files, and where |
# the downloader script is. |
os.chdir(os.path.normpath(os.path.join(BASEDIR))) |
+ # TODO(scottmg): http://crbug.com/323300 Attempt to locate a src-internal |
+ # pull and use that as a signal to install Pro also. |
+ should_get_pro = os.path.isfile(os.path.join(BASEDIR, '.vspro')) |
toolchain_dir = '.' |
target_dir = os.path.normpath(os.path.join(toolchain_dir, 'vs2013_files')) |
sha1path = os.path.join(toolchain_dir, 'toolchain_vs2013.hash') |
- desired_hash = '' |
+ desired_hashes = set() |
if os.path.isfile(sha1path): |
with open(sha1path, 'rb') as f: |
- desired_hash = f.read().strip() |
+ desired_hashes = set(f.read().strip().splitlines()) |
# If the current hash doesn't match what we want in the file, nuke and pave. |
# Typically this script is only run when the .sha1 one file is updated, but |
# directly calling "gclient runhooks" will also run it, so we cache |
# based on timestamps to make that case fast. |
current_hash = CalculateHash(target_dir) |
- if current_hash != desired_hash: |
- print 'Windows toolchain out of date or doesn\'t exist, updating...' |
+ if current_hash not in desired_hashes: |
+ print('Windows toolchain out of date or doesn\'t exist, updating (%s)...' % |
+ ('Pro' if should_get_pro else 'Express')) |
# This stays resident and will make the rmdir below fail. |
subprocess.call(['taskkill', '/f', '/im', 'mspdbsrv.exe']) |
if os.path.isdir(target_dir): |
subprocess.check_call('rmdir /s/q "%s"' % target_dir, shell=True) |
- subprocess.check_call([ |
- sys.executable, |
- 'toolchain2013.py', |
- '--targetdir', target_dir]) |
+ args = [sys.executable, |
+ 'toolchain2013.py', |
+ '--targetdir', target_dir] |
+ if not should_get_pro: |
+ args.append('--express') |
+ subprocess.check_call(args) |
current_hash = CalculateHash(target_dir) |
- if current_hash != desired_hash: |
+ if current_hash not in desired_hashes: |
print >> sys.stderr, ( |
'Got wrong hash after pulling a new toolchain. ' |
- 'Wanted \'%s\', got \'%s\'.' % ( |
- desired_hash, current_hash)) |
+ 'Wanted one of \'%s\', got \'%s\'.' % ( |
+ desired_hashes, current_hash)) |
return 1 |
SaveTimestampsAndHash(target_dir, current_hash) |