import apt_pkg
import database
import time
-import tarfile
import re
import string
import email as modemail
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)
################################################################################
################################################################################
+def temp_dirname(parent=None, prefix="dak", suffix=""):
+ """
+ Return a secure and unique directory by pre-creating it.
+ If 'parent' is non-null, it will be the directory the directory is pre-created in.
+ If 'prefix' is non-null, the filename will be prefixed with it, default is dak.
+ If 'suffix' is non-null, the filename will end with it.
+
+ Returns a pathname to the new directory
+ """
+
+ return tempfile.mkdtemp(suffix, prefix, parent)
+
+################################################################################
+
def is_email_alias(email):
""" checks if the user part of the email is listed in the alias file """
global alias_cache
################################################################################
-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())
###############################################################################