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

Unified Diff: chrome-update.py

Issue 306031: Rewrite chrome-update.py and .bat.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 11 years, 1 month 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 | « chrome-update.bat ('k') | chrome-update-create-task.bat » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome-update.py
===================================================================
--- chrome-update.py (revision 32063)
+++ chrome-update.py (working copy)
@@ -3,171 +3,85 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-# Author: mpcomplete
-#
-# This script updates and does a clean build of chrome for you.
-# Usage: python chrome-update.py C:\path\to\chrome\trunk
-#
-# It assumes the following:
-# - You have gclient.bat and devenv.com in your path (use the wrapper batch
-# file to ensure this).
-
-import sys
import os
-import subprocess
-import httplib
import re
-import shutil
-import optparse
+import subprocess
+import sys
+import urllib
-def Message(str):
- """Prints a status message."""
- print "[chrome-update]", str
+IS_WIN = sys.platform.startswith('win')
+BASE_URL = 'http://src.chromium.org/svn/trunk/tools/buildbot/scripts/'
+COMPILE_URL = BASE_URL + 'slave/compile.py'
+UTILS_URL = BASE_URL + 'common/chromium_utils.py'
-def FixupPath(path):
- """Returns the OS-ified version of a windows path."""
- return os.path.sep.join(path.split("\\"))
-def GetRevision():
+def Fetch(url, file):
+ if not os.path.exists(file):
+ urllib.urlretrieve(url, file)
+
+
+def GetLastestRevision():
"""Returns the revision number of the last build that was archived, or
None on failure."""
- HOST = "build.chromium.org"
- PATH = "/buildbot/continuous/LATEST/REVISION"
- EXPR = r"(\d+)"
-
- connection = httplib.HTTPConnection(HOST)
- connection.request("GET", PATH)
- response = connection.getresponse()
- text = response.read()
- match = re.search(EXPR, text)
- if match:
- return int(match.group(1))
+ url = 'http://build.chromium.org/buildbot/continuous/'
+ if sys.platform.startswith('win'):
+ url += 'win/'
+ elif sys.platform.startswith('linux'):
+ url += 'linux/'
+ elif sys.platform.startswith('darwin'):
+ url += 'mac/'
+ else:
+ # This path is actually win.
+ pass
+ url += 'LATEST/REVISION'
+ text = urllib.urlopen(url).read()
+ if text:
+ match = re.search(r"(\d+)", text)
+ if match:
+ return int(match.group(1))
return None
-def SetRevisionForUpdate(chrome_root):
- """Prepares environment so gclient syncs to a good revision, if possible."""
- # Find a buildable revision.
- rev = GetRevision()
- if rev == None:
- Message("WARNING: Failed to find a buildable revision. Syncing to trunk.")
- return "trunk"
- # Read the .gclient file.
- gclient_file = chrome_root + FixupPath("\\.gclient")
- if not os.path.exists(gclient_file):
- Message("WARNING: Failed to find .gclient file. Syncing to trunk.")
- return "trunk"
- scope = {}
- execfile(gclient_file, scope)
- solutions = scope["solutions"]
-
- # Edit the url of the chrome 'src' solution, unless the user wants a
- # specific revision.
- for solution in solutions:
- if solution["name"] == "src":
- splitter = solution["url"].split("@")
- if len(splitter) == 1:
- solution["url"] = splitter[0] + "@" + str(rev)
- else:
- rev = int(splitter[1])
- break
-
- # Write out the new .gclient file.
- gclient_override = gclient_file + "-update-chrome"
- f = open(gclient_override, "w")
- f.write("solutions = " + str(solutions))
- f.close()
-
- # Set the env var that the gclient tool looks for.
- os.environ["GCLIENT_FILE"] = gclient_override
- return rev
-
def DoUpdate(chrome_root):
"""gclient sync to the latest build."""
- # gclient sync
- rev = SetRevisionForUpdate(chrome_root)
+ cmd = ["gclient", "sync"]
+ rev = GetLastestRevision()
+ if rev:
+ cmd.extend(['--revision', 'src@%d' % rev])
+ return subprocess.call(cmd, cwd=chrome_root, shell=IS_WIN)
- cmd = ["gclient.bat", "sync"]
- Message("Updating to %s: %s" % (rev, cmd))
- sys.stdout.flush()
- return subprocess.call(cmd, cwd=chrome_root)
-def DoClean(chrome_root, type):
- """Clean our build dir."""
- # rm -rf src/chrome/Debug
- rv = [0]
- def onError(func, path, excinfo):
- Message("Couldn't remove '%s': %s" % (path, excinfo))
- rv[0] = [1]
+def DoBuild(chrome_root, args):
+ """Download compile.py and run it."""
+ compile = os.path.join(chrome_root, 'compile.py')
+ Fetch(COMPILE_URL, compile)
+ Fetch(UTILS_URL, os.path.join(chrome_root, 'chromium_utils.py'))
+ cmd = ['python', compile] + args
+ return subprocess.call(cmd, cwd=chrome_root, shell=IS_WIN)
- build_path = chrome_root + FixupPath("\\src\\chrome\\" + type)
- Message("Cleaning: %s" % build_path)
- shutil.rmtree(build_path, False, onError)
- return rv[0]
-def DoBuild(chrome_root, chrome_sln, clean, type):
- """devenv /build what we just checked out."""
- if clean:
- rv = DoClean(chrome_root, type)
- if rv != 0:
- Message("WARNING: Clean failed. Doing a build without clean.")
+def Main(args):
+ if len(args) < 3:
+ print('Usage: chrome-update.py <path> [options]')
+ print('See options from compile.py at')
+ print(' %s' % COMPILE_URL)
+ print('\nFor more example, see the compile steps on the waterfall')
+ return 1
- # devenv chrome.sln /build Debug
- cmd = ["devenv.com", chrome_sln, "/build", type]
-
- Message("Building: %s" % cmd)
- sys.stdout.flush()
- return subprocess.call(cmd, cwd=chrome_root)
-
-def Main():
- parser = optparse.OptionParser()
- parser.add_option("", "--clean", action="store_true", default=False,
- help="wipe Debug output directory before building")
- parser.add_option("", "--solution", default="src\\chrome\\chrome.sln",
- help="path to the .sln file to build (absolute, or "
- "relative to chrome trunk")
- parser.add_option("", "--release", action="store_true", default=False,
- help="build the release configuration in addition of the "
- "debug configuration.")
- parser.add_option("", "--nosync", action="store_true", default=False,
- help="doesn't sync before building")
- parser.add_option("", "--print-latest", action="store_true", default=False,
- help="print the latest buildable revision and exit")
- options, args = parser.parse_args()
-
- if options.print_latest:
- print GetRevision() or "HEAD"
- sys.exit(0)
-
- if not args:
- Message("Usage: %s <path\\to\\chrome\\root> [options]" % sys.argv[0])
- sys.exit(1)
-
- chrome_root = args[0]
+ chrome_root = args[1]
if not os.path.isdir(chrome_root):
- Message("Path to chrome root (%s) not found." % repr(chrome_root))
- sys.exit(1)
+ print('Path to chrome root (%s) not found.' % chrome_root)
+ return 1
- if not options.nosync:
- rv = DoUpdate(chrome_root)
- if rv != 0:
- Message("Update Failed. Bailing.")
- sys.exit(rv)
-
- chrome_sln = FixupPath(options.solution)
- rv = DoBuild(chrome_root, chrome_sln, options.clean, "Debug")
+ rv = DoUpdate(chrome_root)
if rv != 0:
- Message("Debug build failed. Sad face :(")
+ print('Update Failed. Bailing.')
+ return rv
- if options.release:
- rv = DoBuild(chrome_root, chrome_sln, options.clean, "Release")
- if rv != 0:
- Message("Release build failed. Sad face :(")
+ DoBuild(chrome_root, args[2:])
+ print('Success!')
+ return 0
- if rv != 0:
- sys.exit(rv)
- Message("Success!")
-
if __name__ == "__main__":
- Main()
+ sys.exit(Main(sys.argv))
« no previous file with comments | « chrome-update.bat ('k') | chrome-update-create-task.bat » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698