X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=02558deb38fd72d3a39588c9f0c9fe256a5561e3;hb=b7c831895d5f77fdedd3c8c3d1835154def67824;hp=27b068e1c49d15ec9426da65f13ac49054762f2b;hpb=5537d969662dd89432dbede1e985d17a7ac632ef;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 27b068e1..02558deb 100755 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -39,7 +39,7 @@ import re import email as modemail import subprocess -from dbconn import DBConn, get_architecture, get_component, get_suite +from dbconn import DBConn, get_architecture, get_component, get_suite, Keyring from dak_exceptions import * from textutils import fix_maintainer from regexes import re_html_escaping, html_escaping, re_single_line_field, \ @@ -1296,7 +1296,7 @@ def check_signature (sig_filename, data_filename="", keyrings=None, autofetch=No return (None, rejects) if not keyrings: - keyrings = Cnf.ValueList("Dinstall::GPGKeyring") + keyrings = [ x.keyring_name for x in DBConn().session().query(Keyring).all() ] # Autofetch the signing key if that's enabled if autofetch == None: @@ -1539,7 +1539,7 @@ if which_conf_file() != default_config: ################################################################################ -def parse_wnpp_bug_file(file = "/home/tolimar/wnpp-bugs"): +def parse_wnpp_bug_file(file = "/srv/ftp-master.debian.org/scripts/masterfiles/wnpp_rm"): """ Parses the wnpp bug list available at http://qa.debian.org/data/bts/wnpp_rm Well, actually it parsed a local copy, but let's document the source @@ -1548,7 +1548,14 @@ def parse_wnpp_bug_file(file = "/home/tolimar/wnpp-bugs"): returns a dict associating source package name with a list of open wnpp bugs (Yes, there might be more than one) """ - lines = open(file).readlines() + + line = [] + try: + f = open(file) + lines = f.readlines() + except IOError, e: + print "Warning: Couldn't open %s; don't know about WNPP bugs, so won't close any." % file + lines = [] wnpp = {} for line in lines: @@ -1565,3 +1572,40 @@ def parse_wnpp_bug_file(file = "/home/tolimar/wnpp-bugs"): wnpp[source] = bugs return wnpp +################################################################################ + +def get_packages_from_ftp(root, suite, component, architecture): + """ + Returns an object containing apt_pkg-parseable data collected by + aggregating Packages.gz files gathered for each architecture. + + @type root: string + @param root: path to ftp archive root directory + + @type suite: string + @param suite: suite to extract files from + + @type component: string + @param component: component to extract files from + + @type architecture: string + @param architecture: architecture to extract files from + + @rtype: TagFile + @return: apt_pkg class containing package data + + """ + filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (root, suite, component, architecture) + (fd, temp_file) = temp_filename() + (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_file)) + if (result != 0): + fubar("Gunzip invocation failed!\n%s\n" % (output), result) + filename = "%s/dists/%s/%s/debian-installer/binary-%s/Packages.gz" % (root, suite, component, architecture) + if os.path.exists(filename): + (result, output) = commands.getstatusoutput("gunzip -c %s >> %s" % (filename, temp_file)) + if (result != 0): + fubar("Gunzip invocation failed!\n%s\n" % (output), result) + packages = open_file(temp_file) + Packages = apt_pkg.ParseTagFile(packages) + os.unlink(temp_file) + return Packages