Reviewers: Jakob,

Message:
PTAL

Description:
Let auto-roll push the lkgr.

BUG=

Please review this at https://codereview.chromium.org/205703004/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+45, -49 lines):
  M tools/push-to-trunk/auto_roll.py
  M tools/push-to-trunk/test_scripts.py


Index: tools/push-to-trunk/auto_roll.py
diff --git a/tools/push-to-trunk/auto_roll.py b/tools/push-to-trunk/auto_roll.py index ebe2397525d99ee05f1a90645ff216d0598fdfd6..c4132d1cf6beb726f4d2ca587de12777e59152b7 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,
+            ["-a", self._options.author,
+             "-r", self._options.reviewer,
+             "-R", self["lkgr"],
+             "-f"])
+    finally:
+      self.PushTreeStatus(self["tree_message"])


 class AutoRoll(ScriptsBase):
@@ -173,9 +168,8 @@ class AutoRoll(ScriptsBase):
       Preparation,
       CheckAutoRollSettings,
       CheckTreeStatus,
-      FetchLatestRevision,
-      CheckLastPush,
       FetchLKGR,
+      CheckLastPush,
       PushToTrunk,
     ]

Index: tools/push-to-trunk/test_scripts.py
diff --git a/tools/push-to-trunk/test_scripts.py b/tools/push-to-trunk/test_scripts.py index 957ea63ec6213b8f1da779c4782a3170de5f1c99..8b2e1d938b12e6a2321081d710b677e5776f218e 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()


--
--
v8-dev mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to