aboutsummaryrefslogtreecommitdiff
path: root/src/nix-instantiate
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-04-07 15:47:06 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-04-07 15:47:06 +0000
commitaf2a372bb000d4d5aeec37e43ee0f6245c1bba54 (patch)
tree7d92b153b255d64c1db807595c9577a43b77f50d /src/nix-instantiate
parent9a64454faae2ab4ccedeeaad85a0e094726b4765 (diff)
* Update autoCallFunction() and findAlongAttrPath().
Diffstat (limited to 'src/nix-instantiate')
-rw-r--r--src/nix-instantiate/nix-instantiate.cc103
1 files changed, 30 insertions, 73 deletions
diff --git a/src/nix-instantiate/nix-instantiate.cc b/src/nix-instantiate/nix-instantiate.cc
index ebf1be5b9..ac405aa66 100644
--- a/src/nix-instantiate/nix-instantiate.cc
+++ b/src/nix-instantiate/nix-instantiate.cc
@@ -37,80 +37,41 @@ static int rootNr = 0;
static bool indirectRoot = false;
-#if 0
-static void printResult(EvalState & state, Expr e,
- bool evalOnly, bool xmlOutput, const ATermMap & autoArgs)
-{
- PathSet context;
-
- if (evalOnly)
- if (xmlOutput)
- printTermAsXML(e, std::cout, context);
- else
- std::cout << format("%1%\n") % canonicaliseExpr(e);
-
- else {
- DrvInfos drvs;
- getDerivations(state, e, "", autoArgs, drvs);
- for (DrvInfos::iterator i = drvs.begin(); i != drvs.end(); ++i) {
- Path drvPath = i->queryDrvPath(state);
- if (gcRoot == "")
- printGCWarning();
- else
- drvPath = addPermRoot(drvPath,
- makeRootName(gcRoot, rootNr),
- indirectRoot);
- std::cout << format("%1%\n") % drvPath;
- }
- }
-}
-#endif
-
-
void processExpr(EvalState & state, const Strings & attrPaths,
- bool parseOnly, bool strict, const ATermMap & autoArgs,
+ bool parseOnly, bool strict, const Bindings & autoArgs,
bool evalOnly, bool xmlOutput, Expr e)
{
if (parseOnly)
std::cout << format("%1%\n") % canonicaliseExpr(e);
- else {
- Value v;
- PathSet context;
- state.eval(e, v);
- if (evalOnly)
- if (xmlOutput)
- printValueAsXML(state, strict, v, std::cout, context);
+ else
+ foreach (Strings::const_iterator, i, attrPaths) {
+ Value v;
+ findAlongAttrPath(state, *i, autoArgs, e, v);
+ state.forceValue(v);
+
+ PathSet context;
+ if (evalOnly)
+ if (xmlOutput)
+ printValueAsXML(state, strict, v, std::cout, context);
+ else {
+ if (strict) state.strictForceValue(v);
+ std::cout << v << std::endl;
+ }
else {
- if (strict) state.strictForceValue(v);
- std::cout << v << std::endl;
- }
- else {
- DrvInfos drvs;
- getDerivations(state, v, "", autoArgs, drvs);
- foreach (DrvInfos::iterator, i, drvs) {
- Path drvPath = i->queryDrvPath(state);
- if (gcRoot == "")
- printGCWarning();
- else
- drvPath = addPermRoot(drvPath,
- makeRootName(gcRoot, rootNr),
- indirectRoot);
- std::cout << format("%1%\n") % drvPath;
+ DrvInfos drvs;
+ getDerivations(state, v, "", autoArgs, drvs);
+ foreach (DrvInfos::iterator, i, drvs) {
+ Path drvPath = i->queryDrvPath(state);
+ if (gcRoot == "")
+ printGCWarning();
+ else
+ drvPath = addPermRoot(drvPath,
+ makeRootName(gcRoot, rootNr),
+ indirectRoot);
+ std::cout << format("%1%\n") % drvPath;
+ }
}
}
- }
-
-#if 0
- for (Strings::const_iterator i = attrPaths.begin(); i != attrPaths.end(); ++i) {
- Expr e2 = findAlongAttrPath(state, *i, autoArgs, e);
- if (!parseOnly)
- if (strict)
- e2 = state.strictEval(e2);
- else
- e2 = evalExpr(state, e2);
- printResult(state, e2, evalOnly, xmlOutput, autoArgs);
- }
-#endif
}
@@ -124,11 +85,9 @@ void run(Strings args)
bool xmlOutput = false;
bool strict = false;
Strings attrPaths;
- ATermMap autoArgs(128);
+ Bindings autoArgs;
- for (Strings::iterator i = args.begin();
- i != args.end(); )
- {
+ for (Strings::iterator i = args.begin(); i != args.end(); ) {
string arg = *i++;
if (arg == "-")
@@ -175,9 +134,7 @@ void run(Strings args)
evalOnly, xmlOutput, e);
}
- for (Strings::iterator i = files.begin();
- i != files.end(); i++)
- {
+ foreach (Strings::iterator, i, files) {
Path path = absPath(*i);
Expr e = parseExprFromFile(state, path);
processExpr(state, attrPaths, parseOnly, strict, autoArgs,