about summary refs log tree commit diff
path: root/libs/gen.py
blob: b5c7c93cb18f391a6def72a2d5304e47b6bf56a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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

    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]