From 332d333fa24c8b1943799aadb017f61e642008e1 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Sun, 7 Sep 2025 17:32:13 +0200 Subject: libs: refactor recursive files helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- bundles/s6/items.py | 6 +++--- libs/gen.py | 27 ++++++++++++++++++++++++++- 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] + + -- cgit 1.4.1