diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-04-05 15:30:22 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-04-05 16:39:23 +0200 |
commit | d0f5719c2a2e5a0eea49dc072b26e7d161564bbb (patch) | |
tree | 48589fd3963b008418004a2fca383a29c347e1be /src/libstore/local-store.cc | |
parent | 80da7a637559aadb6544599adc9f5807188cb9e5 (diff) |
Add "nix copy-sigs" command
This imports signatures from one store into another. E.g.
$ nix copy-sigs -r /run/current-system -s https://cache.nixos.org/
imported 595 signatures
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r-- | src/libstore/local-store.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 9b961b192..28e340af7 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -312,7 +312,7 @@ void LocalStore::openDB(bool create) stmtRegisterValidPath.create(db, "insert into ValidPaths (path, hash, registrationTime, deriver, narSize, ultimate) values (?, ?, ?, ?, ?, ?);"); stmtUpdatePathInfo.create(db, - "update ValidPaths set narSize = ?, hash = ?, ultimate = ? where path = ?;"); + "update ValidPaths set narSize = ?, hash = ?, ultimate = ?, sigs = ? where path = ?;"); stmtAddReference.create(db, "insert or replace into Refs (referrer, reference) values (?, ?);"); stmtQueryPathInfo.create(db, @@ -683,14 +683,14 @@ ValidPathInfo LocalStore::queryPathInfo(const Path & path) } -/* Update path info in the database. Currently only updates the - narSize field. */ +/* Update path info in the database. */ void LocalStore::updatePathInfo(const ValidPathInfo & info) { stmtUpdatePathInfo.use() (info.narSize, info.narSize != 0) ("sha256:" + printHash(info.narHash)) (info.ultimate ? 1 : 0, info.ultimate) + (concatStringsSep(" ", info.sigs), !info.sigs.empty()) (info.path) .exec(); } @@ -1694,4 +1694,20 @@ void LocalStore::vacuumDB() } +void LocalStore::addSignatures(const Path & storePath, const StringSet & sigs) +{ + retrySQLite<void>([&]() { + SQLiteTxn txn(db); + + auto info = queryPathInfo(storePath); + + info.sigs.insert(sigs.begin(), sigs.end()); + + updatePathInfo(info); + + txn.commit(); + }); +} + + } |