X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=4e54a3272ea75a4ba1f7c71b85ad0f7affb3b0eb;hb=b7f4f39d244e3282303015c9ff4a116252a64613;hp=84d5b1c2c059fd586793bdbe54d1b0f0468a95d6;hpb=881011792a47f49d6fe2354a7efb86eee6bb572b;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 84d5b1c2..4e54a327 100644 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -1152,7 +1152,7 @@ def get_poolfile_like_name(filename, session=None): """ # TODO: There must be a way of properly using bind parameters with %FOO% - q = session.query(PoolFile).filter(PoolFile.filename.like('%%%s%%' % filename)) + q = session.query(PoolFile).filter(PoolFile.filename.like('%%/%s' % filename)) return q.all() @@ -1437,6 +1437,75 @@ class DBChange(object): def __repr__(self): return '' % self.changesname + def upload_into_db(self, u, path): + cnf = Config() + session = DBConn().session().object_session(self) + + files = [] + for chg_fn, entry in u.pkg.files.items(): + try: + f = open(os.path.join(path, chg_fn)) + cpf = ChangePendingFile() + cpf.filename = chg_fn + cpf.size = entry['size'] + cpf.md5sum = entry['md5sum'] + + if entry.has_key('sha1sum'): + cpf.sha1sum = entry['sha1sum'] + else: + f.seek(0) + cpf.sha1sum = apt_pkg.sha1sum(f) + + if entry.has_key('sha256sum'): + cpf.sha256sum = entry['sha256sum'] + else: + 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 + from utils import poolify + poolname = poolify(entry["source"], entry["component"]) + l = get_location(cnf["Dir::Pool"], entry["component"], session=session) + + found, poolfile = check_poolfile(os.path.join(poolname, chg_fn), + entry['size'], + entry["md5sum"], + l.location_id, + session=session) + + if found is None: + Logger.log(["E: Found multiple files for pool (%s) for %s" % % (chg_fn, entry["component"])) + elif found is False and poolfile is not None: + Logger.log(["E: md5sum/size mismatch for %s in pool" % % (chg_fn)) + else: + if poolfile is None: + Logger.log(["E: Could not find %s in pool" % % (chg_fn)) + else: + chg.poolfiles.append(poolfile) + + chg.files = files + + + def clean_from_queue(self): + session = DBConn().session().object_session(self) + + # Remove changes_pool_files entries + for pf in self.poolfiles: + self.poolfiles.remove(pf) + + # Remove change + for cf in self.files: + self.files.remove(cf) + + # Clear out of queue + self.in_queue = None + self.approved_for_id = None + __all__.append('DBChange') @session_wrapper @@ -2843,6 +2912,16 @@ class DBConn(object): poolfiles = relation(PoolFile, secondary=self.tbl_changes_pool_files, backref="changeslinks"), + seen = self.tbl_changes.c.seen, + source = self.tbl_changes.c.source, + binaries = self.tbl_changes.c.binaries, + architecture = self.tbl_changes.c.architecture, + distribution = self.tbl_changes.c.distribution, + urgency = self.tbl_changes.c.urgency, + maintainer = self.tbl_changes.c.maintainer, + changedby = self.tbl_changes.c.changedby, + date = self.tbl_changes.c.date, + version = self.tbl_changes.c.version, files = relation(ChangePendingFile, secondary=self.tbl_changes_pending_files_map, backref="changesfile"), @@ -2855,7 +2934,12 @@ class DBConn(object): properties = dict(change_pending_binary_id = self.tbl_changes_pending_binaries.c.id)) mapper(ChangePendingFile, self.tbl_changes_pending_files, - properties = dict(change_pending_file_id = self.tbl_changes_pending_files.c.id)) + properties = dict(change_pending_file_id = self.tbl_changes_pending_files.c.id, + filename = self.tbl_changes_pending_files.c.filename, + size = self.tbl_changes_pending_files.c.size, + md5sum = self.tbl_changes_pending_files.c.md5sum, + sha1sum = self.tbl_changes_pending_files.c.sha1sum, + sha256sum = self.tbl_changes_pending_files.c.sha256sum)) mapper(ChangePendingSource, self.tbl_changes_pending_source, properties = dict(change_pending_source_id = self.tbl_changes_pending_source.c.id,