Merge pull request #10021 from obsidiansystems/ca-type-names

Make `outputHashAlgo` accept `"nar"`, stay in sync
This commit is contained in:
Eelco Dolstra 2024-04-09 23:06:43 +02:00 committed by GitHub
commit 3fd8dfec4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 24 additions and 11 deletions

View file

@ -207,12 +207,17 @@ Derivations can declare some infrequently used optional attributes.
This is the default. This is the default.
- `"recursive"`\ - `"recursive"` or `"nar"`\
The hash is computed over the NAR archive dump of the output The hash is computed over the [NAR archive](@docroot@/glossary.md#gloss-nar) dump of the output
(i.e., the result of [`nix-store --dump`](@docroot@/command-ref/nix-store/dump.md)). In (i.e., the result of [`nix-store --dump`](@docroot@/command-ref/nix-store/dump.md)). In
this case, the output can be anything, including a directory this case, the output can be anything, including a directory
tree. tree.
`"recursive"` is the traditional way of indicating this,
and is supported since 2005 (virtually the entire history of Nix).
`"nar"` is more clear, and consistent with other parts of Nix (such as the CLI),
however support for it is only added in Nix version 2.21.
- [`__contentAddressed`]{#adv-attr-__contentAddressed} - [`__contentAddressed`]{#adv-attr-__contentAddressed}
> **Warning** > **Warning**
> This attribute is part of an [experimental feature](@docroot@/contributing/experimental-features.md). > This attribute is part of an [experimental feature](@docroot@/contributing/experimental-features.md).

View file

@ -1139,18 +1139,20 @@ drvName, Bindings * attrs, Value & v)
vomit("processing attribute '%1%'", key); vomit("processing attribute '%1%'", key);
auto handleHashMode = [&](const std::string_view s) { auto handleHashMode = [&](const std::string_view s) {
if (s == "recursive") ingestionMethod = FileIngestionMethod::Recursive; if (s == "recursive") {
else if (s == "flat") ingestionMethod = FileIngestionMethod::Flat; // back compat, new name is "nar"
else if (s == "git") { ingestionMethod = FileIngestionMethod::Recursive;
experimentalFeatureSettings.require(Xp::GitHashing); } else try {
ingestionMethod = FileIngestionMethod::Git; ingestionMethod = ContentAddressMethod::parse(s);
} else if (s == "text") { } catch (UsageError &) {
experimentalFeatureSettings.require(Xp::DynamicDerivations);
ingestionMethod = TextIngestionMethod {};
} else
state.error<EvalError>( state.error<EvalError>(
"invalid value '%s' for 'outputHashMode' attribute", s "invalid value '%s' for 'outputHashMode' attribute", s
).atPos(v).debugThrow(); ).atPos(v).debugThrow();
}
if (ingestionMethod == TextIngestionMethod {})
experimentalFeatureSettings.require(Xp::DynamicDerivations);
if (ingestionMethod == FileIngestionMethod::Git)
experimentalFeatureSettings.require(Xp::GitHashing);
}; };
auto handleOutputs = [&](const Strings & ss) { auto handleOutputs = [&](const Strings & ss) {

View file

@ -64,4 +64,6 @@ rec {
(f2 "bar" ./fixed.builder2.sh "recursive" "md5" "3670af73070fa14077ad74e0f5ea4e42") (f2 "bar" ./fixed.builder2.sh "recursive" "md5" "3670af73070fa14077ad74e0f5ea4e42")
]; ];
# Can use "nar" instead of "recursive" now.
nar-not-recursive = f2 "foo" ./fixed.builder2.sh "nar" "md5" "3670af73070fa14077ad74e0f5ea4e42";
} }

View file

@ -61,3 +61,7 @@ out3=$(nix-store --add-fixed --recursive sha256 $TEST_ROOT/fixed)
out4=$(nix-store --print-fixed-path --recursive sha256 "1ixr6yd3297ciyp9im522dfxpqbkhcw0pylkb2aab915278fqaik" fixed) out4=$(nix-store --print-fixed-path --recursive sha256 "1ixr6yd3297ciyp9im522dfxpqbkhcw0pylkb2aab915278fqaik" fixed)
[ "$out" = "$out4" ] [ "$out" = "$out4" ]
# Can use `outputHashMode = "nar";` instead of `"recursive"` now.
clearStore
nix-build fixed.nix -A nar-not-recursive --no-out-link