about summary refs log tree commit diff
path: root/src/nix-store/main.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-02-14T21·44+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-02-14T21·44+0000
commit76c0e85929dc747288a8fe66a7bb77673cf2aa7e (patch)
treea470529f9acd56ac6af84bf426628c33a8affebf /src/nix-store/main.cc
parent6f5a5ea5ea7fa80bc709c4a2b14ea4395ebe7469 (diff)
* The environment variable NIX_ROOT can now be set to execute Nix in a
  chroot() environment.
* A operation `--validpath' to register path validity.  Useful for
  bootstrapping in a pure Nix environment.
* Safety checks: ensure that files involved in store operations are in
  the store.

Diffstat (limited to 'src/nix-store/main.cc')
-rw-r--r--src/nix-store/main.cc31
1 files changed, 30 insertions, 1 deletions
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);
 }