land: Simplify retry checker.
authorJelmer Vernooij <jelmer@samba.org>
Tue, 5 Oct 2010 09:15:56 +0000 (11:15 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Tue, 5 Oct 2010 12:24:05 +0000 (12:24 +0000)
script/land.py

index 27dfaeed9c0a50c396fde6aef18298c083a87050..55bc65b72bba00db9c5015bf47c21409f3b80e54 100755 (executable)
@@ -69,19 +69,6 @@ tasks = {
                      ("test", "make test", "text/plain"), ],
 }
 
-retry_task = [ ( "retry",
-                 '''set -e
-                git remote add -t master master %s
-                git fetch master
-                while :; do
-                  sleep 60
-                  git describe master/master > old_master.desc
-                  git fetch master
-                  git describe master/master > master.desc
-                  diff old_master.desc master.desc
-                done
-               ''' % samba_master, "test/plain" ) ]
-
 
 def run_cmd(cmd, dir=None, show=None, output=False, checkfail=True, shell=False):
     if show is None:
@@ -102,6 +89,32 @@ def clone_gitroot(test_master, revision="HEAD"):
         run_cmd(["git", "checkout", revision])
 
 
+class RetryChecker(object):
+    """Check whether it is necessary to retry."""
+
+    def __init__(self, dir):
+        run_cmd(["git", "remote", "add", "-t", "master", "master", samba_master])
+        run_cmd(["git", "fetch", "master"])
+        cmd = '''set -e
+                while :; do
+                  sleep 60
+                  git describe master/master > old_master.desc
+                  git fetch master
+                  git describe master/master > master.desc
+                  diff old_master.desc master.desc
+                done
+               '''
+        self.proc = Popen(cmd, shell=True, cwd=self.dir)
+
+    def poll(self):
+        return self.proc.poll()
+
+    def kill(self):
+        self.proc.terminate()
+        self.proc.wait()
+        self.retry.proc = None
+
+
 class TreeStageBuilder(object):
     """Handle building of a particular stage for a tree.
     """
@@ -318,8 +331,7 @@ class BuildList(object):
             b = TreeBuilder(n, tasks[n], not options.fail_slowly)
             self.tlist.append(b)
         if options.retry:
-            self.retry = TreeBuilder('retry', retry_task,
-                not options.fail_slowly)
+            self.retry = RetryChecker(self.sdir)
             self.need_retry = False
 
     def kill_kids(self):
@@ -328,9 +340,7 @@ class BuildList(object):
             self.tail_proc.wait()
             self.tail_proc = None
         if self.retry is not None:
-            self.retry.proc.terminate()
-            self.retry.proc.wait()
-            self.retry = None
+            self.retry.kill()
         for b in self.tlist:
             b.kill()
 
@@ -346,8 +356,8 @@ class BuildList(object):
                 b.stage = None
                 return b
             if options.retry:
-                ret = self.retry.proc.poll()
-                if ret is not None:
+                ret = self.retry.poll()
+                if ret:
                     self.need_retry = True
                     self.retry = None
                     return None