From: Joerg Jaspert Date: Mon, 26 Oct 2009 14:49:24 +0000 (+0100) Subject: Merge commit 'lamby/master' into merge X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=895d11faa1fc13583c302961450679c6b589960f;hp=83fa0f11f1fc2794cb9e13d015b6dd32d50827f5;p=dak.git Merge commit 'lamby/master' into merge * commit 'lamby/master': Make import_keyring use dbconn.get_or_set_uid. Make import_keyring use get_or_set_keyring. Port database.get_or_set_keyring_id => dbconn.get_or_set_keyring Use gzip.open(.., 'rb') instead of gunzip and temporary filenames. Signed-off-by: Joerg Jaspert --- diff --git a/dak/import_keyring.py b/dak/import_keyring.py index 4c6a2eaa..eac8ae5d 100755 --- a/dak/import_keyring.py +++ b/dak/import_keyring.py @@ -140,7 +140,7 @@ class Keyring(object): keys[key]["uid"] = uid if keyid != None: continue - keyid = database.get_or_set_uid_id(uid) + keyid = get_or_set_uid_id(uid).uid byuid[keyid] = (uid, name) byname[uid] = (keyid, name) @@ -157,13 +157,13 @@ class Keyring(object): keys[x]["uid"] = format % "invalid-uid" else: uid = format % keys[x]["email"] - keyid = database.get_or_set_uid_id(uid) + keyid = get_or_set_uid(uid).uid byuid[keyid] = (uid, keys[x]["name"]) byname[uid] = (keyid, keys[x]["name"]) keys[x]["uid"] = uid if any_invalid: uid = format % "invalid-uid" - keyid = database.get_or_set_uid_id(uid) + keyid = get_or_set_uid_id(uid).uid byuid[keyid] = (uid, "ungeneratable user id") byname[uid] = (keyid, "ungeneratable user id") return (byname, byuid) @@ -227,8 +227,9 @@ def main(): is_dm = cnf["Import-Keyring::"+keyringname+"::Debian-Maintainer"] - keyring_id = database.get_or_set_keyring_id( - keyringname.split("/")[-1]) + keyring_id = get_or_set_keyring( + keyringname.split("/")[-1], session, + ).keyring_id ### Generate new uid entries if they're needed (from LDAP or the keyring) (desuid_byname, desuid_byid) = keyring.generate_desired_users() diff --git a/dak/rm.py b/dak/rm.py index 8ed03412..8dff809e 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -43,6 +43,7 @@ import commands import os import re import sys +import gzip import apt_pkg import apt_inst @@ -115,11 +116,7 @@ def reverse_depends_check(removals, suites, arches=None): for component in components: filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (cnf["Dir::Root"], suites[0], component, architecture) # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... - (fd, temp_filename) = utils.temp_filename() - (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) - if (result != 0): - utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result) - packages = utils.open_file(temp_filename) + packages = gzip.open(filename, 'rb') Packages = apt_pkg.ParseTagFile(packages) while Packages.Step(): package = Packages.Section.Find("Package") @@ -149,7 +146,6 @@ def reverse_depends_check(removals, suites, arches=None): virtual_packages[virtual_pkg] += 1 p2c[package] = component packages.close() - os.unlink(temp_filename) # If a virtual package is only provided by the to-be-removed # packages, treat the virtual package as to-be-removed too. @@ -200,12 +196,7 @@ def reverse_depends_check(removals, suites, arches=None): for component in components: filename = "%s/dists/%s/%s/source/Sources.gz" % (cnf["Dir::Root"], suites[0], component) # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... - (fd, temp_filename) = utils.temp_filename() - result, output = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) - if result != 0: - sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) - sys.exit(result) - sources = utils.open_file(temp_filename, "r") + sources = gzip.open(filename, 'rb') Sources = apt_pkg.ParseTagFile(sources) while Sources.Step(): source = Sources.Section.Find("Package") diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 23aeda6f..c0b7d0e8 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -981,6 +981,42 @@ class Keyring(object): __all__.append('Keyring') +def get_or_set_keyring(keyring, session=None): + """ + If C{keyring} does not have an entry in the C{keyrings} table yet, create one + and return the new Keyring + If C{keyring} already has an entry, simply return the existing Keyring + + @type keyring: string + @param keyring: the keyring name + + @rtype: Keyring + @return: the Keyring object for this keyring + + """ + privatetrans = False + if session is None: + session = DBConn().session() + privatetrans = True + + try: + obj = session.query(Keyring).filter_by(keyring_name=keyring).first() + + if obj is None: + obj = Keyring(keyring_name=keyring) + session.add(obj) + if privatetrans: + session.commit() + else: + session.flush() + + return obj + finally: + if privatetrans: + session.close() + +__all__.append('get_or_set_keyring') + ################################################################################ class Location(object):