diff options
Diffstat (limited to 'src/nix-store')
-rw-r--r-- | src/nix-store/help.txt | 6 | ||||
-rw-r--r-- | src/nix-store/main.cc | 31 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/nix-store/help.txt b/src/nix-store/help.txt index d7f977025440..a3dcdebb6faa 100644 --- a/src/nix-store/help.txt +++ b/src/nix-store/help.txt @@ -9,8 +9,10 @@ Operations: --add / -A: copy a path to the Nix store --query / -q: query information - --successor: register a successor expression - --substitute: register a substitute expression + --successor: register a successor expression (dangerous!) + --substitute: register a substitute expression (dangerous!) + --validpath: register path validity (dangerous!) + --isvalid: check path validity --dump: dump a path as a Nix archive --restore: restore a path from a Nix archive diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc index 078618a5db34..4be8e8f4495b 100644 --- a/src/nix-store/main.cc +++ b/src/nix-store/main.cc @@ -185,6 +185,30 @@ static void opSubstitute(Strings opFlags, Strings opArgs) } +static void opValidPath(Strings opFlags, Strings opArgs) +{ + if (!opFlags.empty()) throw UsageError("unknown flag"); + + Transaction txn; + createStoreTransaction(txn); + for (Strings::iterator i = opArgs.begin(); + i != opArgs.end(); ++i) + registerValidPath(txn, *i); + txn.commit(); +} + + +static void opIsValid(Strings opFlags, Strings opArgs) +{ + if (!opFlags.empty()) throw UsageError("unknown flag"); + + for (Strings::iterator i = opArgs.begin(); + i != opArgs.end(); ++i) + if (!isValidPath(*i)) + throw Error(format("path `%1%' is not valid") % *i); +} + + /* A sink that writes dump output to stdout. */ struct StdoutSink : DumpSink { @@ -273,6 +297,10 @@ void run(Strings args) op = opSuccessor; else if (arg == "--substitute") op = opSubstitute; + else if (arg == "--validpath") + op = opValidPath; + else if (arg == "--isvalid") + op = opIsValid; else if (arg == "--dump") op = opDump; else if (arg == "--restore") @@ -292,7 +320,8 @@ void run(Strings args) if (!op) throw UsageError("no operation specified"); - openDB(); + if (op != opDump && op != opRestore) /* !!! hack */ + openDB(); op(opFlags, opArgs); } |