commit 922535c9e9d39afcf2cb0c384220a0625e04c170
parent ad4a91c066ce306caf619fc3783cc963ab9c4802
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:
2 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/amprolla b/amprolla
@@ -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')
diff --git a/lib/package.py b/lib/package.py
@@ -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
@@ -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`
@@ -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