From 408a7bfac1f4282ff6647696dfbc7988eed3a2ca Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 26 Nov 2012 17:39:09 +0100 Subject: nix-instantiate: Fix read-only evaluation --- src/libexpr/eval.cc | 1 + src/libexpr/eval.hh | 2 +- src/libexpr/get-drvs.cc | 11 +++++++++++ src/libexpr/get-drvs.hh | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/libexpr') diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index b176bbc82497..31aaad5485f0 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -138,6 +138,7 @@ EvalState::EvalState() , sName(symbols.create("name")) , sSystem(symbols.create("system")) , sOverrides(symbols.create("__overrides")) + , sOutputName(symbols.create("outputName")) , baseEnv(allocEnv(128)) , baseEnvDispl(0) , staticBaseEnv(false, 0) diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index a3c55a38860f..432a0bad1c6c 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -93,7 +93,7 @@ public: SymbolTable symbols; const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName, - sSystem, sOverrides; + sSystem, sOverrides, sOutputName; /* If set, force copying files to the Nix store even if they already exist there. */ diff --git a/src/libexpr/get-drvs.cc b/src/libexpr/get-drvs.cc index f9e7dc6dbe3e..2ee55bdcaea0 100644 --- a/src/libexpr/get-drvs.cc +++ b/src/libexpr/get-drvs.cc @@ -28,6 +28,17 @@ string DrvInfo::queryOutPath(EvalState & state) const } +string DrvInfo::queryOutputName(EvalState & state) const +{ + if (outputName == "" && attrs) { + Bindings::iterator i = attrs->find(state.sOutputName); + PathSet context; + (string &) outputName = i != attrs->end() ? state.coerceToString(*i->value, context) : ""; + } + return outputName; +} + + MetaInfo DrvInfo::queryMetaInfo(EvalState & state) const { if (metaInfoRead) return meta; diff --git a/src/libexpr/get-drvs.hh b/src/libexpr/get-drvs.hh index 8159417a0131..f84636a1ab3d 100644 --- a/src/libexpr/get-drvs.hh +++ b/src/libexpr/get-drvs.hh @@ -28,6 +28,7 @@ struct DrvInfo private: string drvPath; string outPath; + string outputName; bool metaInfoRead; MetaInfo meta; @@ -46,6 +47,7 @@ public: string queryDrvPath(EvalState & state) const; string queryOutPath(EvalState & state) const; + string queryOutputName(EvalState & state) const; MetaInfo queryMetaInfo(EvalState & state) const; MetaValue queryMetaInfo(EvalState & state, const string & name) const; -- cgit 1.4.1