forked from lix-project/lix
nix path-info: Don't barf on invalid paths
Now you get [ { "path": "/nix/store/fzvliz4j5xzvnd0w5zgw2l0ksqh578yk-bla", "valid": false } ]
This commit is contained in:
parent
6438ba22af
commit
3908d3929c
|
@ -455,49 +455,55 @@ string Store::makeValidityRegistration(const PathSet & paths,
|
||||||
|
|
||||||
|
|
||||||
void Store::pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths,
|
void Store::pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths,
|
||||||
bool includeImpureInfo, bool showClosureSize)
|
bool includeImpureInfo, bool showClosureSize, AllowInvalidFlag allowInvalid)
|
||||||
{
|
{
|
||||||
auto jsonList = jsonOut.list();
|
auto jsonList = jsonOut.list();
|
||||||
|
|
||||||
for (auto storePath : storePaths) {
|
for (auto storePath : storePaths) {
|
||||||
auto info = queryPathInfo(storePath);
|
|
||||||
storePath = info->path;
|
|
||||||
|
|
||||||
auto jsonPath = jsonList.object();
|
auto jsonPath = jsonList.object();
|
||||||
jsonPath
|
jsonPath.attr("path", storePath);
|
||||||
.attr("path", storePath)
|
|
||||||
.attr("narHash", info->narHash.to_string())
|
|
||||||
.attr("narSize", info->narSize);
|
|
||||||
|
|
||||||
{
|
try {
|
||||||
auto jsonRefs = jsonPath.list("references");
|
auto info = queryPathInfo(storePath);
|
||||||
for (auto & ref : info->references)
|
storePath = info->path;
|
||||||
jsonRefs.elem(ref);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (info->ca != "")
|
jsonPath
|
||||||
jsonPath.attr("ca", info->ca);
|
.attr("narHash", info->narHash.to_string())
|
||||||
|
.attr("narSize", info->narSize);
|
||||||
|
|
||||||
if (showClosureSize)
|
{
|
||||||
jsonPath.attr("closureSize", getClosureSize(storePath));
|
auto jsonRefs = jsonPath.list("references");
|
||||||
|
for (auto & ref : info->references)
|
||||||
if (includeImpureInfo) {
|
jsonRefs.elem(ref);
|
||||||
|
|
||||||
if (info->deriver != "")
|
|
||||||
jsonPath.attr("deriver", info->deriver);
|
|
||||||
|
|
||||||
if (info->registrationTime)
|
|
||||||
jsonPath.attr("registrationTime", info->registrationTime);
|
|
||||||
|
|
||||||
if (info->ultimate)
|
|
||||||
jsonPath.attr("ultimate", info->ultimate);
|
|
||||||
|
|
||||||
if (!info->sigs.empty()) {
|
|
||||||
auto jsonSigs = jsonPath.list("signatures");
|
|
||||||
for (auto & sig : info->sigs)
|
|
||||||
jsonSigs.elem(sig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (info->ca != "")
|
||||||
|
jsonPath.attr("ca", info->ca);
|
||||||
|
|
||||||
|
if (showClosureSize)
|
||||||
|
jsonPath.attr("closureSize", getClosureSize(storePath));
|
||||||
|
|
||||||
|
if (includeImpureInfo) {
|
||||||
|
|
||||||
|
if (info->deriver != "")
|
||||||
|
jsonPath.attr("deriver", info->deriver);
|
||||||
|
|
||||||
|
if (info->registrationTime)
|
||||||
|
jsonPath.attr("registrationTime", info->registrationTime);
|
||||||
|
|
||||||
|
if (info->ultimate)
|
||||||
|
jsonPath.attr("ultimate", info->ultimate);
|
||||||
|
|
||||||
|
if (!info->sigs.empty()) {
|
||||||
|
auto jsonSigs = jsonPath.list("signatures");
|
||||||
|
for (auto & sig : info->sigs)
|
||||||
|
jsonSigs.elem(sig);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (InvalidPath &) {
|
||||||
|
jsonPath.attr("valid", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ class JSONPlaceholder;
|
||||||
enum RepairFlag : bool { NoRepair = false, Repair = true };
|
enum RepairFlag : bool { NoRepair = false, Repair = true };
|
||||||
enum CheckSigsFlag : bool { NoCheckSigs = false, CheckSigs = true };
|
enum CheckSigsFlag : bool { NoCheckSigs = false, CheckSigs = true };
|
||||||
enum SubstituteFlag : bool { NoSubstitute = false, Substitute = true };
|
enum SubstituteFlag : bool { NoSubstitute = false, Substitute = true };
|
||||||
|
enum AllowInvalidFlag : bool { DisallowInvalid = false, AllowInvalid = true };
|
||||||
|
|
||||||
|
|
||||||
/* Size of the hash part of store paths, in base-32 characters. */
|
/* Size of the hash part of store paths, in base-32 characters. */
|
||||||
|
@ -488,7 +489,8 @@ public:
|
||||||
included. If ‘showClosureSize’ is true, the closure size of
|
included. If ‘showClosureSize’ is true, the closure size of
|
||||||
each path is included. */
|
each path is included. */
|
||||||
void pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths,
|
void pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths,
|
||||||
bool includeImpureInfo, bool showClosureSize);
|
bool includeImpureInfo, bool showClosureSize,
|
||||||
|
AllowInvalidFlag allowInvalid = DisallowInvalid);
|
||||||
|
|
||||||
/* Return the size of the closure of the specified path, that is,
|
/* Return the size of the closure of the specified path, that is,
|
||||||
the sum of the size of the NAR serialisation of each path in
|
the sum of the size of the NAR serialisation of each path in
|
||||||
|
|
|
@ -69,7 +69,7 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
|
||||||
store->pathInfoToJSON(jsonRoot,
|
store->pathInfoToJSON(jsonRoot,
|
||||||
// FIXME: preserve order?
|
// FIXME: preserve order?
|
||||||
PathSet(storePaths.begin(), storePaths.end()),
|
PathSet(storePaths.begin(), storePaths.end()),
|
||||||
true, showClosureSize);
|
true, showClosureSize, AllowInvalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in a new issue