Skip to content

Commit 2b0ffc1

Browse files
committed
correctly add allowedReferences etc.
create new utility function `nullableValueAt`
1 parent d4809b4 commit 2b0ffc1

8 files changed

Lines changed: 28 additions & 6 deletions

File tree

src/libstore/derivations.cc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "common-protocol-impl.hh"
1313
#include <boost/container/small_vector.hpp>
1414
#include <nlohmann/json.hpp>
15+
#include <optional>
1516

1617
namespace nix {
1718

@@ -1512,10 +1513,10 @@ DerivationOptions adl_serializer<DerivationOptions>::from_json(const json & json
15121513
res.impureEnvVars = getStringList(valueAt(json, "impureEnvVars"));
15131514
res.allowLocalNetworking = getBoolean(valueAt(json, "allowLocalNetworking"));
15141515

1515-
res.allowedReferences = optionalValueAt(json, "allowedReferences");
1516-
res.allowedRequisites = optionalValueAt(json, "allowedRequisites");
1517-
res.disallowedReferences = optionalValueAt(json, "disallowedReferences");
1518-
res.disallowedRequisites = optionalValueAt(json, "disallowedRequisites");
1516+
res.allowedReferences = nullableValueAt(json, "allowedReferences");
1517+
res.allowedRequisites = nullableValueAt(json, "allowedRequisites");
1518+
res.disallowedReferences = nullableValueAt(json, "disallowedReferences");
1519+
res.disallowedRequisites = nullableValueAt(json, "disallowedRequisites");
15191520

15201521
res.requiredSystemFeatures = getStringList(valueAt(json, "requiredSystemFeatures"));
15211522
res.preferLocalBuild = getBoolean(valueAt(json, "preferLocalBuild"));
@@ -1531,8 +1532,8 @@ void adl_serializer<DerivationOptions>::to_json(json & json, DerivationOptions o
15311532
json["impureEnvVars"] = o.impureEnvVars;
15321533
json["allowLocalNetworking"] = o.allowLocalNetworking;
15331534

1534-
json["disallowedReferences"] = o.allowedReferences;
1535-
json["disallowedRequisites"] = o.allowedRequisites;
1535+
json["allowedReferences"] = o.allowedReferences;
1536+
json["allowedRequisites"] = o.allowedRequisites;
15361537
json["disallowedReferences"] = o.disallowedReferences;
15371538
json["disallowedRequisites"] = o.disallowedRequisites;
15381539

src/libutil/json-utils.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "types.hh"
44
#include <nlohmann/json_fwd.hpp>
55
#include <iostream>
6+
#include <optional>
67

78
namespace nix {
89

@@ -38,6 +39,15 @@ std::optional<nlohmann::json> optionalValueAt(const nlohmann::json::object_t & m
3839
return std::optional { map.at(key) };
3940
}
4041

42+
std::optional<nlohmann::json> nullableValueAt(const nlohmann::json::object_t & map, const std::string & key)
43+
{
44+
auto value = valueAt(map, key);
45+
46+
if (value.is_null())
47+
return std::nullopt;
48+
49+
return std::optional { std::move(value) };
50+
}
4151

4252
const nlohmann::json * getNullable(const nlohmann::json & value)
4353
{

src/libutil/json-utils.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const nlohmann::json & valueAt(
2424
const std::string & key);
2525

2626
std::optional<nlohmann::json> optionalValueAt(const nlohmann::json::object_t & value, const std::string & key);
27+
std::optional<nlohmann::json> nullableValueAt(const nlohmann::json::object_t & value, const std::string & key);
2728

2829
/**
2930
* Downcast the json object, failing with a nice error if the conversion fails.

tests/unit/libstore/data/derivation/advanced-attributes-defaults.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
"additionalSandboxProfile": "",
1818
"allowLocalNetworking": false,
1919
"allowSubstitutes": true,
20+
"allowedReferences": null,
21+
"allowedRequisites": null,
2022
"disallowedReferences": null,
2123
"disallowedRequisites": null,
2224
"impureEnvVars": [],

tests/unit/libstore/data/derivation/advanced-attributes-structured-attrs-defaults.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
"additionalSandboxProfile": "",
1717
"allowLocalNetworking": false,
1818
"allowSubstitutes": true,
19+
"allowedReferences": null,
20+
"allowedRequisites": null,
1921
"disallowedReferences": null,
2022
"disallowedRequisites": null,
2123
"impureEnvVars": [],

tests/unit/libstore/data/derivation/advanced-attributes-structured-attrs.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
"additionalSandboxProfile": "sandcastle",
3131
"allowLocalNetworking": true,
3232
"allowSubstitutes": false,
33+
"allowedReferences": null,
34+
"allowedRequisites": null,
3335
"disallowedReferences": null,
3436
"disallowedRequisites": null,
3537
"impureEnvVars": [

tests/unit/libstore/data/derivation/dynDerivationDeps.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
"additionalSandboxProfile": "",
3838
"allowLocalNetworking": false,
3939
"allowSubstitutes": true,
40+
"allowedReferences": null,
41+
"allowedRequisites": null,
4042
"disallowedReferences": null,
4143
"disallowedRequisites": null,
4244
"impureEnvVars": [],

tests/unit/libstore/data/derivation/simple.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
"additionalSandboxProfile": "",
2525
"allowLocalNetworking": false,
2626
"allowSubstitutes": true,
27+
"allowedReferences": null,
28+
"allowedRequisites": null,
2729
"disallowedReferences": null,
2830
"disallowedRequisites": null,
2931
"impureEnvVars": [],

0 commit comments

Comments
 (0)