diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-14T17·35+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-14T17·35+0000 |
commit | 8992fce3da844e3cfc7cbc563cbf5313980c16dd (patch) | |
tree | af637cfba0fccea836877d43cd950f7aab93f164 /src/libstore | |
parent | e446d342b77e0babb200afd6b6275df2c70cfaee (diff) |
* It is now possible to add store derivations or paths directly to a
user environment, e.g., $ nix-env -i /nix/store/z58v41v21xd3ywrqk1vmvdwlagjx7f10-aterm-2.3.1.drv or $ nix-env -i /nix/store/hsyj5pbn0d9iz7q0aj0fga7cpaadvp1l-aterm-2.3.1 This is useful because it allows Nix expressions to be bypassed entirely. For instance, if only a nix-pull manifest is provided, plus the top-level path of some component, it can be installed without having to supply the Nix expression (e.g., for obfuscation, or to be independent of Nix expression language changes or context dependencies).
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/build.hh | 5 | ||||
-rw-r--r-- | src/libstore/misc.cc | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libstore/build.hh b/src/libstore/build.hh index 2c6bcf9f2dea..45997ebb24d0 100644 --- a/src/libstore/build.hh +++ b/src/libstore/build.hh @@ -28,4 +28,9 @@ Derivation derivationFromPath(const Path & drvPath); void computeFSClosure(const Path & storePath, PathSet & paths, bool flipDirection = false); +/* Return the path corresponding to the output identifier `id' in the + given derivation. */ +Path findOutput(const Derivation & drv, string id); + + #endif /* !__BUILD_H */ diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc index 5f20ee277513..f3cc98bf4e2a 100644 --- a/src/libstore/misc.cc +++ b/src/libstore/misc.cc @@ -27,3 +27,12 @@ void computeFSClosure(const Path & storePath, i != references.end(); ++i) computeFSClosure(*i, paths, flipDirection); } + + + Path findOutput(const Derivation & drv, string id) +{ + for (DerivationOutputs::const_iterator i = drv.outputs.begin(); + i != drv.outputs.end(); ++i) + if (i->first == id) return i->second.path; + throw Error(format("derivation has no output `%1%'") % id); +} |