From 04a418c550d2f3fcc5312baeb7f4734bb6ab542e Mon Sep 17 00:00:00 2001 From: "machenbach@chromium.org" Date: Fri, 21 Mar 2014 15:04:54 +0000 Subject: [PATCH] Let auto-roll push the lkgr. BUG= R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/205703004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20168 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- tools/push-to-trunk/auto_roll.py | 78 +++++++++++++++++-------------------- tools/push-to-trunk/test_scripts.py | 16 ++++---- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/tools/push-to-trunk/auto_roll.py b/tools/push-to-trunk/auto_roll.py index ebe2397..014016c 100755 --- a/tools/push-to-trunk/auto_roll.py +++ b/tools/push-to-trunk/auto_roll.py @@ -44,6 +44,8 @@ CONFIG = { SETTINGS_LOCATION: "~/.auto-roll", } +PUSH_MESSAGE_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$") + class Preparation(Step): MESSAGE = "Preparation." @@ -77,42 +79,40 @@ class CheckTreeStatus(Step): % self["tree_message"]) -class FetchLatestRevision(Step): - MESSAGE = "Fetching latest V8 revision." +class FetchLKGR(Step): + MESSAGE = "Fetching V8 LKGR." def RunStep(self): - match = re.match(r"^r(\d+) ", self.GitSVNLog()) - if not match: # pragma: no cover - self.Die("Could not extract current svn revision from log.") - self["latest"] = match.group(1) + lkgr_url = "https://v8-status.appspot.com/lkgr" + # Retry several times since app engine might have issues. + self["lkgr"] = self.ReadURL(lkgr_url, wait_plan=[5, 20, 300, 300]) class CheckLastPush(Step): MESSAGE = "Checking last V8 push to trunk." def RunStep(self): - last_push_hash = self.FindLastTrunkPush() - last_push = int(self.GitSVNFindSVNRev(last_push_hash)) + last_push = self.FindLastTrunkPush() + + # Retrieve the bleeding edge revision of the last push from the text in + # the push commit message. + last_push_title = self.GitLog(n=1, format="%s", git_hash=last_push) + last_push_be = PUSH_MESSAGE_RE.match(last_push_title).group(1) + + if not last_push_be: # pragma: no cover + self.Die("Could not retrieve bleeding edge revision for trunk push %s" + % last_push) # TODO(machenbach): This metric counts all revisions. It could be # improved by counting only the revisions on bleeding_edge. - if int(self["latest"]) - last_push < 10: # pragma: no cover + if int(self["lkgr"]) - int(last_push_be) < 10: # pragma: no cover # This makes sure the script doesn't push twice in a row when the cron # job retries several times. - self.Die("Last push too recently: %d" % last_push) - - -class FetchLKGR(Step): - MESSAGE = "Fetching V8 LKGR." - - def RunStep(self): - lkgr_url = "https://v8-status.appspot.com/lkgr" - # Retry several times since app engine might have issues. - self["lkgr"] = self.ReadURL(lkgr_url, wait_plan=[5, 20, 300, 300]) + self.Die("Last push too recently: %s" % last_push_be) class PushToTrunk(Step): - MESSAGE = "Pushing to trunk if possible." + MESSAGE = "Pushing to trunk if specified." def PushTreeStatus(self, message): if not self._options.status_password: @@ -129,26 +129,21 @@ class PushToTrunk(Step): wait_plan=[5, 20]) def RunStep(self): - latest = int(self["latest"]) - lkgr = int(self["lkgr"]) - if latest == lkgr: - print "ToT (r%d) is clean. Pushing to trunk." % latest - self.PushTreeStatus("Tree is closed (preparing to push)") - - # TODO(machenbach): Update the script before calling it. - try: - if self._options.push: - P = push_to_trunk.PushToTrunk - self._side_effect_handler.Call( - P(push_to_trunk.CONFIG, self._side_effect_handler).Run, - ["-a", self._options.author, - "-r", self._options.reviewer, - "-f"]) - finally: - self.PushTreeStatus(self["tree_message"]) - else: - print("ToT (r%d) is ahead of the LKGR (r%d). Skipping push to trunk." - % (latest, lkgr)) + print "Pushing lkgr %s to trunk." % self["lkgr"] + self.PushTreeStatus("Tree is closed (preparing to push)") + + # TODO(machenbach): Update the script before calling it. + try: + if self._options.push: + P = push_to_trunk.PushToTrunk + self._side_effect_handler.Call( + P(push_to_trunk.CONFIG, self._side_effect_handler).Run, + ["-author", self._options.author, + "-reviewer", self._options.reviewer, + "-revision", self["lkgr"], + "-force"]) + finally: + self.PushTreeStatus(self["tree_message"]) class AutoRoll(ScriptsBase): @@ -173,9 +168,8 @@ class AutoRoll(ScriptsBase): Preparation, CheckAutoRollSettings, CheckTreeStatus, - FetchLatestRevision, - CheckLastPush, FetchLKGR, + CheckLastPush, PushToTrunk, ] diff --git a/tools/push-to-trunk/test_scripts.py b/tools/push-to-trunk/test_scripts.py index 957ea63..8b2e1d9 100644 --- a/tools/push-to-trunk/test_scripts.py +++ b/tools/push-to-trunk/test_scripts.py @@ -33,7 +33,6 @@ import unittest import auto_roll from auto_roll import CheckLastPush -from auto_roll import FetchLatestRevision from auto_roll import SETTINGS_LOCATION import common_includes from common_includes import * @@ -832,11 +831,15 @@ Performance and stability improvements on all platforms.""", commit) def testCheckLastPushRecently(self): self.ExpectGit([ - Git("svn log -1 --oneline", "r101 | Text"), - Git("svn log -1 --oneline ChangeLog", "r99 | Prepare push to trunk..."), + Git(("log -1 --format=%H --grep=" + "\"^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]* (based\" " + "svn/trunk"), "hash2\n"), + Git("log -1 --format=%s hash2", + "Version 3.4.5 (based on bleeding_edge revision r99)\n"), ]) - self.RunStep(auto_roll.AutoRoll, FetchLatestRevision, AUTO_ROLL_ARGS) + self._state["lkgr"] = "101" + self.assertRaises(Exception, lambda: self.RunStep(auto_roll.AutoRoll, CheckLastPush, AUTO_ROLL_ARGS)) @@ -864,11 +867,11 @@ Performance and stability improvements on all platforms.""", commit) Git("status -s -uno", ""), Git("status -s -b -uno", "## some_branch\n"), Git("svn fetch", ""), - Git("svn log -1 --oneline", "r100 | Text"), Git(("log -1 --format=%H --grep=\"" "^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]* (based\"" " svn/trunk"), "push_hash\n"), - Git("svn find-rev push_hash", "65"), + Git("log -1 --format=%s push_hash", + "Version 3.4.5 (based on bleeding_edge revision r79)\n"), ]) auto_roll.AutoRoll(TEST_CONFIG, self).Run( @@ -878,7 +881,6 @@ Performance and stability improvements on all platforms.""", commit) % TEST_CONFIG[PERSISTFILE_BASENAME])) self.assertEquals("100", state["lkgr"]) - self.assertEquals("100", state["latest"]) def testAutoRollStoppedBySettings(self): TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() -- 2.7.4