use run-parts semantics in conf.d directory
authorGreg Price <price@mit.edu>
Wed, 29 Oct 2008 04:44:46 +0000 (00:44 -0400)
committerGreg Price <price@mit.edu>
Wed, 29 Oct 2008 04:44:46 +0000 (00:44 -0400)
svn path=/trunk/packages/invirt-base/; revision=1423

debian/changelog
python/invirt/config.py

index e09b46e..9d450dc 100644 (file)
@@ -3,8 +3,9 @@ invirt-base (0.0.2) unstable; urgency=low
   * eliminate choice of source and cache files for invirt.config.load and
     invirt-getconf, so we can do what follows
   * look in /etc/invirt/conf.d/ as well as /etc/invirt/master.yaml
   * eliminate choice of source and cache files for invirt.config.load and
     invirt-getconf, so we can do what follows
   * look in /etc/invirt/conf.d/ as well as /etc/invirt/master.yaml
+  * use run-parts semantics in /etc/invirt/conf.d/
 
 
- -- Greg Price <price@mit.edu>  Tue, 28 Oct 2008 21:16:14 -0400
+ -- Greg Price <price@mit.edu>  Wed, 29 Oct 2008 00:10:36 -0400
 
 invirt-base (0.0.1) unstable; urgency=low
 
 
 invirt-base (0.0.1) unstable; urgency=low
 
index cd0dd06..86d9c8a 100644 (file)
@@ -7,6 +7,7 @@ from os import rename
 from os.path import getmtime
 from contextlib import closing
 import yaml
 from os.path import getmtime
 from contextlib import closing
 import yaml
+import re
 
 try:    loader = yaml.CSafeLoader
 except: loader = yaml.SafeLoader
 
 try:    loader = yaml.CSafeLoader
 except: loader = yaml.SafeLoader
@@ -33,10 +34,26 @@ def augment(d1, d2):
             d1[k] = d2[k]
     return d1
 
             d1[k] = d2[k]
     return d1
 
+def run_parts_list(dirname):
+    """Reimplements Debian's run-parts --list.
+
+    One difference from run-parts's behavior: run-parts --list /foo/
+    will give output like /foo//bar, because Python code tends to expect this.
+
+    Matches documented behavior of run-parts in debianutils v2.28.2, dated 2007.
+    """
+    # From run-parts(8).
+    lanana_re   = re.compile('^[a-z0-9]+$')
+    lsb_re      = re.compile('^_?([a-z0-9_.]+-)+[a-z0-9]+$')
+    deb_cron_re = re.compile('^[a-z0-9][a-z0-9-]*$')
+    for name in os.listdir(dirname):
+        if lanana_re.match(name) or lsb_re.match(name) or deb_cron_re.match(name):
+            yield os.path.join(dirname, name)
+
 def list_files():
     yield src_path
 def list_files():
     yield src_path
-    for name in os.listdir(src_dirpath):
-        yield os.path.join(src_dirpath, name)
+    for name in run_parts_list(src_dirpath):
+        yield name
 
 def load_master():
     config = dict()
 
 def load_master():
     config = dict()