Test runner: Send SVN revision instead of git commit hash in work packet
authorjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 1 Oct 2012 09:05:27 +0000 (09:05 +0000)
committerjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 1 Oct 2012 09:05:27 +0000 (09:05 +0000)
Review URL: https://codereview.chromium.org/11013007

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12635 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

tools/testrunner/network/network_execution.py
tools/testrunner/server/work_handler.py

index 2f33d35..b17249d 100644 (file)
@@ -67,7 +67,13 @@ class NetworkedRunner(execution.Runner):
     self.pubkey_fingerprint = None  # Fetched later.
     self.base_rev = subprocess.check_output(
         "cd %s; git log -1 --format=%%H --grep=git-svn-id" % workspace,
-        shell=True)
+        shell=True).strip()
+    self.base_svn_rev = subprocess.check_output(
+        "cd %s; git log -1 %s"          # Get commit description.
+        " | grep -e '^\s*git-svn-id:'"  # Extract "git-svn-id" line.
+        " | awk '{print $2}'"           # Extract "repository@revision" part.
+        " | sed -e 's/.*@//'" %         # Strip away "repository@".
+        (workspace, self.base_rev), shell=True).strip()
     self.patch = subprocess.check_output(
         "cd %s; git diff %s" % (workspace, self.base_rev), shell=True)
     self.binaries = {}
@@ -168,7 +174,7 @@ class NetworkedRunner(execution.Runner):
         peer.runtime = None
         start_time = time.time()
         packet = workpacket.WorkPacket(peer=peer, context=self.context,
-                                       base_revision=self.base_rev,
+                                       base_revision=self.base_svn_rev,
                                        patch=self.patch,
                                        pubkey=self.pubkey_fingerprint)
         data, test_map = packet.Pack(self.binaries)
index d1e0666..9e61af8 100644 (file)
@@ -102,11 +102,22 @@ class WorkHandler(SocketServer.BaseRequestHandler):
     os.chmod(target, stat.S_IRWXU)
     return True
 
-  def _CheckoutRevision(self, base_revision):
-    code = self._Call("git checkout -f %s" % base_revision)
-    if code != 0:
+  def _CheckoutRevision(self, base_svn_revision):
+    get_hash_cmd = (
+        "git log -1 --format=%%H --remotes --grep='^git-svn-id:.*@%s'" %
+        base_svn_revision)
+    try:
+      base_revision = subprocess.check_output(get_hash_cmd, shell=True)
+      if not base_revision: raise ValueError
+    except:
       self._Call("git fetch")
-      code = self._Call("git checkout -f %s" % base_revision)
+      try:
+        base_revision = subprocess.check_output(get_hash_cmd, shell=True)
+        if not base_revision: raise ValueError
+      except:
+        self._SendResponse("Base revision not found.")
+        return False
+    code = self._Call("git checkout -f %s" % base_revision)
     if code != 0:
       self._SendResponse("Error trying to check out base revision.")
       return False