From 70659ae66b56e7ee111d5ad295e827ce93e9df6b Mon Sep 17 00:00:00 2001 From: josch Date: Mon, 8 Oct 2012 09:27:13 +0200 Subject: [PATCH] allow mapping of debian/gentoo packages to multiple gentoo/debian packages --- BUGS | 2 -- find_reduced.py | 26 +++++++++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/BUGS b/BUGS index 5fc6184..15658e1 100644 --- a/BUGS +++ b/BUGS @@ -6,8 +6,6 @@ * software in Debian that's not in Gentoo * different source package splittings * disjunctive dependencies not handled yet - * how to handle virtual/* gentoo packages? - * no mapping to multiple packets yet * many direct build dependencies of gentoo packages do not appear in debian source packages as they are indirectly pulled in * gentoo packages directly depend on build-essential or essential packages diff --git a/find_reduced.py b/find_reduced.py index fef289a..e257d35 100755 --- a/find_reduced.py +++ b/find_reduced.py @@ -43,14 +43,19 @@ def flatten(l): l[0:1] = l[0] if l: yield l.pop(0) -# TODO: what about mapping to multiple packets? deb2gen = dict() gen2deb = dict() with open("./deb2gen_mapping.list") as f: for line in f: d, g = line.strip().split('\t') - deb2gen[d] = g - gen2deb[g] = d + if deb2gen.get(d): + deb2gen[d].append(g) + else: + deb2gen[d] = [g] + if gen2deb.get(g): + gen2deb[g].append(d) + else: + gen2deb[g] = [d] with open("./deb_source_pkgs.list") as f: debian_names = [p[4:].strip() for p in f] @@ -80,10 +85,11 @@ for cat in os.listdir(portdir): # only grab newest package pkg, ver, rev = sorted(pkgs, key=cmp_to_key(pkgcmp), reverse=True)[0] - deb = gen2deb.get("%s/%s"%(cat, pkg)) + deb = gen2deb.get("%s/%s"%(cat, pkg), []) # assure that the package is relevant - if deb not in debian_names: + cont = [d for d in deb if d in debian_names] + if not cont: continue pkgnames.append((cat, pkg, ver, rev)) @@ -143,7 +149,7 @@ for i, (cat, pkg, ver, rev) in enumerate(pkgnames): missing_gen_mappings.append(p) continue - ddeps.append(r) + ddeps.extend(r) debian_deps["%s/%s"%(cat,pkg)] = list(set(ddeps)) count +=1 @@ -175,7 +181,9 @@ for d in debian_names: continue # get the droppable dependencies - deps = debian_deps.get(g) + deps = [] + for r in g: + deps.extend(debian_deps.get(r, [])) if not deps: continue @@ -188,10 +196,10 @@ for d in debian_names: for r in deps: # convert source package to binary packages # only retain those binary packages that are a build dependency - bindeps.extend([p for p in src2bin[r] if p in pdeps]) + bindeps.extend([p for p in src2bin.get(r, []) if p in pdeps]) if bindeps: - print d, bindeps + print "src:%s %s"%(d, " ".join(bindeps)) print list(set(missing_deb_mappings)) print list(set(missing_gen_mappings))