Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1428)

Unified Diff: win_toolchain/get_toolchain_if_necessary.py

Issue 191373002: Move Googlers to gs:// based toolchain pull (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: comment Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | win_toolchain/toolchain2013.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 27a4034a5bee336e3b05c3839a8ba7058f53e3a3..49157240ee023d9bdafd52bf96819545af821ab7 100755
--- a/win_toolchain/get_toolchain_if_necessary.py
+++ b/win_toolchain/get_toolchain_if_necessary.py
@@ -38,6 +38,8 @@ import time
BASEDIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.join(BASEDIR, '..'))
+import download_from_google_storage
GetFileAttributes = ctypes.windll.kernel32.GetFileAttributesW
@@ -131,6 +133,47 @@ def HaveSrcInternalAccess():
shell=True, stdin=nul, stdout=nul, stderr=nul) == 0
+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'
+
+
+def CanAccessToolchainBucket():
+ """Checks whether the user has access to gs://chrome-wintoolchain/."""
+ gsutil = download_from_google_storage.Gsutil(
+ download_from_google_storage.GSUTIL_DEFAULT_PATH, boto_path=None)
+ code, _, _ = gsutil.check_call('ls', 'gs://chrome-wintoolchain/')
+ return code == 0
+
+
+def ConfigureGsAccess():
+ """Starts the authentication flow for gs://, and confirms that it's
+ accessible after completion, or retries indefinitely.
+ """
+ while not CanAccessToolchainBucket():
+ print 'Access to gs://chrome-wintoolchain/ not configured.'
+ print '-----------------------------------------------------------------'
+ print
+ print 'You appear to be a Googler.'
+ print
+ print 'I\'m sorry for the hassle, but you need to do a one-time manual'
+ print 'authentication. Instructions will open in a new window. This is'
+ print 'a run of "gsutil config".'
+ print
+ print 'NOTE: Just press Enter when asked for a "project-id".'
+ print
+ print '-----------------------------------------------------------------'
+ print
+ sys.stdout.flush()
+ # gclient's buffering makes this hang if we're run from inside gclient
+ # as is typical. So, spawn a new window for the config prompt. :(
+ subprocess.check_call(
+ ['start', '/wait', 'cmd', '/c',
+ 'download_from_google_storage', '--config'],
+ shell=True)
+
+
def DelayBeforeRemoving(target_dir):
"""A grace period before deleting the out of date toolchain directory."""
if (os.path.isdir(target_dir) and
@@ -167,12 +210,17 @@ def main():
# based on timestamps to make that case fast.
current_hash = CalculateHash(target_dir)
if current_hash not in desired_hashes:
- should_get_pro = (os.path.isfile(os.path.join(BASEDIR, '.vspro')) or
- HaveSrcInternalAccess())
+ should_use_gs = False
+ if (CanAccessToolchainBucket() or
+ HaveSrcInternalAccess() or
+ LooksLikeGoogler()):
+ should_use_gs = True
+ ConfigureGsAccess()
print('Windows toolchain out of date or doesn\'t exist, updating (%s)...' %
- ('Pro' if should_get_pro else 'Express'))
+ ('Pro' if should_use_gs else 'Express'))
print(' current_hash: %s' % current_hash)
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:
@@ -184,7 +232,9 @@ def main():
'toolchain2013.py',
'--targetdir', target_dir,
'--sha1', desired_hashes[0]]
- if not should_get_pro:
+ if should_use_gs:
+ args.append('--use-gs')
+ else:
args.append('--express')
subprocess.check_call(args)
current_hash = CalculateHash(target_dir)
« no previous file with comments | « no previous file | win_toolchain/toolchain2013.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698