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

Unified Diff: gclient_scm.py

Issue 103803006: Checkout tarball for chrome and blink for initial sync on a bot (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: nit comma Created 6 years, 11 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient_scm.py
diff --git a/gclient_scm.py b/gclient_scm.py
index 7dc0bd8018693859b15529b74ba0fb747973c5fe..c80575e0d2fae66f8a5a134443e3bd1db3d643b2 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -13,7 +13,9 @@ import sys
import tempfile
import threading
import time
+import urlparse
+import download_from_google_storage
import gclient_utils
import scm
import subprocess2
@@ -21,6 +23,10 @@ import subprocess2
THIS_FILE_PATH = os.path.abspath(__file__)
+GSUTIL_DEFAULT_PATH = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ 'third_party', 'gsutil', 'gsutil')
+
class DiffFiltererWrapper(object):
"""Simple base class which tracks which file is being diffed and
@@ -1170,7 +1176,67 @@ class SVNWrapper(SCMWrapper):
'present. Delete the directory and try again.')
raise gclient_utils.Error(msg % self.checkout_path)
+ BASE_URLS = {
+ '/chrome/trunk/src': 'gs://chromium-svn-checkout/chrome/',
+ '/blink/trunk': 'gs://chromium-svn-checkout/blink/',
+ }
if not exists:
+ try:
+ # Split out the revision number since it's not useful for us.
+ base_path = urlparse.urlparse(url).path.split('@')[0]
+ if ('CHROME_HEADLESS' in os.environ
+ and sys.platform == 'linux2' # TODO(hinoka): Enable for win/mac.
+ and base_path in BASE_URLS):
+ # Use a tarball for initial sync if we are on a bot.
+ # Get an unauthenticated gsutil instance.
+ gsutil = download_from_google_storage.Gsutil(
+ GSUTIL_DEFAULT_PATH, boto_path=os.devnull)
+
+ gs_path = BASE_URLS[base_path]
+ _, out, _ = gsutil.check_call('ls', gs_path)
+ # So that we can get the most recent revision.
+ sorted_items = sorted(out.splitlines())
+ latest_checkout = sorted_items[-1]
+
+ tempdir = tempfile.mkdtemp()
+ print 'Downloading %s...' % latest_checkout
+ code, out, err = gsutil.check_call('cp', latest_checkout, tempdir)
+ if code:
+ print '%s\n%s' % (out, err)
+ raise Exception()
+ filename = latest_checkout.split('/')[-1]
+ tarball = os.path.join(tempdir, filename)
+ print 'Unpacking into %s...' % self.checkout_path
+ gclient_utils.safe_makedirs(self.checkout_path)
+ # TODO(hinoka): Use 7z for windows.
+ cmd = ['tar', '--extract', '--ungzip',
+ '--directory', self.checkout_path,
+ '--file', tarball]
+ gclient_utils.CheckCallAndFilter(
+ cmd, stdout=sys.stdout, print_stdout=True)
+
+ print 'Deleting temp file'
+ gclient_utils.rmtree(tempdir)
+
+ # Rewrite the repository root to match.
+ tarball_url = scm.SVN.CaptureLocalInfo(
+ ['.'], self.checkout_path)['Repository Root']
+ tarball_parsed = urlparse.urlparse(tarball_url)
+ tarball_root = '%s://%s' % (tarball_parsed.scheme,
+ tarball_parsed.netloc)
+ local_parsed = urlparse.urlparse(url)
+ local_root = '%s://%s' % (local_parsed.scheme, local_parsed.netloc)
+
+ if tarball_root != local_root:
+ print 'Switching repository root to %s' % local_root
+ self._Run(['switch', '--relocate', tarball_root,
+ local_root, self.checkout_path],
+ options)
+ except Exception as e:
+ print 'We tried to get a source tarball but failed.'
+ print 'Resuming normal operations.'
+ print str(e)
+
gclient_utils.safe_makedirs(os.path.dirname(self.checkout_path))
# We need to checkout.
command = ['checkout', url, self.checkout_path]
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698