diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-03 14:49:57 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-03 14:49:57 +0000 |
commit | 0e267e2625dba2c771996bcf537d1ebb6956ba58 (patch) | |
tree | a6425f8122d391510d021cbb56e629faca04e562 /src/nix-instantiate | |
parent | 4750f6c5ed8f74683ebaa013079e24598a753cbe (diff) | |
download | guix-0e267e2625dba2c771996bcf537d1ebb6956ba58.tar.gz |
* `nix-instantiate --print-args': produce XML output so that the
result can be used more easily by scripts.
Diffstat (limited to 'src/nix-instantiate')
-rw-r--r-- | src/nix-instantiate/main.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index f49615648f..f8b0f3a208 100644 --- a/src/nix-instantiate/main.cc +++ b/src/nix-instantiate/main.cc @@ -10,6 +10,7 @@ #include "nixexpr-ast.hh" #include "get-drvs.hh" #include "attr-path.hh" +#include "xml-writer.hh" #include "help.txt.hh" @@ -40,21 +41,29 @@ static void printResult(EvalState & state, Expr e, cout << format("%1%\n") % e; else if (printArgs) { + XMLWriter doc(cout); + XMLOpenElement root(doc, "args"); + ATermList formals; ATerm body, pos; + if (matchFunction(e, formals, body, pos)) { for (ATermIterator i(formals); i; ++i) { Expr name; ValidValues valids; ATerm dummy; if (!matchFormal(*i, name, valids, dummy)) abort(); - cout << format("%1%: ") % aterm2String(name); + + XMLAttrs attrs; + attrs["name"] = aterm2String(name); + XMLOpenElement elem(doc, "arg", attrs); + ATermList valids2; if (matchValidValues(valids, valids2)) { for (ATermIterator j(valids2); j; ++j) { Expr e = evalExpr(state, *j); - cout << format("%1% ") % showValue(e); + XMLOpenElement elem(doc, "value"); + doc.writeCharData(showValue(e)); } } - cout << format("\n"); } } else printMsg(lvlError, "warning: expression does not evaluate to a function"); |