aboutsummaryrefslogtreecommitdiff
path: root/src/nix-store
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-store')
-rw-r--r--src/nix-store/help.txt6
-rw-r--r--src/nix-store/main.cc31
2 files changed, 34 insertions, 3 deletions
diff --git a/src/nix-store/help.txt b/src/nix-store/help.txt
index d7f977025..a3dcdebb6 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 078618a5d..4be8e8f44 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);
}