Merge pull request 'feat: support hard links when packaging' (#106) from sisungo/semios-packages:hardlinks into master

Reviewed-on: semios/semios-packages#106
This commit is contained in:
2026-07-07 12:29:15 +08:00
+12 -1
View File
@@ -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}")