summary refs log tree commit diff
path: root/src/nix-instantiate
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-08-03 14:49:57 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-08-03 14:49:57 +0000
commit0e267e2625dba2c771996bcf537d1ebb6956ba58 (patch)
treea6425f8122d391510d021cbb56e629faca04e562 /src/nix-instantiate
parent4750f6c5ed8f74683ebaa013079e24598a753cbe (diff)
downloadguix-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.cc15
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");