aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/get-drvs.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2007-05-01 20:33:18 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2007-05-01 20:33:18 +0000
commita9d15d4f434fece269852a65be836d1338ed787d (patch)
tree2b911d71e4641da7d164c4f8aeab930acef6a9a3 /src/libexpr/get-drvs.cc
parentcbfac2fdccc83b04d9c2027e9e21070d4ac7c7e5 (diff)
* nix-env -i: instead of breaking package ties by version, break them
by priority and version install. That is, if there are multiple packages with the same name, then pick the package with the highest priority, and only use the version if there are multiple packages with the same priority. This makes it possible to mark specific versions/variant in Nixpkgs more or less desirable than others. A typical example would be a beta version of some package (e.g., "gcc-4.2.0rc1") which should not be installed even though it is the highest version, except when it is explicitly selected (e.g., "nix-env -i gcc-4.2.0rc1"). * Idem for nix-env -u, only the semantics are a bit trickier since we also need to take into account the priority of the currently installed package (we never upgrade to a lower priority, unless --always is given).
Diffstat (limited to 'src/libexpr/get-drvs.cc')
-rw-r--r--src/libexpr/get-drvs.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libexpr/get-drvs.cc b/src/libexpr/get-drvs.cc
index bd0ec4781..daa987fe7 100644
--- a/src/libexpr/get-drvs.cc
+++ b/src/libexpr/get-drvs.cc
@@ -60,6 +60,15 @@ MetaInfo DrvInfo::queryMetaInfo(EvalState & state) const
}
+string DrvInfo::queryMetaInfo(EvalState & state, const string & name) const
+{
+ /* !!! evaluates all meta attributes => inefficient */
+ MetaInfo meta = queryMetaInfo(state);
+ MetaInfo::iterator i = meta.find(name);
+ return i == meta.end() ? "" : i->second;
+}
+
+
void DrvInfo::setMetaInfo(const MetaInfo & meta)
{
ATermMap metaAttrs;