mirror of
https://github.com/NixOS/nix.git
synced 2025-12-20 16:01:07 +01:00
JSON for Hash now has to be Base16
Fix #14532. As discussed on the call today: 1. We'll stick with `format = "base16"` and `hash = "<hash>"`, not do `base16 = "<hash>"`, in order to be forward compatible with supporting more versioning formats. The motivation we discussed for someday *possibly* doing this is making it easier to write very slap-dash lang2nix tools that create (not consume) derivations with dynamic derivations. 2. We will remove support for non-base16 (and make that the default, not base64) in `Hash`, so this is strictly forward contingency, *not* yet something we support. (And also not something we have concrete plans to start supporting.)
This commit is contained in:
parent
5b95745bc9
commit
bec3c5cfcd
36 changed files with 141 additions and 162 deletions
|
|
@ -508,7 +508,14 @@ Hash adl_serializer<Hash>::from_json(const json & json, const ExperimentalFeatur
|
|||
{
|
||||
auto & obj = getObject(json);
|
||||
auto algo = parseHashAlgo(getString(valueAt(obj, "algorithm")), xpSettings);
|
||||
auto format = parseHashFormat(getString(valueAt(obj, "format")));
|
||||
auto formatStr = getString(valueAt(obj, "format"));
|
||||
auto format = parseHashFormat(formatStr);
|
||||
|
||||
// Only base16 format is supported for JSON serialization
|
||||
if (format != HashFormat::Base16) {
|
||||
throw Error("hash format '%s' is not supported in JSON; only 'base16' is currently supported", formatStr);
|
||||
}
|
||||
|
||||
auto & hashS = getString(valueAt(obj, "hash"));
|
||||
return Hash::parseExplicitFormatUnprefixed(hashS, algo, format, xpSettings);
|
||||
}
|
||||
|
|
@ -516,9 +523,9 @@ Hash adl_serializer<Hash>::from_json(const json & json, const ExperimentalFeatur
|
|||
void adl_serializer<Hash>::to_json(json & json, const Hash & hash)
|
||||
{
|
||||
json = {
|
||||
{"format", printHashFormat(HashFormat::Base64)},
|
||||
{"format", printHashFormat(HashFormat::Base16)},
|
||||
{"algorithm", printHashAlgo(hash.algo)},
|
||||
{"hash", hash.to_string(HashFormat::Base64, false)},
|
||||
{"hash", hash.to_string(HashFormat::Base16, false)},
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue