aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/get-drvs.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-03-10 16:20:42 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-03-10 16:20:42 +0000
commit37d1b1cafd17a18dc7dbef3b4ba7fb204158d58b (patch)
tree65ac3fdf078404a0957c5df5af855849e03be20f /src/libexpr/get-drvs.cc
parenta33fb2d28738376d377ea8473f6cffc39bc784c4 (diff)
* `nix-env -qa --description' shows human-readable descriptions of
packages (provided that they have a `meta.description' attribute). E.g., $ ./src/nix-env/nix-env -qa --description gcc gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for sparc-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for mips-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for arm-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x
Diffstat (limited to 'src/libexpr/get-drvs.cc')
-rw-r--r--src/libexpr/get-drvs.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/libexpr/get-drvs.cc b/src/libexpr/get-drvs.cc
index 63e68eb6f..ff38ff794 100644
--- a/src/libexpr/get-drvs.cc
+++ b/src/libexpr/get-drvs.cc
@@ -2,6 +2,49 @@
#include "nixexpr-ast.hh"
+string DrvInfo::queryDrvPath(EvalState & state) const
+{
+ if (drvPath == "") {
+ Expr a = attrs.get("drvPath");
+ (string &) drvPath = a ? evalPath(state, a) : "";
+ }
+ return drvPath;
+}
+
+
+string DrvInfo::queryOutPath(EvalState & state) const
+{
+ if (outPath == "") {
+ Expr a = attrs.get("outPath");
+ if (!a) throw Error("output path missing");
+ (string &) outPath = evalPath(state, a);
+ }
+ return outPath;
+}
+
+
+MetaInfo DrvInfo::queryMetaInfo(EvalState & state) const
+{
+ MetaInfo meta;
+
+ Expr a = attrs.get("meta");
+ if (!a) return meta; /* fine, empty meta information */
+
+ ATermMap attrs2;
+ queryAllAttrs(evalExpr(state, a), attrs2);
+
+ for (ATermIterator i(attrs2.keys()); i; ++i) {
+ ATerm s = coerceToString(evalExpr(state, attrs2.get(*i)));
+ if (s)
+ meta[aterm2String(*i)] = aterm2String(s);
+ /* For future compatibility, ignore attribute values that are
+ not strings. */
+ }
+
+ return meta;
+}
+
+
typedef set<Expr> Exprs;