[Secure-testing-commits] r16577 - bin lib/python

Florian Weimer fw at alioth.debian.org
Sun Apr 24 14:25:31 UTC 2011


Author: fw
Date: 2011-04-24 14:25:18 +0000 (Sun, 24 Apr 2011)
New Revision: 16577

Modified:
   bin/list-queue
   lib/python/debian_support.py
Log:
debian_support.inspect_deb(): remove

bin/list-queue uses the parser in python-debian instead.


Modified: bin/list-queue
===================================================================
--- bin/list-queue	2011-04-24 14:07:43 UTC (rev 16576)
+++ bin/list-queue	2011-04-24 14:25:18 UTC (rev 16577)
@@ -44,13 +44,14 @@
 import sqlite3
 import json
 
+from debian.debfile import DebFile
 import debian_support
 
 def createdb():
     cache = os.path.expanduser("~/.cache")
     if not os.path.isdir(cache):
         os.mkdir(cache)
-    dbfile = os.path.join(cache, "secure-testing_list-debs.sqlite")
+    dbfile = os.path.join(cache, "secure-testing_list-queue.sqlite")
     db = sqlite3.connect(dbfile, isolation_level="IMMEDIATE")
     db.execute("PRAGMA page_size = 4096")
     db.execute("PRAGMA journal_mode = WAL")
@@ -105,7 +106,9 @@
                    ((path,) for path, _ in need_update))
     def do_update():
         for (path, stat) in need_update:
-            pkg = debian_support.inspect_deb(path)
+            deb = DebFile(path)
+            pkg = debian_support.BinaryPackage()
+            pkg.load822(deb.debcontrol())
             indb[path] = stat + (pkg,)
             yield (path,) + stat + pkg.astuple()
     db.executemany("INSERT INTO package VALUES (?, ?, ?, ?, ?, ?, ?, ?)",

Modified: lib/python/debian_support.py
===================================================================
--- lib/python/debian_support.py	2011-04-24 14:07:43 UTC (rev 16576)
+++ lib/python/debian_support.py	2011-04-24 14:25:18 UTC (rev 16577)
@@ -471,9 +471,29 @@
                         pkg_source, pkg_source_version))
 
     def loadtuple(self, data):
+        if None in data:
+            raise ValueError("None not permitted: " + repr(data))
         self.name, self.version, self.arch, self.source, self.source_version =\
             data
+    
+    def load822(self, data):
+        "Loads this object from a Deb822-like object."
 
+        pkg = data["Package"]
+        version = data["Version"]
+        if "Source" in data:
+            source = data.get("Source", None)
+            match = self.re_source.match(source)
+            if match is None:
+                raise ValueError("invalid Source field: " + repr(source))
+            src, src_version = match.groups()
+            if src_version is None:
+                src_version = version
+        else:
+            src = pkg
+            src_version = version
+        self.loadtuple((pkg, version, data["Architecture"], src, src_version))
+
     def astuple(self):
         return (self.name, self.version, self.arch,
                 self.source, self.source_version)
@@ -481,54 +501,6 @@
     def __repr__(self):
         return "BinaryPackage(" + repr(self.astuple()) + ")"
 
-def inspect_deb(path):
-    "Extracts meta-data from a Debian package file (.deb)."
-    devnull = file("/dev/null", "r")
-    tempout = tempfile.TemporaryFile()
-    temperr = tempfile.TemporaryFile()
-    dpkg = subprocess.Popen(("dpkg", "-I", "--", path),
-                            stdin=devnull,
-                            stdout=tempout,
-                            stderr=temperr)
-    dpkg.wait()
-    temperr.seek(0)
-    temperr = temperr.read()
-    if temperr:
-        raise IOError("unexpected dpkg output for " + repr(path) + ": "
-                      + repr(temperr))
-    if dpkg.returncode <> 0:
-        raise IOError("unexpected dpkg status for " + repr(path) + ": "
-                      + repr(dpkg.returncode))
-    tempout.seek(0)
-    lines = list(tempout.readlines())
-    if not lines:
-        raise IOError("empty dpkg output for " + repr(path))
-    if lines[0] <> " new debian package, version 2.0.\n":
-        raise IOError("unexpected dpkg format for " +repr(path) + ":"
-                      + repr(lines[0]))
-    while lines and not lines[0].startswith(" Package: "):
-        del lines[0]
-    if not lines:
-        raise IOError("no Package: line in dpkg output for " +repr(path))
-    stripped = StringIO()
-    for line in lines:
-        if line.startswith(" "):
-            stripped.write(line[1:])
-        else:
-            break
-    stripped.seek(0)
-    pkgfile = PackageFile(path, stripped)
-    result = None
-    for pkg in pkgfile:
-        if result is None:
-            result = BinaryPackage()
-            result.loadentry(pkg)
-        else:
-            raise IOError("multiple package entries for " + repr(path))
-    if result is None:
-        raise IOError("no package entries for " + repr(path))
-    return result
-
 def test():
     # Version
     assert Version('0') < Version('a')




More information about the Secure-testing-commits mailing list