commit 7b234b5febe9b32148c60a7ff5b5f582e5882d58
parent 385ad0a13cbf41188892e9880db84353a19657b6
Author: parazyd <parazyd@dyne.org>
Date: Wed, 31 May 2017 23:07:42 +0200
add a orchestrate merge example
Diffstat:
4 files changed, 137 insertions(+), 107 deletions(-)
diff --git a/amprolla-merge b/amprolla-merge
@@ -1,107 +0,0 @@
-#!/usr/bin/env python3
-"""
-Amprolla main module
-"""
-
-from os.path import join
-from time import time
-
-from lib.package import (write_packages, load_packages_file,
- merge_packages_many)
-from lib.config import (aliases, banpkgs, repo_order, repos,
- spooldir, suites , mergedir, mergesubdir)
-
-
-def prepare_merge_dict():
- """
- This function will prepare a dict of lists that contain the repos
- that need to be merged in an ordered fashion. Orders them using the
- repo_order list found in lib.config
- Example output:
- {'ascii': ['ascii', None, 'stretch']},
- """
- merge_dict = {}
-
- for suite in suites:
- for i in suites[suite]:
- merge_dict[i] = []
-
- for suite in merge_dict:
- for repo in repo_order:
- tmpsuite = suite
- if repos[repo]['aliases'] is True:
- if tmpsuite in aliases[repos[repo]['name']]:
- tmpsuite = aliases[repos[repo]['name']][suite]
- elif repos[repo]['skipmissing'] is True:
- tmpsuite = None
- skips = ['jessie-security', 'ascii-security']
- if repo == 'debian' and suite in skips:
- tmpsuite = None
- if tmpsuite: # make it a proper path
- tmpsuite = join(spooldir, repos[repo]['dists'], tmpsuite)
- merge_dict[suite].append(tmpsuite)
-
- return merge_dict
-
-
-def devuan_rewrite(pkg, repo_name):
- """
- Function to be called when including a certain package. Allows for changing
- any attributes. Currently only changes the filename if we include a package
- when repo_name == 'devuan'.
- """
- if repo_name == 'devuan':
- pkg['Filename'] = pkg['Filename'].replace('pool/', 'pool/%s/' %
- repos[repo_name]['name'])
-
- return pkg
-
-
-def merge(packages_list):
- t1 = time()
-
- all_repos = []
- print('Loading packages: %s' % packages_list)
-
- devuan = load_packages_file(packages_list[0])
- if devuan:
- all_repos.append({'name': 'devuan', 'packages': devuan})
-
- debian_sec = load_packages_file(packages_list[1])
- if debian_sec:
- all_repos.append({'name': 'debian-sec', 'packages': debian_sec})
-
- debian = load_packages_file(packages_list[2])
- if debian:
- all_repos.append({'name': 'debian', 'packages': debian})
-
- print('Merging packages')
- new_pkgs = merge_packages_many(all_repos, banned_packages=banpkgs, rewriter=devuan_rewrite)
-
- print('Writing packages')
- # replace the devuan subdir with our mergedir that we plan to fill
- new_out = packages_list[0].replace(join(spooldir,
- repos['devuan']['dists']),
- join(mergedir, mergesubdir))
- write_packages(new_pkgs, new_out)
-
- t2 = time()
- print('time:', t2-t1)
-
-
-packages_file = 'main/binary-armhf/Packages.gz'
-to_merge = prepare_merge_dict()
-
-tt1 = time()
-for suite in to_merge:
- pkg_list = []
- for rep in to_merge[suite]:
- if rep:
- pkg_list.append(join(rep, packages_file))
- else:
- pkg_list.append(None)
-
- merge(pkg_list)
-
-tt2 = time()
-print('total time:', tt2-tt1)
diff --git a/amprolla-merge.py b/amprolla-merge.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+"""
+Amprolla main module
+"""
+
+import sys
+from os.path import join
+from time import time
+
+from lib.package import (write_packages, load_packages_file,
+ merge_packages_many)
+from lib.config import (aliases, banpkgs, repo_order, repos,
+ spooldir, suites , mergedir, mergesubdir)
+
+
+def prepare_merge_dict():
+ """
+ This function will prepare a dict of lists that contain the repos
+ that need to be merged in an ordered fashion. Orders them using the
+ repo_order list found in lib.config
+ Example output:
+ {'ascii': ['ascii', None, 'stretch']},
+ """
+ merge_dict = {}
+
+ for suite in suites:
+ for i in suites[suite]:
+ merge_dict[i] = []
+
+ for suite in merge_dict:
+ for repo in repo_order:
+ tmpsuite = suite
+ if repos[repo]['aliases'] is True:
+ if tmpsuite in aliases[repos[repo]['name']]:
+ tmpsuite = aliases[repos[repo]['name']][suite]
+ elif repos[repo]['skipmissing'] is True:
+ tmpsuite = None
+ skips = ['jessie-security', 'ascii-security']
+ if repo == 'debian' and suite in skips:
+ tmpsuite = None
+ if tmpsuite: # make it a proper path
+ tmpsuite = join(spooldir, repos[repo]['dists'], tmpsuite)
+ merge_dict[suite].append(tmpsuite)
+
+ return merge_dict
+
+
+def devuan_rewrite(pkg, repo_name):
+ """
+ Function to be called when including a certain package. Allows for changing
+ any attributes. Currently only changes the filename if we include a package
+ when repo_name == 'devuan'.
+ """
+ if repo_name == 'devuan':
+ pkg['Filename'] = pkg['Filename'].replace('pool/', 'pool/%s/' %
+ repos[repo_name]['name'])
+
+ return pkg
+
+
+def merge(packages_list):
+ t1 = time()
+
+ all_repos = []
+ print('Loading packages: %s' % packages_list)
+
+ devuan = load_packages_file(packages_list[0])
+ if devuan:
+ all_repos.append({'name': 'devuan', 'packages': devuan})
+
+ debian_sec = load_packages_file(packages_list[1])
+ if debian_sec:
+ all_repos.append({'name': 'debian-sec', 'packages': debian_sec})
+
+ debian = load_packages_file(packages_list[2])
+ if debian:
+ all_repos.append({'name': 'debian', 'packages': debian})
+
+ print('Merging packages')
+ new_pkgs = merge_packages_many(all_repos, banned_packages=banpkgs, rewriter=devuan_rewrite)
+
+ print('Writing packages')
+ # replace the devuan subdir with our mergedir that we plan to fill
+ new_out = packages_list[0].replace(join(spooldir,
+ repos['devuan']['dists']),
+ join(mergedir, mergesubdir))
+ write_packages(new_pkgs, new_out)
+
+ t2 = time()
+ print('time:', t2-t1)
+
+
+def main(packages_file):
+ #packages_file = 'main/binary-armhf/Packages.gz'
+ #packages_file = argv[1]
+ print(packages_file)
+ to_merge = prepare_merge_dict()
+
+ tt1 = time()
+ for suite in to_merge:
+ pkg_list = []
+ for rep in to_merge[suite]:
+ if rep:
+ pkg_list.append(join(rep, packages_file))
+ else:
+ pkg_list.append(None)
+
+ # print(pkg_list)
+ merge(pkg_list)
+
+ tt2 = time()
+ print('total time:', tt2-tt1)
+
+
+if __name__ == '__main__':
+ main(sys.argv[1])
diff --git a/lib/config.py b/lib/config.py
@@ -73,6 +73,8 @@ aliases = {
categories = ['main', 'contrib', 'non-free']
+arches = ['binary-armhf']
+
mainrepofiles = [
'InRelease',
'Release',
diff --git a/orchestrate.py b/orchestrate.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python3
+
+from os.path import join
+from lib.config import arches, categories
+from multiprocessing import Pool
+
+
+pkg = []
+for i in arches:
+ for j in categories:
+ pkg.append(join(j, i, 'Packages.gz'))
+ pkg.append(join(j, 'debian-installer', i, 'Packages.gz'))
+
+
+#print(pkg)
+am = __import__('amprolla-merge')
+
+p = Pool(4)
+p.map(am.main, pkg)