#! /usr/bin/python import sys, os.path, gzip, subprocess #from debian_bundle import deb822 import apt_pkg def check_source(ok, srcs, fw): ret=[] 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, 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): #return open(dir + "/" + os.path.basename(file), "w") #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 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()