Revision: 20159
Author: machenb...@chromium.org
Date: Fri Mar 21 12:15:25 2014 UTC
Log: Split of rolling Chromium from push-to-trunk.
This moves rolling Chromium into a new script with its own tests.
BUG=
R=jkumme...@chromium.org
Review URL: https://codereview.chromium.org/199733012
http://code.google.com/p/v8/source/detail?r=20159
Added:
/branches/bleeding_edge/tools/push-to-trunk/chromium_roll.py
Modified:
/branches/bleeding_edge/tools/push-to-trunk/auto_roll.py
/branches/bleeding_edge/tools/push-to-trunk/push_to_trunk.py
/branches/bleeding_edge/tools/push-to-trunk/test_scripts.py
=======================================
--- /dev/null
+++ /branches/bleeding_edge/tools/push-to-trunk/chromium_roll.py Fri Mar 21
12:15:25 2014 UTC
@@ -0,0 +1,170 @@
+#!/usr/bin/env python
+# Copyright 2014 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import argparse
+import os
+import sys
+
+from common_includes import *
+
+DEPS_FILE = "DEPS_FILE"
+CHROMIUM = "CHROMIUM"
+
+CONFIG = {
+ PERSISTFILE_BASENAME: "/tmp/v8-chromium-roll-tempfile",
+ DOT_GIT_LOCATION: ".git",
+ DEPS_FILE: "DEPS",
+}
+
+
+class Preparation(Step):
+ MESSAGE = "Preparation."
+
+ def RunStep(self):
+ self.CommonPrepare()
+
+
+class DetectLastPush(Step):
+ MESSAGE = "Detect commit ID of last push to trunk."
+
+ def RunStep(self):
+ self["last_push"] = self._options.last_push or self.FindLastTrunkPush()
+ self["trunk_revision"] = self.GitSVNFindSVNRev(self["last_push"])
+ self["push_title"] = self.GitLog(n=1, format="%s",
+ git_hash=self["last_push"])
+
+
+class CheckChromium(Step):
+ MESSAGE = "Ask for chromium checkout."
+
+ def Run(self):
+ self["chrome_path"] = self._options.chromium
+ while not self["chrome_path"]:
+ self.DieNoManualMode("Please specify the path to a Chromium checkout
in "
+ "forced mode.")
+ print ("Please specify the path to the chromium \"src\"
directory: "),
+ self["chrome_path"] = self.ReadLine()
+
+
+class SwitchChromium(Step):
+ MESSAGE = "Switch to Chromium checkout."
+ REQUIRES = "chrome_path"
+
+ def RunStep(self):
+ self["v8_path"] = os.getcwd()
+ os.chdir(self["chrome_path"])
+ self.InitialEnvironmentChecks()
+ # Check for a clean workdir.
+ if not self.GitIsWorkdirClean(): # pragma: no cover
+ self.Die("Workspace is not clean. Please commit or undo your
changes.")
+ # Assert that the DEPS file is there.
+ if not os.path.exists(self.Config(DEPS_FILE)): # pragma: no cover
+ self.Die("DEPS file not present.")
+
+
+class UpdateChromiumCheckout(Step):
+ MESSAGE = "Update the checkout and create a new branch."
+ REQUIRES = "chrome_path"
+
+ def RunStep(self):
+ os.chdir(self["chrome_path"])
+ self.GitCheckout("master")
+ self.GitPull()
+ self.GitCreateBranch("v8-roll-%s" % self["trunk_revision"])
+
+
+class UploadCL(Step):
+ MESSAGE = "Create and upload CL."
+ REQUIRES = "chrome_path"
+
+ def RunStep(self):
+ os.chdir(self["chrome_path"])
+
+ # Patch DEPS file.
+ deps = FileToText(self.Config(DEPS_FILE))
+ deps = re.sub("(?<=\"v8_revision\": \")([0-9]+)(?=\")",
+ self["trunk_revision"],
+ deps)
+ TextToFile(deps, self.Config(DEPS_FILE))
+
+ if self._options.reviewer:
+ print "Using account %s for review." % self._options.reviewer
+ rev = self._options.reviewer
+ else:
+ print "Please enter the email address of a reviewer for the roll
CL: ",
+ self.DieNoManualMode("A reviewer must be specified in forced mode.")
+ rev = self.ReadLine()
+
+ commit_title = "Update V8 to %s." % self["push_title"].lower()
+ self.GitCommit("%s\n\nTBR=%s" % (commit_title, rev))
+ self.GitUpload(author=self._options.author,
+ force=self._options.force_upload)
+ print "CL uploaded."
+
+
+class SwitchV8(Step):
+ MESSAGE = "Returning to V8 checkout."
+ REQUIRES = "chrome_path"
+
+ def RunStep(self):
+ os.chdir(self["v8_path"])
+
+
+class CleanUp(Step):
+ MESSAGE = "Done!"
+
+ def RunStep(self):
+ print("Congratulations, you have successfully rolled the push r%s it
into "
+ "Chromium. Please don't forget to update the v8rel spreadsheet."
+ % self["trunk_revision"])
+
+ # Clean up all temporary files.
+ Command("rm", "-f %s*" % self._config[PERSISTFILE_BASENAME])
+
+
+class ChromiumRoll(ScriptsBase):
+ def _PrepareOptions(self, parser):
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument("-f", "--force",
+ help="Don't prompt the user.",
+ default=False, action="store_true")
+ group.add_argument("-m", "--manual",
+ help="Prompt the user at every important step.",
+ default=False, action="store_true")
+ parser.add_argument("-c", "--chromium",
+ help=("The path to your Chromium src/ "
+ "directory to automate the V8 roll."))
+ parser.add_argument("-l", "--last-push",
+ help="The git commit ID of the last push to
trunk.")
+
+ def _ProcessOptions(self, options): # pragma: no cover
+ if not options.manual and not options.reviewer:
+ print "A reviewer (-r) is required in (semi-)automatic mode."
+ return False
+ if not options.manual and not options.chromium:
+ print "A chromium checkout (-c) is required in (semi-)automatic
mode."
+ return False
+ if not options.manual and not options.author:
+ print "Specify your chromium.org email with -a in (semi-)automatic
mode."
+ return False
+
+ options.tbr_commit = not options.manual
+ return True
+
+ def _Steps(self):
+ return [
+ Preparation,
+ DetectLastPush,
+ CheckChromium,
+ SwitchChromium,
+ UpdateChromiumCheckout,
+ UploadCL,
+ SwitchV8,
+ CleanUp,
+ ]
+
+
+if __name__ == "__main__": # pragma: no cover
+ sys.exit(ChromiumRoll(CONFIG).Run())
=======================================
--- /branches/bleeding_edge/tools/push-to-trunk/auto_roll.py Wed Mar 12
10:45:23 2014 UTC
+++ /branches/bleeding_edge/tools/push-to-trunk/auto_roll.py Fri Mar 21
12:15:25 2014 UTC
@@ -142,7 +142,6 @@
self._side_effect_handler.Call(
P(push_to_trunk.CONFIG, self._side_effect_handler).Run,
["-a", self._options.author,
- "-c", self._options.chromium,
"-r", self._options.reviewer,
"-f"])
finally:
@@ -154,9 +153,8 @@
class AutoRoll(ScriptsBase):
def _PrepareOptions(self, parser):
- parser.add_argument("-c", "--chromium", required=True,
- help=("The path to your Chromium src/ "
- "directory to automate the V8 roll."))
+ parser.add_argument("-c", "--chromium",
+ help=("Deprecated."))
parser.add_argument("-p", "--push",
help="Push to trunk. Dry run if unspecified.",
default=False, action="store_true")
=======================================
--- /branches/bleeding_edge/tools/push-to-trunk/push_to_trunk.py Thu Mar 20
15:44:30 2014 UTC
+++ /branches/bleeding_edge/tools/push-to-trunk/push_to_trunk.py Fri Mar 21
12:15:25 2014 UTC
@@ -34,8 +34,6 @@
from common_includes import *
TRUNKBRANCH = "TRUNKBRANCH"
-CHROMIUM = "CHROMIUM"
-DEPS_FILE = "DEPS_FILE"
CONFIG = {
BRANCHNAME: "prepare-push",
@@ -48,7 +46,6 @@
CHANGELOG_ENTRY_FILE: "/tmp/v8-push-to-trunk-tempfile-changelog-entry",
PATCH_FILE: "/tmp/v8-push-to-trunk-tempfile-patch-file",
COMMITMSG_FILE: "/tmp/v8-push-to-trunk-tempfile-commitmsg",
- DEPS_FILE: "DEPS",
}
PUSH_MESSAGE_SUFFIX = " (based on bleeding_edge revision r%d)"
@@ -373,100 +370,15 @@
self.GitSVNTag(self["version"])
-class CheckChromium(Step):
- MESSAGE = "Ask for chromium checkout."
-
- def Run(self):
- self["chrome_path"] = self._options.chromium
- if not self["chrome_path"]:
- self.DieNoManualMode("Please specify the path to a Chromium checkout
in "
- "forced mode.")
- print ("Do you have a \"NewGit\" Chromium checkout and want "
- "this script to automate creation of the roll CL? If yes, enter
the "
- "path to (and including) the \"src\" directory here, otherwise
just "
- "press <Return>: "),
- self["chrome_path"] = self.ReadLine()
-
-
-class SwitchChromium(Step):
- MESSAGE = "Switch to Chromium checkout."
- REQUIRES = "chrome_path"
-
- def RunStep(self):
- self["v8_path"] = os.getcwd()
- os.chdir(self["chrome_path"])
- self.InitialEnvironmentChecks()
- # Check for a clean workdir.
- if not self.GitIsWorkdirClean(): # pragma: no cover
- self.Die("Workspace is not clean. Please commit or undo your
changes.")
- # Assert that the DEPS file is there.
- if not os.path.exists(self.Config(DEPS_FILE)): # pragma: no cover
- self.Die("DEPS file not present.")
-
-
-class UpdateChromiumCheckout(Step):
- MESSAGE = "Update the checkout and create a new branch."
- REQUIRES = "chrome_path"
-
- def RunStep(self):
- os.chdir(self["chrome_path"])
- self.GitCheckout("master")
- self.GitPull()
- self.GitCreateBranch("v8-roll-%s" % self["trunk_revision"])
-
-
-class UploadCL(Step):
- MESSAGE = "Create and upload CL."
- REQUIRES = "chrome_path"
-
- def RunStep(self):
- os.chdir(self["chrome_path"])
-
- # Patch DEPS file.
- deps = FileToText(self.Config(DEPS_FILE))
- deps = re.sub("(?<=\"v8_revision\": \")([0-9]+)(?=\")",
- self["trunk_revision"],
- deps)
- TextToFile(deps, self.Config(DEPS_FILE))
-
- if self._options.reviewer:
- print "Using account %s for review." % self._options.reviewer
- rev = self._options.reviewer
- else:
- print "Please enter the email address of a reviewer for the roll
CL: ",
- self.DieNoManualMode("A reviewer must be specified in forced mode.")
- rev = self.ReadLine()
- suffix = PUSH_MESSAGE_SUFFIX % int(self["svn_revision"])
- self.GitCommit("Update V8 to version %s%s.\n\nTBR=%s"
- % (self["version"], suffix, rev))
- self.GitUpload(author=self._options.author,
- force=self._options.force_upload)
- print "CL uploaded."
-
-
-class SwitchV8(Step):
- MESSAGE = "Returning to V8 checkout."
- REQUIRES = "chrome_path"
-
- def RunStep(self):
- os.chdir(self["v8_path"])
-
-
class CleanUp(Step):
MESSAGE = "Done!"
def RunStep(self):
- if self["chrome_path"]:
- print("Congratulations, you have successfully created the trunk "
- "revision %s and rolled it into Chromium. Please don't forget
to "
- "update the v8rel spreadsheet:" % self["version"])
- else: # pragma: no cover
- print("Congratulations, you have successfully created the trunk "
- "revision %s. Please don't forget to roll this new version
into "
- "Chromium, and to update the v8rel spreadsheet:"
- % self["version"])
- print "%s\ttrunk\t%s" % (self["version"],
- self["trunk_revision"])
+ print("Congratulations, you have successfully created the trunk "
+ "revision %s. Please don't forget to roll this new version into "
+ "Chromium, and to update the v8rel spreadsheet:"
+ % self["version"])
+ print "%s\ttrunk\t%s" % (self["version"], self["trunk_revision"])
self.CommonCleanup()
if self.Config(TRUNKBRANCH) != self["current_branch"]:
@@ -486,9 +398,6 @@
help=("The git commit ID of the last bleeding
edge "
"revision that was pushed to trunk. This is "
"used for the auto-generated ChangeLog
entry."))
- parser.add_argument("-c", "--chromium",
- help=("The path to your Chromium src/ "
- "directory to automate the V8 roll."))
parser.add_argument("-l", "--last-push",
help="The git commit ID of the last push to
trunk.")
parser.add_argument("-R", "--revision",
@@ -498,9 +407,6 @@
if not options.manual and not options.reviewer:
print "A reviewer (-r) is required in (semi-)automatic mode."
return False
- if not options.manual and not options.chromium:
- print "A chromium checkout (-c) is required in (semi-)automatic
mode."
- return False
if not options.manual and not options.author:
print "Specify your chromium.org email with -a in (semi-)automatic
mode."
return False
@@ -531,11 +437,6 @@
SanityCheck,
CommitSVN,
TagRevision,
- CheckChromium,
- SwitchChromium,
- UpdateChromiumCheckout,
- UploadCL,
- SwitchV8,
CleanUp,
]
=======================================
--- /branches/bleeding_edge/tools/push-to-trunk/test_scripts.py Thu Mar 20
15:44:30 2014 UTC
+++ /branches/bleeding_edge/tools/push-to-trunk/test_scripts.py Fri Mar 21
12:15:25 2014 UTC
@@ -41,6 +41,10 @@
from merge_to_branch import *
import push_to_trunk
from push_to_trunk import *
+import chromium_roll
+from chromium_roll import CHROMIUM
+from chromium_roll import DEPS_FILE
+from chromium_roll import ChromiumRoll
TEST_CONFIG = {
@@ -638,12 +642,8 @@
TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile()
TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile()
- if not os.path.exists(TEST_CONFIG[CHROMIUM]):
- os.makedirs(TEST_CONFIG[CHROMIUM])
bleeding_edge_change_log = "2014-03-17: Sentinel\n"
TextToFile(bleeding_edge_change_log, TEST_CONFIG[CHANGELOG_FILE])
- TextToFile("Some line\n \"v8_revision\": \"123444\",\n some line",
- TEST_CONFIG[DEPS_FILE])
os.environ["EDITOR"] = "vi"
def ResetChangeLog():
@@ -689,7 +689,6 @@
change_log)
force_flag = " -f" if not manual else ""
- review_suffix = "\n\nTBR=revie...@chromium.org" if not manual else ""
self.ExpectGit([
Git("status -s -uno", ""),
Git("status -s -b -uno", "## some_branch\n"),
@@ -728,16 +727,6 @@
cb=CheckSVNCommit),
Git("svn dcommit 2>&1", "Some output\nCommitted r123456\nSome
output\n"),
Git("svn tag 3.22.5 -m \"Tagging version 3.22.5\"", ""),
- Git("status -s -uno", ""),
- Git("checkout -f master", ""),
- Git("pull", ""),
- Git("checkout -b v8-roll-123456", ""),
- Git(("commit -am \"Update V8 to version 3.22.5 "
- "(based on bleeding_edge revision r123455).\n\n"
- "TBR=revie...@chromium.org\""),
- ""),
- Git(("cl upload --send-mail --email \"aut...@chromium.org\"%s"
- % force_flag), ""),
Git("checkout -f some_branch", ""),
Git("branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""),
Git("branch -D %s" % TEST_CONFIG[BRANCHNAME], ""),
@@ -751,23 +740,18 @@
RL(""), # Open editor.
RL("Y"), # Increment build number.
RL("Y"), # Sanity check.
- RL("revie...@chromium.org"), # Chromium reviewer.
])
# Expected keyboard input in semi-automatic mode and forced mode:
if not manual:
self.ExpectReadline([])
- args = ["-a", "aut...@chromium.org", "-c", TEST_CONFIG[CHROMIUM],
- "--revision", "123455"]
+ args = ["-a", "aut...@chromium.org", "--revision", "123455"]
if force: args.append("-f")
if manual: args.append("-m")
else: args += ["-r", "revie...@chromium.org"]
PushToTrunk(TEST_CONFIG, self).Run(args)
- deps = FileToText(TEST_CONFIG[DEPS_FILE])
- self.assertTrue(re.search("\"v8_revision\": \"123456\"", deps))
-
cl = FileToText(TEST_CONFIG[CHANGELOG_FILE])
self.assertTrue(re.search(r"^\d\d\d\d\-\d+\-\d+: Version 3\.22\.5",
cl))
self.assertTrue(re.search(r" Log text 1 \(issue 321\).", cl))
@@ -786,6 +770,66 @@
def testPushToTrunkForced(self):
self._PushToTrunk(force=True)
+
+ def _ChromiumRoll(self, force=False, manual=False):
+ TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile()
+ if not os.path.exists(TEST_CONFIG[CHROMIUM]):
+ os.makedirs(TEST_CONFIG[CHROMIUM])
+ TextToFile("Some line\n \"v8_revision\": \"123444\",\n some line",
+ TEST_CONFIG[DEPS_FILE])
+
+ os.environ["EDITOR"] = "vi"
+ force_flag = " -f" if not manual else ""
+ self.ExpectGit([
+ Git("status -s -uno", ""),
+ Git("status -s -b -uno", "## some_branch\n"),
+ Git("svn fetch", ""),
+ Git(("log -1 --format=%H --grep="
+ "\"^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]* (based\" "
+ "svn/trunk"), "push_hash\n"),
+ Git("svn find-rev push_hash", "123455\n"),
+ Git("log -1 --format=%s push_hash",
+ "Version 3.22.5 (based on bleeding_edge revision r123454)\n"),
+ Git("status -s -uno", ""),
+ Git("checkout -f master", ""),
+ Git("pull", ""),
+ Git("checkout -b v8-roll-123455", ""),
+ Git(("commit -am \"Update V8 to version 3.22.5 "
+ "(based on bleeding_edge revision r123454).\n\n"
+ "TBR=revie...@chromium.org\""),
+ ""),
+ Git(("cl upload --send-mail --email \"aut...@chromium.org\"%s"
+ % force_flag), ""),
+ ])
+
+ # Expected keyboard input in manual mode:
+ if manual:
+ self.ExpectReadline([
+ RL("revie...@chromium.org"), # Chromium reviewer.
+ ])
+
+ # Expected keyboard input in semi-automatic mode and forced mode:
+ if not manual:
+ self.ExpectReadline([])
+
+ args = ["-a", "aut...@chromium.org", "-c", TEST_CONFIG[CHROMIUM]]
+ if force: args.append("-f")
+ if manual: args.append("-m")
+ else: args += ["-r", "revie...@chromium.org"]
+ ChromiumRoll(TEST_CONFIG, self).Run(args)
+
+ deps = FileToText(TEST_CONFIG[DEPS_FILE])
+ self.assertTrue(re.search("\"v8_revision\": \"123455\"", deps))
+
+ def testChromiumRollManual(self):
+ self._ChromiumRoll(manual=True)
+
+ def testChromiumRollSemiAutomatic(self):
+ self._ChromiumRoll()
+
+ def testChromiumRollForced(self):
+ self._ChromiumRoll(force=True)
+
def testCheckLastPushRecently(self):
self.ExpectGit([
Git("svn log -1 --oneline", "r101 | Text"),
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.