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

@ -2,10 +2,12 @@
#include "store-api.hh"
#include "fs-accessor.hh"
#include "nar-accessor.hh"
#include "common-args.hh"
#include "json.hh"
using namespace nix;
struct MixLs : virtual Args
struct MixLs : virtual Args, MixJSON
{
std::string path;
@ -20,7 +22,7 @@ struct MixLs : virtual Args
mkFlag('d', "directory", "show directories rather than their contents", &showDirectory);
}
void list(ref<FSAccessor> accessor)
void listText(ref<FSAccessor> accessor)
{
std::function<void(const FSAccessor::Stat &, const Path &, const std::string &, bool)> doPath;
@ -61,10 +63,6 @@ struct MixLs : virtual Args
showFile(curPath, relPath);
};
if (path == "/") {
path = "";
}
auto st = accessor->stat(path);
if (st.type == FSAccessor::Type::tMissing)
throw Error(format("path '%1%' does not exist") % path);
@ -72,6 +70,17 @@ struct MixLs : virtual Args
st.type == FSAccessor::Type::tDirectory ? "." : baseNameOf(path),
showDirectory);
}
void list(ref<FSAccessor> accessor)
{
if (path == "/") path = "";
if (json) {
JSONPlaceholder jsonRoot(std::cout, true);
listNar(jsonRoot, accessor, path);
} else
listText(accessor);
}
};
struct CmdLsStore : StoreCommand, MixLs