]> err.no Git - dak/commitdiff
more safety nets when our functions do not do what we expect from them
authorPhilipp Kern <pkern@debian.org>
Sun, 7 Sep 2008 15:16:28 +0000 (17:16 +0200)
committerPhilipp Kern <pkern@debian.org>
Sun, 7 Sep 2008 15:45:18 +0000 (17:45 +0200)
2008-09-07  Philipp Kern  <pkern@debian.org>

        * daklib/utils.py (check_hash): change the comment and warn
        if a file is not found when checking the hashes (i.e. when
        it is probably in the pool)

* daklib/utils.py (check_size): do not bail out if the file
is not found, because it may be in the pool

        * dak/process_accepted.py (install): bail out and skip the
        upload when ensure_hashes fails, print the rejection messages
        as warnings

Signed-off-by: Philipp Kern <pkern@debian.org>
ChangeLog
dak/process_accepted.py
daklib/utils.py

index 5448fb95f9610204153da8dc93dc34c2debdfe2d..a5469a1af86c44ff3abed82e4994c388a8bb67fa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-09-07  Philipp Kern  <pkern@debian.org>
+
+       * daklib/utils.py (check_hash): change the comment and warn
+       if a file is not found when checking the hashes (i.e. when
+       it is probably in the pool)
+
+       * daklib/utils.py (check_size): do not bail out if the file
+       is not found, because it may be in the pool
+
+       * dak/process_accepted.py (install): bail out and skip the
+       upload when ensure_hashes fails, print the rejection messages
+       as warnings
+
 2008-08-28  Philipp Kern  <pkern@debian.org>
 
        * daklib/utils.py (check_hashes): adapt to different API, check
index 5e09243ffa545b22f836f9e2fa57191e4cfd31d2..1e3997eb99d743d497dc304596303365a6c531cb 100755 (executable)
@@ -274,9 +274,13 @@ def install ():
     # Begin a transaction; if we bomb out anywhere between here and the COMMIT WORK below, the DB will not be changed.
     projectB.query("BEGIN WORK")
 
-    # Check the hashes are all present: HACK: Can go away once all dak files
-    # are known to be newer than the shasum changes
-    utils.ensure_hashes(changes, dsc, files, dsc_files)
+    # Ensure that we have all the hashes we need below.
+    rejmsg = utils.ensure_hashes(changes, dsc, files, dsc_files)
+    if len(rejmsg) > 0:
+        # There were errors.  Print them and SKIP the changes.
+        for msg in rejmsg:
+            utils.warn(msg)
+        return
 
     # Add the .dsc file to the DB
     for file in files.keys():
index 02278e9130f78579a8e04dea6aef8cd998a55ca8..8e06cf35cc6dbbc795b008865c64991b2d9dbfc3 100755 (executable)
@@ -250,6 +250,7 @@ def check_hash(where, files, hashname, hashfunc):
 
     rejmsg = []
     for f in files.keys():
+        file_handle = None
         try:
             file_handle = open_file(f)
 
@@ -264,10 +265,12 @@ def check_hash(where, files, hashname, hashfunc):
                 rejmsg.append("%s: %s check failed in %s" % (f, hashname,
                     where))
         except CantOpenError:
-            # XXX: IS THIS THE BLOODY CASE WHEN THE FILE'S IN THE POOL!?
+            # TODO: This happens when the file is in the pool.
+            warn("Cannot open file %s" % f)
             continue
         finally:
-            file_handle.close()
+            if file_handle:
+                file_handle.close()
     return rejmsg
 
 ################################################################################
@@ -278,7 +281,15 @@ def check_size(where, files):
 
     rejmsg = []
     for f in files.keys():
-        actual_size = os.stat(f)[stat.ST_SIZE]
+        try:
+            entry = os.stat(f)
+        except OSError, exc:
+            if exc.errno == 2:
+                # TODO: This happens when the file is in the pool.
+                continue
+            raise
+
+        actual_size = entry[stat.ST_SIZE]
         size = int(files[f]["size"])
         if size != actual_size:
             rejmsg.append("%s: actual file size (%s) does not match size (%s) in %s"