]> err.no Git - dak/commitdiff
move generate_contents_information to utils.py
authorMike O'Connor <stew@vireo.org>
Mon, 9 Feb 2009 00:58:34 +0000 (19:58 -0500)
committerMike O'Connor <stew@vireo.org>
Mon, 9 Feb 2009 00:58:34 +0000 (19:58 -0500)
generate_contents_information will be used by p-a and by the bootstrap
so I move it to a more common location.

Signed-off-by: Mike O'Connor <stew@vireo.org>
dak/process_accepted.py
daklib/utils.py

index fa66a0c42975c44df0f8ed777efb8f8b72804ba1..e88e7904949bf25c323cb79f360207654f1ee5fd 100755 (executable)
@@ -99,41 +99,6 @@ class Urgency_Log:
 
 ###############################################################################
 
-def generate_contents_information(filename):
-    # Generate all the contents for the database
-    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:] "), "")
-
-    # Ugh ... this is ugly ... Code ripped from process_unchecked.py
-    chunks = output.split('\n')
-    cmd = "ar x %s %s" % (filename, chunks[2])
-    (result, output) = commands.getstatusoutput(cmd)
-    if result != 0:
-        reject("%s: 'ar t' invocation failed." % (filename))
-        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 data_tar == "data.tar.bz2":
-        data = tarfile.open("data.tar.bz2", "r:bz2")
-    else:
-        os.remove(chunks[2])
-        reject("couldn't find data.tar.*")
-
-    contents = []
-    for tarinfo in data:
-        if not tarinfo.isdir():
-            contents.append(tarinfo.name[2:])
-
-    os.remove(chunks[2])
-    return contents
-
-###############################################################################
 
 def reject (str, prefix="Rejected: "):
     global reject_message
@@ -394,7 +359,6 @@ def install ():
             source = files[file]["source package"]
             source_version = files[file]["source version"]
             filename = files[file]["pool name"] + file
-            contents = generate_contents_information(file)
             if not files[file].has_key("location id") or not files[file]["location id"]:
                 files[file]["location id"] = database.get_location_id(Cnf["Dir::Pool"],files[file]["component"],utils.where_am_i())
             if not files[file].has_key("files id") or not files[file]["files id"]:
@@ -410,6 +374,7 @@ def install ():
                 projectB.query("INSERT INTO bin_associations (suite, bin) VALUES (%d, currval('binaries_id_seq'))" % (suite_id))
 
             # insert contents into the database
+            contents = utils.generate_contents_information(file)
             q = projectB.query("SELECT currval('binaries_id_seq')")
             bin_id = int(q.getresult()[0][0])
             for file in contents:
index a50a840f22b573dc08fd6710109d443de91dd41a..52b902f9ffe84e298fce9fb4c127b935b5376f6a 100755 (executable)
@@ -1407,3 +1407,52 @@ if which_conf_file() != default_config:
     apt_pkg.ReadConfigFileISC(Cnf,which_conf_file())
 
 ################################################################################
+
+def generate_contents_information(filename):
+    """
+    Generate a list of flies contained in a .deb
+
+    @type filename: string
+    @param filename: the path to a .deb
+
+    @rtype: list
+    @return: a list of files in the data.tar.* portion of the .deb
+    """
+    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:] "), "")
+
+    # Ugh ... this is ugly ... Code ripped from process_unchecked.py
+    chunks = output.split('\n')
+
+    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 data_tar == "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:])
+
+    finally:
+        if os.path.exists( chunks[2] ):
+            os.remove( chunks[2] )
+
+    return contents
+
+###############################################################################