]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/utils.py
Merge branch 'master' into dbtests
[dak.git] / daklib / utils.py
index 27b068e1c49d15ec9426da65f13ac49054762f2b..b5e090da3eb24324f89307fedff7920928115d4c 100755 (executable)
@@ -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