diff --git a/lib/pkgcomposer.py b/lib/pkgcomposer.py index 722cc42..28aace4 100644 --- a/lib/pkgcomposer.py +++ b/lib/pkgcomposer.py @@ -1,6 +1,7 @@ import json import os import shutil +import subprocess import sys if sys.version_info >= (3, 14): @@ -45,4 +46,14 @@ class PkgComposer: shutil.copy2(src, f"{self.workdir}/bundle/{dst}", follow_symlinks=False) def add_dir(self, src: str, dst: str, merge: bool = False): - shutil.copytree(src, f"{self.workdir}/bundle/{dst}", dirs_exist_ok=merge) + target = f"{self.workdir}/bundle/{dst}" + if not os.path.exists(src): + raise FileNotFoundError(f"Source directory not found: {src}") + os.makedirs(os.path.dirname(target), exist_ok=True) + if merge and os.path.exists(target) and os.path.isdir(target): + cmd = ["cp", "-a", f"{src}/.", target] + else: + cmd = ["cp", "-a", src, target] + result = subprocess.run(cmd, capture_output=True, text=True) + if result.returncode != 0: + raise RuntimeError(f"cp command failed: {result.stderr}")