X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fimport_new_files.py;h=5b132c82d7ee2a09f2283e9da1c5272cd2274467;hb=651efe1dd248dac0facf7c9e517efcd419cc0483;hp=2e35728642330690e595544cfcc069c92bd4018d;hpb=90a5398879cba59d83b26ad1e849516bdfe14559;p=dak.git diff --git a/dak/import_new_files.py b/dak/import_new_files.py index 2e357286..5b132c82 100755 --- a/dak/import_new_files.py +++ b/dak/import_new_files.py @@ -34,9 +34,10 @@ import logging import threading import glob import apt_pkg -from daklib.dbconn import DBConn, get_dbchange, get_policy_queue, session_wrapper, ChangePendingFile +from daklib.dbconn import DBConn, get_dbchange, get_policy_queue, session_wrapper, ChangePendingFile, get_location, check_poolfile from daklib.config import Config from daklib.queue import Upload +from daklib.utils import poolify # where in dak.conf all of our configuration will be stowed options_prefix = "NewFiles" @@ -63,6 +64,7 @@ OPTIONS class ImportNewFiles(object): @session_wrapper def __init__(self, session=None): + cnf = Config() try: newq = get_policy_queue('new', session) for changes_fn in glob.glob(newq.path + "/*.changes"): @@ -86,35 +88,62 @@ class ImportNewFiles(object): files=[] for chg_fn in u.pkg.files.keys(): - f = open(os.path.join(newq.path, chg_fn)) - cpf = ChangePendingFile() - cpf.filename = chg_fn - cpf.size = u.pkg.files[chg_fn]['size'] - cpf.md5sum = u.pkg.files[chg_fn]['md5sum'] - - if u.pkg.files[chg_fn].has_key('sha1sum'): - cpf.sha1sum = u.pkg.files[chg_fn]['sha1sum'] - else: - log.warning("Having to generate sha1sum for %s" % chg_fn) - f.seek(0) - cpf.sha1sum = apt_pkg.sha1sum(f) - - if u.pkg.files[chg_fn].has_key('sha256sum'): - cpf.sha256sum = u.pkg.files[chg_fn]['sha256sum'] - else: - log.warning("Having to generate sha256sum for %s" % chg_fn) - f.seek(0) - cpf.sha256sum = apt_pkg.sha256sum(f) - - session.add(cpf) - files.append(cpf) - f.close() + try: + f = open(os.path.join(newq.path, chg_fn)) + cpf = ChangePendingFile() + cpf.filename = chg_fn + cpf.size = u.pkg.files[chg_fn]['size'] + cpf.md5sum = u.pkg.files[chg_fn]['md5sum'] + + if u.pkg.files[chg_fn].has_key('sha1sum'): + cpf.sha1sum = u.pkg.files[chg_fn]['sha1sum'] + else: + log.warning("Having to generate sha1sum for %s" % chg_fn) + f.seek(0) + cpf.sha1sum = apt_pkg.sha1sum(f) + + if u.pkg.files[chg_fn].has_key('sha256sum'): + cpf.sha256sum = u.pkg.files[chg_fn]['sha256sum'] + else: + log.warning("Having to generate sha256sum for %s" % chg_fn) + f.seek(0) + cpf.sha256sum = apt_pkg.sha256sum(f) + + session.add(cpf) + files.append(cpf) + f.close() + except IOError: + # Can't find the file, try to look it up in the pool + poolname = poolify(u.pkg.changes["source"], u.pkg.files[chg_fn]["component"]) + l = get_location(cnf["Dir::Pool"], u.pkg.files[chg_fn]["component"], session=session) + if not l: + log.critical("ERROR: Can't find location for %s (component %s)" % (chg_fn, u.pkg.files[chg_fn]["component"])) + + found, poolfile = check_poolfile(os.path.join(poolname, chg_fn), + u.pkg.files[chg_fn]['size'], + u.pkg.files[chg_fn]["md5sum"], + l.location_id, + session=session) + + if found is None: + log.critical("ERROR: Found multiple files for %s in pool" % chg_fn) + sys.exit(1) + elif found is False and poolfile is not None: + log.critical("ERROR: md5sum / size mismatch for %s in pool" % chg_fn) + sys.exit(1) + else: + if poolfile is None: + log.critical("ERROR: Could not find %s in pool" % chg_fn) + sys.exit(1) + else: + chg.poolfiles.append(poolfile) + chg.files = files session.commit() - + except KeyboardInterrupt: print("Caught C-c; terminating.") utils.warn("Caught C-c; terminating.")