diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-02-14 21:44:18 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-02-14 21:44:18 +0000 |
commit | 76c0e85929dc747288a8fe66a7bb77673cf2aa7e (patch) | |
tree | a470529f9acd56ac6af84bf426628c33a8affebf /src/nix-store | |
parent | 6f5a5ea5ea7fa80bc709c4a2b14ea4395ebe7469 (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')
-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 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); } |