X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=triggers%2Ffilter-nonfree;h=feb4e162c1f56bd8db43e902b02a60c84095186e;hb=0f1b347984e876507955dbc9b3c0db674d401c33;hp=5402f50a3e0be38ddc9f7b544fa5fdccd39f3ff9;hpb=636fd44b6b3b8f343eb53c4ef2dd053fb91bd4d6;p=wannabuild.git diff --git a/triggers/filter-nonfree b/triggers/filter-nonfree index 5402f50..feb4e16 100755 --- a/triggers/filter-nonfree +++ b/triggers/filter-nonfree @@ -1,32 +1,38 @@ #! /usr/bin/python -import sys, os.path +import sys, os.path, gzip, subprocess #from debian_bundle import deb822 import apt_pkg -def check_source(ok, f, fw): +def check_source(ok, srcs, fw): ret=[] - pkg = apt_pkg.ParseTagFile(f) - while pkg.Step(): - if pkg.Section['Section'].startswith('non-free'): - if pkg.Section.get('Autobuild') != 'yes': continue - if pkg.Section['Package'] not in ok: continue - ret += [pkg.Section['Package']] - fw.write(str(pkg.Section)) - fw.write("\n") - return ret - f.close() + for f in srcs: + #f = open(f, 'r') + f = subprocess.Popen("zcat %s" % (f), shell=True, stdout=subprocess.PIPE).stdout + pkg = apt_pkg.ParseTagFile(f) + while pkg.Step(): + if not pkg.Section.get('Package'): continue + if pkg.Section.get('Section','').startswith('non-free'): + if pkg.Section.get('Autobuild') != 'yes': continue + if pkg.Section['Package'] not in ok: continue + ret += [pkg.Section['Package']] + fw.write(str(pkg.Section)) + fw.write("\n") + f.close() fw.close() + return ret -def check_binary(ok, f, fw): - pkg = apt_pkg.ParseTagFile(f) - while pkg.Step(): - if pkg.Section.get('Source', pkg.Section.get('Package')).split(" ")[0] not in ok: continue - fw.write(str(pkg.Section)) - fw.write("\n") - f.close() +def check_binary(ok, bins, fw): + for f in bins: + f = subprocess.Popen("zcat %s" % (f), shell=True, stdout=subprocess.PIPE).stdout + pkg = apt_pkg.ParseTagFile(f) + while pkg.Step(): + if pkg.Section.get('Source', pkg.Section.get('Package')).split(" ")[0] not in ok: continue + fw.write(str(pkg.Section)) + fw.write("\n") + f.close() fw.close() def outfile(name, file): @@ -34,16 +40,32 @@ def outfile(name, file): #return open(file + name, "w") if file.endswith(name): return open(file[:-len(name)], "w") +def replarch(arch, pkgs): + return [ x.replace('%ARCH%', arch) for x in pkgs ] + def main(): + # call me: + # /org/wanna-build/etc/non-free-include-list "arch1 arch2" write-sources write-packages Sources* . Packages* if len(sys.argv) <= 4: print "Error - too few args" return - name = sys.argv[1] - oklist = [ x[:-1].split(' ')[0] for x in open(sys.argv[2]) ] - okpkgs = check_source(oklist, open(sys.argv[3]), outfile(name, sys.argv[3])) - for file in sys.argv[4:]: - check_binary(okpkgs, open(file), outfile(name, file)) + oklist = [ x[:-1].split(' ')[0] for x in open(sys.argv[1]) ] + #outsrcs = open(sys.argv[3], "w") + #outpkgs = open(sys + rem = sys.argv[5:] + if '.' not in rem: + print "need both Sources and Packages" + return + src = rem[:rem.index('.')] + bin = rem[rem.index('.')+1:] + if not src or not bin: + print "need non-empty Sources and Packages" + return + okpkgs = check_source(oklist, src, open(sys.argv[3], "w")) + print okpkgs + for arch in sys.argv[2].split(" "): + check_binary(okpkgs, replarch(arch, bin), open(replarch(arch, [sys.argv[4]])[0], "w")) if __name__ == '__main__': main()