feat: add managed sources

Signed-off-by: sisungo <[email protected]>
This commit is contained in:
2026-09-30 06:32:54 +00:00
parent c62b2fc8f6
commit 67a7ccf9ab
59 changed files with 215 additions and 114 deletions
+42 -15
View File
@@ -6,12 +6,7 @@ import sys
import typing
import hooks
import lib.arch
import lib.atombuild
import lib.make
import lib.packie
import lib.pkgcomposer
import lib.sources
import lib
os.chdir(os.path.dirname(__file__))
sys.path.append(os.path.abspath("lib"))
@@ -35,6 +30,9 @@ parser_list.add_argument("ITEM", choices=("all", "built", "new"))
parser_repo_push = subparsers.add_parser("repo-push")
parser_repo_push.add_argument("REPO_DIR")
parser_repo_push.add_argument("REPO_PUSH_PKGNAME", nargs="*")
parser_vendor_src = subparsers.add_parser("vendor-src")
parser_vendor_src.add_argument("REPO_DIR")
parser_vendor_src.add_argument("VENDOR_PKGNAME")
args = argparser.parse_args()
if args.target:
@@ -43,6 +41,22 @@ else:
lib.arch.set_target(lib.arch.get_target())
def load_pkgbuild(pkgname):
# Declare necessary paths
repo_root = os.getcwd()
package_dir = f"{repo_root}/packages/{pkgname}"
target_dir = f"{package_dir}/target"
try:
os.chdir(package_dir)
os.makedirs(target_dir, exist_ok=True)
except Exception:
print(f"No such package {pkgname}")
exit(1)
importlib.import_module(f"packages.{pkgname}.pkgbuild")
os.chdir(repo_root)
def run_hooks(map, arg: typing.Any = None):
current_dir = os.getcwd()
for n in map.keys():
@@ -190,15 +204,8 @@ def cmd_build_atom(pkgname: str):
build_env_root = f"{target_dir}/atombuild_root"
# Read `pkgbuild.py` of that package
lib.make._in_atombuild = True
try:
os.chdir(package_dir)
os.makedirs(target_dir, exist_ok=True)
except Exception:
print(f"No such package {pkgname}")
exit(1)
importlib.import_module(f"packages.{pkgname}.pkgbuild")
os.chdir(repo_root)
lib.make._dry_run = True
load_pkgbuild(pkgname)
# Initialize build environment
lib.atombuild.prepare_build_env(build_env_root, lib.make._builddep)
@@ -238,6 +245,24 @@ def cmd_repo_push(repo_dir: str, pkgname: list[str]):
print(f"error: failed to add '{pkg}': see the output above")
def cmd_vendor_src(repo_dir, pkgname):
package_dir = f"{os.getcwd()}/packages/{pkgname}"
target_dir = f"{package_dir}/target"
lib.make._dry_run = True
load_pkgbuild(pkgname)
if lib.make._managed_source_url is None:
print(f"error: '{pkgname}' declared not managed sources")
exit(1)
os.chdir(package_dir)
from_path = lib.managed_source.create_srcpkg(
lib.make._managed_source_url,
lib.make._managed_source_postprocess,
)
filename = lib.managed_source.get_repo_filename(lib.make._managed_source_url)
to_path = f"{repo_dir}/{filename}"
shutil.copy2(from_path, to_path)
if args.subcommand == "build":
if args.atombuild:
cmd_build_atom(args.BUILD_PKGNAME)
@@ -253,6 +278,8 @@ elif args.subcommand == "list":
cmd_list(args.ITEM)
elif args.subcommand == "repo-push":
cmd_repo_push(args.REPO_DIR, args.REPO_PUSH_PKGNAME)
elif args.subcommand == "vendor-src":
cmd_vendor_src(args.REPO_DIR, args.VENDOR_PKGNAME)
else:
print("error: no action specified", file=sys.stderr)
exit(1)