about summary refs log tree commit diff
path: root/src/nix/verify.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-08-16T17·23+0200
committerEelco Dolstra <edolstra@gmail.com>2017-08-16T18·56+0200
commitc2cab207320672fb6ed4af40a99fc9082ff55234 (patch)
treec966ed39598be295be7fe663054e2ff92ecf5e92 /src/nix/verify.cc
parentb4ed97e3a3116909fcaa79f5ce84487ed3838112 (diff)
nix verify: Restore the progress indicator
Diffstat (limited to 'src/nix/verify.cc')
-rw-r--r--src/nix/verify.cc29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/nix/verify.cc b/src/nix/verify.cc
index 0d9739314b53..7156341396d3 100644
--- a/src/nix/verify.cc
+++ b/src/nix/verify.cc
@@ -61,16 +61,17 @@ struct CmdVerify : StorePathsCommand
 
         auto publicKeys = getDefaultPublicKeys();
 
+        Activity act(*logger, actVerifyPaths);
+
         std::atomic<size_t> done{0};
         std::atomic<size_t> untrusted{0};
         std::atomic<size_t> corrupted{0};
         std::atomic<size_t> failed{0};
+        std::atomic<size_t> active{0};
 
-        std::string doneLabel("paths checked");
-        std::string untrustedLabel("untrusted");
-        std::string corruptedLabel("corrupted");
-        std::string failedLabel("failed");
-        //logger->setExpected(doneLabel, storePaths.size());
+        auto update = [&]() {
+            act.progress(done, storePaths.size(), active, failed);
+        };
 
         ThreadPool pool;
 
@@ -78,7 +79,10 @@ struct CmdVerify : StorePathsCommand
             try {
                 checkInterrupt();
 
-                //Activity act(*logger, lvlInfo, format("checking '%s'") % storePath);
+                Activity act2(*logger, actUnknown, fmt("checking '%s'", storePath));
+
+                MaintainCount<std::atomic<size_t>> mcActive(active);
+                update();
 
                 auto info = store->queryPathInfo(storePath);
 
@@ -90,8 +94,8 @@ struct CmdVerify : StorePathsCommand
                     auto hash = sink.finish();
 
                     if (hash.first != info->narHash) {
-                        //logger->incProgress(corruptedLabel);
-                        corrupted = 1;
+                        corrupted++;
+                        act2.result(resCorruptedPath, info->path);
                         printError(
                             format("path '%s' was modified! expected hash '%s', got '%s'")
                             % info->path % info->narHash.to_string() % hash.first.to_string());
@@ -142,21 +146,21 @@ struct CmdVerify : StorePathsCommand
                     }
 
                     if (!good) {
-                        //logger->incProgress(untrustedLabel);
                         untrusted++;
+                        act2.result(resUntrustedPath, info->path);
                         printError(format("path '%s' is untrusted") % info->path);
                     }
 
                 }
 
-                //logger->incProgress(doneLabel);
                 done++;
 
             } catch (Error & e) {
                 printError(format(ANSI_RED "error:" ANSI_NORMAL " %s") % e.what());
-                //logger->incProgress(failedLabel);
                 failed++;
             }
+
+            update();
         };
 
         for (auto & storePath : storePaths)
@@ -164,9 +168,6 @@ struct CmdVerify : StorePathsCommand
 
         pool.process();
 
-        printInfo(format("%d paths checked, %d untrusted, %d corrupted, %d failed")
-            % done % untrusted % corrupted % failed);
-
         throw Exit(
             (corrupted ? 1 : 0) |
             (untrusted ? 2 : 0) |