aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-08-26 18:55:55 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-08-29 17:29:24 +0200
commitc0a7b84748d5e27e6804117b8a57ce71269c3c66 (patch)
tree40f22e1dd5636673f764bc1f289ab254971ca95d /src/nix-env
parent9fa21765e7f267efcc65e1aa6ab21402ea6125ad (diff)
nix path-info: Add --json flag
Also, factor out JSON generation from value-to-json.{cc,hh}, and support producing indented JSON.
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/nix-env.cc15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index 955a24661..6a557e8ac 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -10,6 +10,7 @@
#include "store-api.hh"
#include "user-env.hh"
#include "util.hh"
+#include "json.hh"
#include "value-to-json.hh"
#include "xml-writer.hh"
@@ -860,26 +861,24 @@ static VersionDiff compareVersionAgainstSet(
static void queryJSON(Globals & globals, vector<DrvInfo> & elems)
{
- JSONObject topObj(cout);
+ JSONObject topObj(cout, true);
for (auto & i : elems) {
- topObj.attr(i.attrPath);
- JSONObject pkgObj(cout);
+ JSONObject pkgObj = topObj.object(i.attrPath);
pkgObj.attr("name", i.name);
pkgObj.attr("system", i.system);
- pkgObj.attr("meta");
- JSONObject metaObj(cout);
+ JSONObject metaObj = pkgObj.object("meta");
StringSet metaNames = i.queryMetaNames();
for (auto & j : metaNames) {
- metaObj.attr(j);
+ auto placeholder = metaObj.placeholder(j);
Value * v = i.queryMeta(j);
if (!v) {
printMsg(lvlError, format("derivation ‘%1%’ has invalid meta attribute ‘%2%’") % i.name % j);
- cout << "null";
+ placeholder.write(nullptr);
} else {
PathSet context;
- printValueAsJSON(*globals.state, true, *v, cout, context);
+ printValueAsJSON(*globals.state, true, *v, placeholder, context);
}
}
}