]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/utils.py
Revert "Merge commit 'stew/content_generation' into merge"
[dak.git] / daklib / utils.py
index 9bbf711ac5f92e71cfd06ddda7ae406698dbb608..fd790b5930df56d0e49804a13178db33f7bca090 100755 (executable)
@@ -37,7 +37,6 @@ import stat
 import apt_pkg
 import database
 import time
-import tarfile
 import re
 import string
 import email as modemail
@@ -235,6 +234,10 @@ def parse_changes(filename, signing_rules=0):
     changes_in = open_file(filename)
     content = changes_in.read()
     changes_in.close()
+    try:
+        unicode(content, 'utf-8')
+    except UnicodeError:
+        raise ChangesUnicodeError, "Changes file not proper utf-8"
     return parse_deb822(content, signing_rules)
 
 ################################################################################
@@ -1495,62 +1498,31 @@ def is_email_alias(email):
 
 ################################################################################
 
-apt_pkg.init()
-
-Cnf = apt_pkg.newConfiguration()
-apt_pkg.ReadConfigFileISC(Cnf,default_config)
-
-if which_conf_file() != default_config:
-    apt_pkg.ReadConfigFileISC(Cnf,which_conf_file())
-
-################################################################################
-
-def generate_contents_information(filename):
+def get_changes_files(dir):
     """
-    Generate a list of flies contained in a .deb
+    Takes a directory and lists all .changes files in it (as well as chdir'ing
+    to the directory; this is due to broken behaviour on the part of p-u/p-a
+    when you're not in the right place)
 
-    @type filename: string
-    @param filename: the path to a data.tar.gz or data.tar.bz2
-
-    @rtype: list
-    @return: a list of files in the data.tar.* portion of the .deb
+    Returns a list of filenames
     """
-    cmd = "ar t %s" % (filename)
-    (result, output) = commands.getstatusoutput(cmd)
-    if result != 0:
-        reject("%s: 'ar t' invocation failed." % (filename))
-        reject(utils.prefix_multi_line_string(output, " [ar output:] "), "")
+    try:
+        # Much of the rest of p-u/p-a depends on being in the right place
+        os.chdir(dir)
+        changes_files = [x for x in os.listdir(dir) if x.endswith('.changes')]
+    except OSError, e:
+        fubar("Failed to read list from directory %s (%s)" % (dir, e))
 
-    # Ugh ... this is ugly ... Code ripped from process_unchecked.py
-    chunks = output.split('\n')
+    return changes_files
 
-    contents = []
-    try:
-        cmd = "ar x %s %s" % (filename, chunks[2])
-        (result, output) = commands.getstatusoutput(cmd)
-        if result != 0:
-            reject("%s: '%s' invocation failed." % (filename, cmd))
-            reject(utils.prefix_multi_line_string(output, " [ar output:] "), "")
-
-        # Got deb tarballs, now lets go through and determine what bits
-        # and pieces the deb had ...
-        if chunks[2] == "data.tar.gz":
-            data = tarfile.open("data.tar.gz", "r:gz")
-        elif chunks[2] == "data.tar.bz2":
-            data = tarfile.open("data.tar.bz2", "r:bz2")
-        else:
-            os.remove(chunks[2])
-            reject("couldn't find data.tar.*")
+################################################################################
 
-        for tarinfo in data:
-            if not tarinfo.isdir():
-                contents.append(tarinfo.name[2:])
+apt_pkg.init()
 
-    finally:
-        if os.path.exists( chunks[2] ):
-            shutil.rmtree( chunks[2] )
-            os.remove( chunks[2] )
+Cnf = apt_pkg.newConfiguration()
+apt_pkg.ReadConfigFileISC(Cnf,default_config)
 
-    return contents
+if which_conf_file() != default_config:
+    apt_pkg.ReadConfigFileISC(Cnf,which_conf_file())
 
-###############################################################################
+################################################################################