]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/changes.py
merge from ftp-master
[dak.git] / daklib / changes.py
index 4d2bcfe181ce193fadd84ac8f883046ae092840e..e016638cd1db36296d67f4ea0505723106ac057e 100644 (file)
@@ -205,10 +205,10 @@ class Changes(object):
                 multivalues[key] = self.changes[key]
 
         chg = DBChange()
-        chg.chagnesfile = self.change_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):