diff options
Diffstat (limited to 'src/nix/sigs.cc')
-rw-r--r-- | src/nix/sigs.cc | 84 |
1 files changed, 21 insertions, 63 deletions
diff --git a/src/nix/sigs.cc b/src/nix/sigs.cc index bcc46c3e7d4f..9932aa4a9eb0 100644 --- a/src/nix/sigs.cc +++ b/src/nix/sigs.cc @@ -1,6 +1,4 @@ -#include "affinity.hh" // FIXME #include "command.hh" -#include "progress-bar.hh" #include "shared.hh" #include "store-api.hh" #include "thread-pool.hh" @@ -31,8 +29,6 @@ struct CmdCopySigs : StorePathsCommand void run(ref<Store> store, Paths storePaths) override { - restoreAffinity(); // FIXME - if (substituterUris.empty()) throw UsageError("you must specify at least one substituter using ‘-s’"); @@ -41,21 +37,15 @@ struct CmdCopySigs : StorePathsCommand for (auto & s : substituterUris) substituters.push_back(openStoreAt(s)); - ProgressBar progressBar; - ThreadPool pool; - std::atomic<size_t> done{0}; + std::string doneLabel = "done"; std::atomic<size_t> added{0}; - auto showProgress = [&]() { - return (format("[%d/%d done]") % done % storePaths.size()).str(); - }; - - progressBar.updateStatus(showProgress()); + logger->setExpected(doneLabel, storePaths.size()); auto doPath = [&](const Path & storePath) { - auto activity(progressBar.startActivity(format("getting signatures for ‘%s’") % storePath)); + Activity act(*logger, lvlInfo, format("getting signatures for ‘%s’") % storePath); checkInterrupt(); @@ -64,19 +54,21 @@ struct CmdCopySigs : StorePathsCommand StringSet newSigs; for (auto & store2 : substituters) { - if (!store2->isValidPath(storePath)) continue; - auto info2 = store2->queryPathInfo(storePath); - - /* Don't import signatures that don't match this - binary. */ - if (info.narHash != info2.narHash || - info.narSize != info2.narSize || - info.references != info2.references) - continue; - - for (auto & sig : info2.sigs) - if (!info.sigs.count(sig)) - newSigs.insert(sig); + try { + auto info2 = store2->queryPathInfo(storePath); + + /* Don't import signatures that don't match this + binary. */ + if (info->narHash != info2->narHash || + info->narSize != info2->narSize || + info->references != info2->references) + continue; + + for (auto & sig : info2->sigs) + if (!info->sigs.count(sig)) + newSigs.insert(sig); + } catch (InvalidPath &) { + } } if (!newSigs.empty()) { @@ -84,8 +76,7 @@ struct CmdCopySigs : StorePathsCommand added += newSigs.size(); } - done++; - progressBar.updateStatus(showProgress()); + logger->incProgress(doneLabel); }; for (auto & storePath : storePaths) @@ -93,45 +84,12 @@ struct CmdCopySigs : StorePathsCommand pool.process(); - progressBar.done(); - printMsg(lvlInfo, format("imported %d signatures") % added); } }; static RegisterCommand r1(make_ref<CmdCopySigs>()); -struct CmdQueryPathSigs : StorePathsCommand -{ - CmdQueryPathSigs() - { - } - - std::string name() override - { - return "query-path-sigs"; - } - - std::string description() override - { - return "print store path signatures"; - } - - void run(ref<Store> store, Paths storePaths) override - { - for (auto & storePath : storePaths) { - auto info = store->queryPathInfo(storePath); - std::cout << storePath << " "; - if (info.ultimate) std::cout << "ultimate "; - for (auto & sig : info.sigs) - std::cout << sig << " "; - std::cout << "\n"; - } - } -}; - -static RegisterCommand r2(make_ref<CmdQueryPathSigs>()); - struct CmdSignPaths : StorePathsCommand { Path secretKeyFile; @@ -163,12 +121,12 @@ struct CmdSignPaths : StorePathsCommand for (auto & storePath : storePaths) { auto info = store->queryPathInfo(storePath); - auto info2(info); + auto info2(*info); info2.sigs.clear(); info2.sign(secretKey); assert(!info2.sigs.empty()); - if (!info.sigs.count(*info2.sigs.begin())) { + if (!info->sigs.count(*info2.sigs.begin())) { store->addSignatures(storePath, info2.sigs); added++; } |