From 0e267e2625dba2c771996bcf537d1ebb6956ba58 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 3 Aug 2006 14:49:57 +0000 Subject: * `nix-instantiate --print-args': produce XML output so that the result can be used more easily by scripts. --- src/nix-instantiate/main.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/nix-instantiate') diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index f49615648f92..f8b0f3a20846 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"); -- cgit 1.4.1