mirror of
https://github.com/NixOS/nix.git
synced 2025-11-21 01:39:36 +01:00
exportReferencesGraph: Handle heterogeneous arrays
This barfed with error: [json.exception.type_error.302] type must be string, but is array on `nix build github:malt3/bazel-env#bazel-env` because it has a `exportReferencesGraph` with a value like `["string",...["string"]]`.
This commit is contained in:
parent
090f7fb05e
commit
94f410b628
3 changed files with 20 additions and 9 deletions
|
|
@ -99,6 +99,17 @@ DerivationOptions DerivationOptions::fromStructuredAttrs(
|
|||
return fromStructuredAttrs(env, parsed ? &*parsed : nullptr);
|
||||
}
|
||||
|
||||
static void flatten(const nlohmann::json & value, StringSet & res)
|
||||
{
|
||||
if (value.is_array())
|
||||
for (auto & v : value)
|
||||
flatten(v, res);
|
||||
else if (value.is_string())
|
||||
res.insert(value);
|
||||
else
|
||||
throw Error("'exportReferencesGraph' value is not an array or a string");
|
||||
}
|
||||
|
||||
DerivationOptions
|
||||
DerivationOptions::fromStructuredAttrs(const StringMap & env, const StructuredAttrs * parsed, bool shouldWarn)
|
||||
{
|
||||
|
|
@ -219,12 +230,9 @@ DerivationOptions::fromStructuredAttrs(const StringMap & env, const StructuredAt
|
|||
if (!e || !e->is_object())
|
||||
return ret;
|
||||
for (auto & [key, value] : getObject(*e)) {
|
||||
if (value.is_array())
|
||||
ret.insert_or_assign(key, value);
|
||||
else if (value.is_string())
|
||||
ret.insert_or_assign(key, StringSet{value});
|
||||
else
|
||||
throw Error("'exportReferencesGraph' value is not an array or a string");
|
||||
StringSet ss;
|
||||
flatten(value, ss);
|
||||
ret.insert_or_assign(key, std::move(ss));
|
||||
}
|
||||
} else {
|
||||
auto s = getOr(env, "exportReferencesGraph", "");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue