Drop the use of exceptions for fatal error handling.
[cumulus.git] / scandir.cc
index 10e908b..f119197 100644 (file)
@@ -270,6 +270,10 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
                 subfile.analyze_new_block(block_buf, bytes);
                 refs = subfile.create_incremental(tss, o, block_age);
             } else {
+                if (flag_rebuild_statcache && ref.is_normal()) {
+                    subfile.analyze_new_block(block_buf, bytes);
+                    subfile.store_analyzed_signatures(ref);
+                }
                 refs.push_back(ref);
             }
 
@@ -294,7 +298,9 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
     // the checksum in the statcache.  If not, we have possible disk corruption
     // and report a warning.
     if (flag_rebuild_statcache) {
-        if (found && file_info["checksum"] != metawriter->get_checksum()) {
+        if (found
+            && metawriter->is_unchanged(&stat_buf)
+            && file_info["checksum"] != metawriter->get_checksum()) {
             fprintf(stderr,
                     "Warning: Checksum for %s does not match expected value\n"
                     "    expected: %s\n"
@@ -628,6 +634,7 @@ void usage(const char *program)
         "  --intent=FLOAT       intended backup type: 1=daily, 7=weekly, ...\n"
         "                           (defaults to \"1\")\n"
         "  --full-metadata      do not re-use metadata from previous backups\n"
+        "  --rebuild-statcache  re-read all file data to verify statcache\n"
         "  -v --verbose         list files as they are backed up\n"
         "\n"
         "Exactly one of --dest or --upload-script must be specified.\n",
@@ -918,7 +925,7 @@ int main(int argc, char *argv[])
         waitpid(signature_pid, &status, 0);
 
         if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
-            throw IOException("Signature filter process error");
+            fatal("Signature filter process error");
         }
     }