tAdd rewriting of 'Filepath' using a custom rewrite function - amprolla - devuan's apt repo merger (HTM) git clone git://parazyd.org/amprolla.git (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 922535c9e9d39afcf2cb0c384220a0625e04c170 (DIR) parent ad4a91c066ce306caf619fc3783cc963ab9c4802 (HTM) Author: Merlijn Wajer <merlijn@wizzup.org> Date: Fri, 26 May 2017 00:54:13 +0200 Add rewriting of 'Filepath' using a custom rewrite function Diffstat: M amprolla | 14 ++++++++++++-- M lib/package.py | 20 ++++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) --- (DIR) diff --git a/amprolla b/amprolla t@@ -30,10 +30,20 @@ devuan = load_packages_file(join(roots['devuan'], packages_file)) debian = load_packages_file(join(roots['debian'], packages_file)) debian_sec = load_packages_file(join(roots['debian-sec'], packages_file)) -all_repos = [devuan, debian_sec, debian] +all_repos = [{'name': 'devuan', 'packages': devuan}, + {'name': 'debian-sec', 'packages': debian_sec}, + {'name': 'debian', 'packages': debian}] + +def devuan_rewrite(pkg, repo_name): + if repo_name == 'devuan': + pkg['Filename'] = pkg['Filename'].replace('pool/', 'pool/%s/' % + repo_name.upper()) + + return pkg + print('Merging packages') -new_pkgs = merge_packages_many(all_repos, banned_packages=banpkgs) +new_pkgs = merge_packages_many(all_repos, banned_packages=banpkgs, rewriter=devuan_rewrite) print('Writing packages') write_packages(new_pkgs, 'Packages.merged') (DIR) diff --git a/lib/package.py b/lib/package.py t@@ -51,7 +51,8 @@ def package_banned(pkg, banned_pkgs): return bool(deps.intersection(banned_pkgs)) -def merge_packages(pkg1, pkg2, banned_packages=set()): +def merge_packages(pkg1, pkg2, name1, name2, banned_packages=set(), + rewriter=None): """ Merges two previously loaded/parsed (using load_packages_file) packages dictionaries, preferring `pkg1` over `pkg2`, and optionally discarding any t@@ -65,19 +66,26 @@ def merge_packages(pkg1, pkg2, banned_packages=set()): pkg2_pkg = pkg2.get(pkg) if pkg1_pkg and pkg2_pkg: + if rewriter: + pkg1_pkg = rewriter(pkg1_pkg, name1) new_pkgs[pkg] = pkg1_pkg elif pkg1_pkg: if not package_banned(pkg1_pkg, banned_packages): + if rewriter: + pkg1_pkg = rewriter(pkg1_pkg, name1) + new_pkgs[pkg] = pkg1_pkg elif pkg2_pkg: if not package_banned(pkg2_pkg, banned_packages): + if rewriter: + pkg2_pkg = rewriter(pkg2_pkg, name2) new_pkgs[pkg] = pkg2_pkg else: assert False, 'Impossibru' return new_pkgs -def merge_packages_many(packages, banned_packages=set()): # TODO: Make generic +def merge_packages_many(packages, banned_packages=set(), rewriter=None): """ Merges two (or more) previously loaded/parsed (using load_packages_file) packages dictionaries, priority is defined by the order of the `packages` t@@ -90,9 +98,13 @@ def merge_packages_many(packages, banned_packages=set()): # TODO: Make generic pkg1 = packages[0] pkg2 = packages[1] - new_pkgs = merge_packages(pkg1, pkg2, banned_packages=banned_packages) + new_pkgs = merge_packages(pkg1['packages'], pkg2['packages'], + pkg1['name'], pkg2['name'], + banned_packages=banned_packages, + rewriter=rewriter) for pkg in packages[2:]: - new_pkgs = merge_packages(new_pkgs, pkg, banned_packages=banned_packages) + new_pkgs = merge_packages(new_pkgs, pkg['packages'], '', pkg['name'], + banned_packages=banned_packages) return new_pkgs