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

Unified Diff: depot_tools/chrome-update.py

Issue 92087: Create the Next Generation of depot_tools. Eh. (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/tools/
Patch Set: Created 11 years, 8 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 | « depot_tools/chrome-update.bat ('k') | depot_tools/chrome-update-create-task.bat » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: depot_tools/chrome-update.py
===================================================================
--- depot_tools/chrome-update.py (revision 0)
+++ depot_tools/chrome-update.py (revision 0)
@@ -0,0 +1,170 @@
+#!/usr/bin/python
+# Copyright (c) 2009 The Chromium Authors. All rights reserved.
+# 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
+
+def Message(str):
+ """Prints a status message."""
+ print "[chrome-update]", str
+
+def FixupPath(path):
+ """Returns the OS-ified version of a windows path."""
+ return os.path.sep.join(path.split("\\"))
+
+def GetRevision():
+ """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))
+ 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.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]
+
+ 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.")
+
+ # 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]
+
+ 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")
+ if rv != 0:
+ Message("Debug build failed. Sad face :(")
+
+ if options.release:
+ rv = DoBuild(chrome_root, chrome_sln, options.clean, "Release")
+ if rv != 0:
+ Message("Release build failed. Sad face :(")
+
+ if rv != 0:
+ sys.exit(rv)
+
+ Message("Success!")
+
+if __name__ == "__main__":
+ Main()
Property changes on: depot_tools\chrome-update.py
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:eol-style
+ LF
« no previous file with comments | « depot_tools/chrome-update.bat ('k') | depot_tools/chrome-update-create-task.bat » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698