| Index: win_toolchain/toolchain2013.py
|
| diff --git a/win_toolchain/toolchain2013.py b/win_toolchain/toolchain2013.py
|
| index cfeeef3ad7592df7a23531fa8ae5f58bc733b0fd..0cda5903964931872f52a8f0d4adf0bd39522519 100755
|
| --- a/win_toolchain/toolchain2013.py
|
| +++ b/win_toolchain/toolchain2013.py
|
| @@ -248,7 +248,7 @@ class SourceImages(object):
|
| self.wdk_path = wdk_path
|
|
|
|
|
| -def GetSourceImages(local_dir, pro, bot_mode):
|
| +def GetSourceImages(local_dir, pro):
|
| """Downloads the various sources that we need.
|
|
|
| Of note: Because Express does not include ATL, there's an additional download
|
| @@ -256,9 +256,7 @@ def GetSourceImages(local_dir, pro, bot_mode):
|
| |pro| this is not necessary (and CHROME_HEADLESS always implies Pro).
|
| """
|
| url = GetMainIsoUrl(pro)
|
| - if bot_mode:
|
| - return SourceImages(GetVSInternal(), GetSDKInternal(), wdk_path=None)
|
| - elif local_dir:
|
| + if local_dir:
|
| wdk_path = (os.path.join(local_dir, os.path.basename(WDK_ISO_URL))
|
| if not pro else None)
|
| return SourceImages(os.path.join(local_dir, os.path.basename(url)),
|
| @@ -425,6 +423,16 @@ def GenerateSetEnvCmd(target_dir, pro):
|
| '%~dp0..\\..\\VC\\atlmfc\\lib\\amd64\n')
|
|
|
|
|
| +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
|
| + is uploaded as a zip to internal storage, and then mirrored here."""
|
| + 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))
|
| +
|
| +
|
| def main():
|
| parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
|
| parser.add_option('--targetdir', metavar='DIR',
|
| @@ -437,6 +445,9 @@ def main():
|
| help='use downloaded files from DIR')
|
| parser.add_option('--express',
|
| help='use VS Express instead of Pro', action='store_true')
|
| + parser.add_option('--sha1',
|
| + help='tree sha1 that can be used to mirror an internal '
|
| + 'copy (used if --bot-mode)')
|
| parser.add_option('--bot-mode',
|
| help='Use internal servers to pull isos',
|
| default=bool(int(os.environ.get('CHROME_HEADLESS', 0))),
|
| @@ -446,18 +457,20 @@ def main():
|
| target_dir = os.path.abspath(options.targetdir)
|
| if os.path.exists(target_dir):
|
| parser.error('%s already exists. Please [re]move it or use '
|
| - '--targetdir to select a different target.\n' %
|
| - target_dir)
|
| + '--targetdir to select a different target.\n' %
|
| + target_dir)
|
| # Set the working directory to 7z subdirectory. 7-zip doesn't find its
|
| # codec dll very well, so this is the simplest way to make sure it runs
|
| # correctly, as we don't otherwise care about working directory.
|
| os.chdir(os.path.join(BASEDIR, '7z'))
|
| - images = GetSourceImages(
|
| - options.local, not options.express, options.bot_mode)
|
| - extracted = ExtractComponents(images)
|
| - CopyToFinalLocation(extracted, target_dir)
|
| + if options.bot_mode and options.sha1:
|
| + DoTreeMirror(target_dir, options.sha1)
|
| + else:
|
| + images = GetSourceImages(options.local, not options.express)
|
| + extracted = ExtractComponents(images)
|
| + CopyToFinalLocation(extracted, target_dir)
|
| + GenerateSetEnvCmd(target_dir, not options.express)
|
|
|
| - GenerateSetEnvCmd(target_dir, not options.express)
|
| data = {
|
| 'path': target_dir,
|
| 'version': '2013e' if options.express else '2013',
|
|
|