about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bundles/s6/items.py6
-rw-r--r--libs/gen.py27
2 files changed, 29 insertions, 4 deletions
diff --git a/bundles/s6/items.py b/bundles/s6/items.py
index 2fd8370..597cdba 100644
--- a/bundles/s6/items.py
+++ b/bundles/s6/items.py
@@ -36,10 +36,10 @@ directories = {
     "/etc/s6-rc/services/services/contents.d": {}
 }
 
-repo.libs.gen.add_files_recursive(
-    files,
+repo.libs.gen.merge(files, repo.libs.gen.tree(
     join(repo.path, "bundles", "s6", "files"),
-)
+    keep_parent=False,
+))
 
 svc_openrc = {
     "s6-rc-init": {
diff --git a/libs/gen.py b/libs/gen.py
index 7d68496..b5c7c93 100644
--- a/libs/gen.py
+++ b/libs/gen.py
@@ -1,15 +1,40 @@
 from pathlib import Path
 from os.path import join
 
+from bundlewrap.items.files import File
+
 
 def add_files_recursive(files, root, common={}, target_root="/", files_root=None):
     if files_root == None:
         files_root = root
 
-    for p in Path(root).rglob("**/*"):
+    root = Path(root)
+    for p in root.rglob("**/*"):
         if not p.is_dir():
             rel = str(p.relative_to(files_root))
             key = join(target_root, rel)
             files[key] = (files[key] if key in files else {}) | common | {
                 "source": rel,
             }
+
+
+def tree(root, common={}, target_dir="/",
+                         keep_parent=True):
+    files = {}
+
+    root = Path(root)
+    for p in Path(root).rglob("**/*"):
+        if not p.is_dir():
+            key = join(target_dir, p.relative_to(
+                root.parent if keep_parent else root))
+            files[key] = (files[key] if key in files else {}) | common | {
+                "source": str(p),
+            }
+
+    return files
+
+def merge(a, b):
+    for key in b.keys():
+        a[key] = (a[key] if key in a else {}) | b[key]
+
+