diff options
-rw-r--r-- | doc/manual/nix-instantiate.xml | 14 | ||||
-rw-r--r-- | src/nix-instantiate/nix-instantiate.cc | 12 |
2 files changed, 26 insertions, 0 deletions
diff --git a/doc/manual/nix-instantiate.xml b/doc/manual/nix-instantiate.xml index a659ee730484..7e6120852f09 100644 --- a/doc/manual/nix-instantiate.xml +++ b/doc/manual/nix-instantiate.xml @@ -36,6 +36,7 @@ <option>--eval-only</option> <arg><option>--strict</option></arg> </arg> + <arg choice='plain'><option>--find-file</option></arg> </group> <arg><option>--xml</option></arg> </arg> @@ -100,6 +101,19 @@ policies.</para> </varlistentry> + <varlistentry><term><option>--find-file</option></term> + + <listitem><para>Look up the given files in Nix’s search path (as + specified by the <envar>NIX_PATH</envar> environment variable). + If found, print the corresponding absolute paths on standard + output. For instance, if <envar>NIX_PATH</envar> is + <literal>nixpkgs=/home/alice/nixpkgs</literal>, then + <literal>nix-instantiate --find-file nixpkgs/default.nix</literal> + will print + <literal>/home/alice/nixpkgs/default.nix</literal>.</para></listitem> + + </varlistentry> + <varlistentry><term><option>--xml</option></term> <listitem><para>When used with <option>--parse-only</option> and diff --git a/src/nix-instantiate/nix-instantiate.cc b/src/nix-instantiate/nix-instantiate.cc index 8f3a290f3a6a..adc8ca623807 100644 --- a/src/nix-instantiate/nix-instantiate.cc +++ b/src/nix-instantiate/nix-instantiate.cc @@ -79,6 +79,7 @@ void run(Strings args) EvalState state; Strings files; bool readStdin = false; + bool findFile = false; bool evalOnly = false; bool parseOnly = false; bool xmlOutput = false; @@ -100,6 +101,8 @@ void run(Strings args) readOnlyMode = true; parseOnly = evalOnly = true; } + else if (arg == "--find-file") + findFile = true; else if (arg == "--attr" || arg == "-A") { if (i == args.end()) throw UsageError("`--attr' requires an argument"); @@ -130,6 +133,15 @@ void run(Strings args) if (attrPaths.empty()) attrPaths.push_back(""); + if (findFile) { + foreach (Strings::iterator, i, files) { + Path p = state.findFile(*i); + if (p == "") throw Error(format("unable to find `%1%'") % *i); + std::cout << p << std::endl; + } + return; + } + store = openStore(); if (readStdin) { |