nix ls-{store,nar}: Add --json flag
This commit is contained in:
parent
c0d93a01ee
commit
bac8055652
4 changed files with 53 additions and 40 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue