mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 23:36:16 +02:00
Decouple within-build (structured attrs) and unstable CLI path info JSON
See code comment for details. Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
This commit is contained in:
parent
c50e14276e
commit
213a7a87b4
1 changed files with 22 additions and 3 deletions
|
@ -135,18 +135,37 @@ static std::regex shVarName("[A-Za-z_][A-Za-z0-9_]*");
|
||||||
/**
|
/**
|
||||||
* Write a JSON representation of store object metadata, such as the
|
* Write a JSON representation of store object metadata, such as the
|
||||||
* hash and the references.
|
* hash and the references.
|
||||||
|
*
|
||||||
|
* @note Do *not* use `ValidPathInfo::toJSON` because this function is
|
||||||
|
* subject to stronger stability requirements since it is used to
|
||||||
|
* prepare build environments. Perhaps someday we'll have a versionining
|
||||||
|
* mechanism to allow this to evolve again and get back in sync, but for
|
||||||
|
* now we must not change - not even extend - the behavior.
|
||||||
*/
|
*/
|
||||||
static nlohmann::json pathInfoToJSON(
|
static nlohmann::json pathInfoToJSON(
|
||||||
Store & store,
|
Store & store,
|
||||||
const StorePathSet & storePaths)
|
const StorePathSet & storePaths)
|
||||||
{
|
{
|
||||||
nlohmann::json::array_t jsonList = nlohmann::json::array();
|
using nlohmann::json;
|
||||||
|
|
||||||
|
nlohmann::json::array_t jsonList = json::array();
|
||||||
|
|
||||||
for (auto & storePath : storePaths) {
|
for (auto & storePath : storePaths) {
|
||||||
auto info = store.queryPathInfo(storePath);
|
auto info = store.queryPathInfo(storePath);
|
||||||
|
|
||||||
auto & jsonPath = jsonList.emplace_back(
|
auto & jsonPath = jsonList.emplace_back(json::object());
|
||||||
info->toJSON(store, false, HashFormat::Nix32));
|
|
||||||
|
jsonPath["narHash"] = info->narHash.to_string(HashFormat::Nix32, true);
|
||||||
|
jsonPath["narSize"] = info->narSize;
|
||||||
|
|
||||||
|
{
|
||||||
|
auto & jsonRefs = jsonPath["references"] = json::array();
|
||||||
|
for (auto & ref : info->references)
|
||||||
|
jsonRefs.emplace_back(store.printStorePath(ref));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info->ca)
|
||||||
|
jsonPath["ca"] = renderContentAddress(info->ca);
|
||||||
|
|
||||||
// Add the path to the object whose metadata we are including.
|
// Add the path to the object whose metadata we are including.
|
||||||
jsonPath["path"] = store.printStorePath(storePath);
|
jsonPath["path"] = store.printStorePath(storePath);
|
||||||
|
|
Loading…
Reference in a new issue