aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Baugh <sbaugh@catern.com>2018-12-12 14:19:54 -0500
committerSpencer Baugh <sbaugh@catern.com>2019-01-23 01:24:34 +0000
commit5f1891b795c4c4daac5336d1ec60c94f521ede1d (patch)
tree449a2f56d286542cfc03434fde2e92ff89503f2b /src
parent92d08c02c84be34ec0df56ed718526c382845d1a (diff)
nix-store: make --dump-db take a list of paths to dump
Inside a derivation, exportReferencesGraph already provides a way to dump the Nix database for a specific closure. On the command line, --dump-db gave us the same information, but only for the entire Nix database at once. With this change, one can now pass a list of paths to --dump-db to get the Nix database dumped for just those paths. (The user is responsible for ensuring this is a closure, like for --export). Among other things, this is useful for deploying a closure to a new host without using --import/--export; one can use tar to transfer the store paths, and --dump-db/--load-db to transfer the validity information. This is useful if the new host doesn't actually have Nix yet, and the closure that is being deployed itself contains Nix.
Diffstat (limited to 'src')
-rw-r--r--src/nix-store/nix-store.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index a9ad14762..33138baff 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -485,11 +485,16 @@ static void opReadLog(Strings opFlags, Strings opArgs)
static void opDumpDB(Strings opFlags, Strings opArgs)
{
if (!opFlags.empty()) throw UsageError("unknown flag");
- if (!opArgs.empty())
- throw UsageError("no arguments expected");
- PathSet validPaths = store->queryAllValidPaths();
- for (auto & i : validPaths)
- cout << store->makeValidityRegistration({i}, true, true);
+ if (!opArgs.empty()) {
+ for (auto & i : opArgs)
+ i = store->followLinksToStorePath(i);
+ for (auto & i : opArgs)
+ cout << store->makeValidityRegistration({i}, true, true);
+ } else {
+ PathSet validPaths = store->queryAllValidPaths();
+ for (auto & i : validPaths)
+ cout << store->makeValidityRegistration({i}, true, true);
+ }
}