[pacman-dev] [PATCH 02/11] pactest: only snapshot needed files

Andrew Gregory andrew.gregory.8 at gmail.com
Fri Aug 1 17:19:45 EDT 2014


Only a few of our tests need file snapshots at all and most of them only
need a few files.  Taking snapshots of the entire test environment for
every single test is a massive waste.

Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
 test/pacman/pmrule.py |  6 ++++++
 test/pacman/pmtest.py | 17 +++++++++++------
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py
index a91741b..0eec8ea 100644
--- a/test/pacman/pmrule.py
+++ b/test/pacman/pmrule.py
@@ -32,6 +32,12 @@ def __init__(self, rule):
     def __str__(self):
         return self.rule
 
+    def snapshots_needed(self):
+        (testname, args) = self.rule.split("=")
+        if testname == "FILE_MODIFIED" or testname == "!FILE_MODIFIED":
+            return [args]
+        return []
+
     def check(self, test):
         """
         """
diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py
index 7079b78..78b9e2d 100644
--- a/test/pacman/pmtest.py
+++ b/test/pacman/pmtest.py
@@ -183,12 +183,17 @@ def generate(self, pacman):
 
         # Done.
         vprint("    Taking a snapshot of the file system")
-        for roots, dirs, files in os.walk(self.root):
-            for i in files:
-                filename = os.path.join(roots, i)
-                f = pmfile.PacmanFile(self.root, filename.replace(self.root + "/", ""))
-                self.files.append(f)
-                vprint("\t%s" % f.name)
+        for filename in self.snapshots_needed():
+            f = pmfile.PacmanFile(self.root, filename)
+            self.files.append(f)
+            vprint("\t%s" % f.name)
+
+
+    def snapshots_needed(self):
+        files = set()
+        for r in self.rules:
+            files.update(r.snapshots_needed())
+        return files
 
     def run(self, pacman):
         if os.path.isfile(util.PM_LOCK):
-- 
2.0.2


More information about the pacman-dev mailing list