[x264-devel] Two improvements to regression test script

Tony Young git at videolan.org
Wed Jan 26 02:56:56 CET 2011


x264 | branch: master | Tony Young <rofflwaffls at gmail.com> | Fri Jan 21 13:06:28 2011 -0800| [f04f004db516077b119dde8b9feef08c29451239] | committer: Jason Garrett-Glaser

Two improvements to regression test script
Use SHA-1 hashes for temporary file names to avoid exceeding OS filename length limits.
Correctly return to the original branch after testing if you were on a branch.

> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=f04f004db516077b119dde8b9feef08c29451239
---

 tools/digress/scm/git.py |   20 ++++++++++++++++++++
 tools/digress/testing.py |   25 ++++++++++++++++++++-----
 2 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/tools/digress/scm/git.py b/tools/digress/scm/git.py
index 01b508c..3e1ed4a 100644
--- a/tools/digress/scm/git.py
+++ b/tools/digress/scm/git.py
@@ -3,8 +3,12 @@ Git SCM backend for Digress.
 """
 
 from subprocess import Popen, PIPE, STDOUT
+import re
+
 from digress.errors import SCMError
 
+GIT_BRANCH_EXPR = re.compile("[*] (.*)")
+
 def checkout(revision):
     """
     Checkout a revision from git.
@@ -38,6 +42,22 @@ def current_rev():
     """
     return rev_parse("HEAD")
 
+def current_branch():
+    """
+    Get the current branch.
+    """
+    proc = Popen([
+        "git",
+        "branch",
+        "--no-color"
+    ], stdout=PIPE, stderr=STDOUT)
+
+    output = proc.communicate()[0].strip()
+    if proc.returncode != 0:
+        raise SCMError("branch error: %s" % output)
+    branch_name = GIT_BRANCH_EXPR.findall(output)[0]
+    return branch_name != "(no branch)" and branch_name or None
+
 def revisions(rev_a, rev_b):
     """
     Get a list of revisions from one to another.
diff --git a/tools/digress/testing.py b/tools/digress/testing.py
index bc45097..f231270 100644
--- a/tools/digress/testing.py
+++ b/tools/digress/testing.py
@@ -22,6 +22,8 @@ from functools import wraps
 
 from itertools import izip_longest
 
+from hashlib import sha1
+
 class depends(object):
     """
     Dependency decorator for a test.
@@ -142,6 +144,7 @@ class Fixture(object):
         Takes a revision for an argument.
         """
         oldrev = None
+        oldbranch = None
         dirty = False
 
         try:
@@ -152,6 +155,7 @@ class Fixture(object):
 
             if revision:
                 oldrev = self.scm.current_rev()
+                oldbranch = self.scm.current_branch()
 
                 if dirty:
                     self.scm.stash()
@@ -164,8 +168,8 @@ class Fixture(object):
                 if os.path.isdir(self.datastore):
                     if self.flush_before:
                         self.flush(rev)
-
-                os.makedirs(self.datastore)
+                else:
+                    os.makedirs(self.datastore)
             else:
                 rev = "(dirty working tree)"
                 self.datastore = None
@@ -201,6 +205,8 @@ class Fixture(object):
         finally:
             if oldrev:
                 self.scm.checkout(oldrev)
+                if oldbranch:
+                    self.scm.checkout(oldbranch)
                 if dirty:
                     self.scm.unstash()
 
@@ -488,7 +494,10 @@ class Case(object):
                 # XXX: this smells funny
                 raise IOError
 
-            with open(os.path.join(self.datastore, "%s.json" % test_name), "r") as f:
+            with open(os.path.join(
+                self.datastore,
+                "%s.json" % sha1(test_name).hexdigest()
+            ), "r") as f:
                 result = json.load(f)
 
             value = str(result["value"])
@@ -539,7 +548,10 @@ class Case(object):
             result = { "status" : status, "value" : value, "time" : run_time }
 
             if self.datastore:
-                with open(os.path.join(self.datastore, "%s.json" % test_name), "w") as f:
+                with open(os.path.join(
+                    self.datastore,
+                    "%s.json" % sha1(test_name).hexdigest()
+                ), "w") as f:
                     json.dump(result, f)
 
         results[test_name] = result
@@ -549,7 +561,10 @@ class Case(object):
         print "Running case %s..." % self.__class__.__name__
 
         if self.fixture.datastore:
-            self.datastore = os.path.join(self.fixture.datastore, self.__class__.__name__)
+            self.datastore = os.path.join(
+                self.fixture.datastore,
+                sha1(self.__class__.__name__).hexdigest()
+            )
             if not os.path.isdir(self.datastore):
                 os.makedirs(self.datastore)
         else:



More information about the x264-devel mailing list