1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-18 00:12:43 +01:00

nix ls-{store,nar}: Add --json flag

This commit is contained in:
Eelco Dolstra 2017-11-14 14:23:53 +01:00
parent c0d93a01ee
commit bac8055652
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
4 changed files with 53 additions and 40 deletions

View file

@ -1,5 +1,6 @@
#include "nar-accessor.hh"
#include "archive.hh"
#include "json.hh"
#include <map>
#include <stack>
@ -181,4 +182,36 @@ ref<FSAccessor> makeNarAccessor(ref<const std::string> nar)
return make_ref<NarAccessor>(nar);
}
void listNar(JSONPlaceholder & res, ref<FSAccessor> accessor, const Path & path)
{
auto st = accessor->stat(path);
auto obj = res.object();
switch (st.type) {
case FSAccessor::Type::tRegular:
obj.attr("type", "regular");
obj.attr("size", st.fileSize);
if (st.isExecutable)
obj.attr("executable", true);
break;
case FSAccessor::Type::tDirectory:
obj.attr("type", "directory");
{
auto res2 = obj.object("entries");
for (auto & name : accessor->readDirectory(path)) {
auto res3 = res2.placeholder(name);
listNar(res3, accessor, path + "/" + name);
}
}
break;
case FSAccessor::Type::tSymlink:
obj.attr("type", "symlink");
obj.attr("target", accessor->readLink(path));
break;
default:
abort();
}
}
}