Chromium Code Reviews| 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. |
|
M-A Ruel
2014/02/03 23:10:52
I don't think this is a useful signal at all.
scottmg
2014/02/03 23:22:12
Why? src-internal doesn't correspond to Googler co
M-A Ruel
2014/02/03 23:41:44
I mean, non googlers could have license too. But n
|
| + should_get_pro = os.path.isfile(os.path.join(BASEDIR, '.vspro')) |
|
M-A Ruel
2014/02/03 23:10:52
Who creates this file?
scottmg
2014/02/03 23:22:12
User-created, if they have a 2013 license.
|
| 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) |