X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fchanges.py;h=e016638cd1db36296d67f4ea0505723106ac057e;hb=632fa120d547e3e8e41e9d32a3f705f886a1858f;hp=2b0327cd03a0f9225e016b42c70322cceb4d7f5f;hpb=22414ad527e7a3b973b0ec9c03022720cf047141;p=dak.git diff --git a/daklib/changes.py b/daklib/changes.py index 2b0327cd..e016638c 100644 --- a/daklib/changes.py +++ b/daklib/changes.py @@ -205,10 +205,10 @@ class Changes(object): multivalues[key] = self.changes[key] chg = DBChange() - chg.changesfile = self.changes_file + chg.changesname = self.changes_file chg.seen = filetime chg.in_queue_id = in_queue - chg.source = self.chagnes["source"] + chg.source = self.changes["source"] chg.binaries = multivalues["binary"] chg.architecture = multivalues["architecture"] chg.version = self.changes["version"] @@ -218,24 +218,60 @@ class Changes(object): chg.fingerprint = self.changes["fingerprint"] chg.changedby = self.changes["changed-by"] chg.date = self.changes["date"] - - session.add(chg) - - chg_files = [] - for chg_fn in self.files.keys(): - cpf = ChangePendingFile() - cpf.filename = chg_fn - cpf.size = self.files[chg_fn]['size'] - cpf.md5sum = self.files[chg_fn]['md5sum'] - session.add(cpf) - chg_files.append(cpf) + session.add(chg) - chg.files = chg_files + files = [] + for chg_fn, entry in self.files.items(): + try: + f = open(os.path.join(dirpath, 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 + 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 session.commit() chg = session.query(DBChange).filter_by(changesname = self.changes_file).one(); - + return chg def unknown_files_fields(self, name):