apt-sync: also support specify components for each codename, refactor code

Signed-off-by: Harry Chen <i@harrychen.xyz>
This commit is contained in:
Harry Chen 2023-12-03 18:19:27 +08:00
parent ddea9a858b
commit 19f6f97a0a

View File

@ -322,31 +322,33 @@ def main():
check_args("os_version", os_list) check_args("os_version", os_list)
os_list = replace_os_template(os_list) os_list = replace_os_template(os_list)
# generate lists of components # generate a list of components and archs for each os codename
component_list = args.component.split(',') def generate_list_for_oses(raw: str, name: str) -> List[List[str]]:
check_args("component", component_list) n_os = len(os_list)
if ':' in raw:
# generate arch list for each os codename # specify os codenames for each component
if ';' in args.arch: lists = []
# specify arches for each os for l in raw.split(':'):
arch_lists = [] list_for_os = l.split(',')
for arches in args.arch.split(';'): check_args(name, list_for_os)
arch_list = arches.split(',') lists.append(list_for_os)
check_args("arch", arch_list) assert len(lists) == n_os, f"{name} must be specified for each component"
arch_lists.append(arch_list)
assert len(arch_lists) == len(os_list), "arches must be specified for each os"
else: else:
# use same arches for all os # use same os codenames for all components
arch_list = args.arch.split(',') l = raw.split(',')
check_args("arch", arch_list) check_args(name, l)
arch_lists = [arch_list] * len(os_list) lists = [l] * n_os
return lists
component_lists = generate_list_for_oses(args.component)
arch_lists = generate_list_for_oses(args.arch)
args.working_dir.mkdir(parents=True, exist_ok=True) args.working_dir.mkdir(parents=True, exist_ok=True)
failed = [] failed = []
deb_set = {} deb_set = {}
for os, arch_list in zip(os_list, arch_lists): for os, arch_list, comp_list in zip(os_list, arch_lists, component_lists):
for comp in component_list: for comp in comp_list:
for arch in arch_list: for arch in arch_list:
if apt_mirror(args.base_url, os, comp, arch, args.working_dir, deb_set=deb_set) != 0: if apt_mirror(args.base_url, os, comp, arch, args.working_dir, deb_set=deb_set) != 0:
failed.append((os, comp, arch)) failed.append((os, comp, arch))