Skip to content

Commit

Permalink
Add docs/rl-notes for nix hash convert / builtins.convertHash
Browse files Browse the repository at this point in the history
  • Loading branch information
kolloch committed Dec 6, 2023
1 parent 7ff876b commit 8afeaf0
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 5 deletions.
22 changes: 22 additions & 0 deletions doc/manual/rl-next/hash-format-nix32.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
synopsis: Rename hash format `base32` to `nix32`
prs: #9452
description: {

Hash format `base32` was renamed to `nix32` since it used a special nix-specific character set for
[Base32](https://en.wikipedia.org/wiki/Base32).

## Deprecation: Use `nix32` instead of `base32` as `toHashFormat`

For the builtin `convertHash`, the `toHashFormat` parameter now accepts the same hash formats as the `--to`/`--from`
parameters of the `nix hash conert` command: `"base16"`, `"nix32"`, `"base64"`, and `"sri"`. The former `"base32"` value
remains as a deprecated alias for `"base32"`. Please convert your code from:

```nix
builtins.convertHash { inherit hash hashAlgo; toHashFormat = "base32";}
```

to

```nix
builtins.convertHash { inherit hash hashAlgo; toHashFormat = "nix32";}
```
47 changes: 47 additions & 0 deletions doc/manual/rl-next/nix-hash-convert.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
synopsis: Add `nix hash convert`
prs: #9452
description: {

New [`nix hash convert`](https://github.com/NixOS/nix/issues/8876) sub command with a fast track
to stabilization! Examples:

- Convert the hash to `nix32`.

```bash
$ nix hash convert --algo "sha1" --to nix32 "800d59cfcd3c05e900cb4e214be48f6b886a08df"
vw46m23bizj4n8afrc0fj19wrp7mj3c0
```
`nix32` is a base32 encoding with a nix-specific character set.
Explicitly specify the hashing algorithm (optional with SRI hashes) but detect hash format by the length of the input
hash.
- Convert the hash to the `sri` format that includes an algorithm specification:
```bash
nix hash convert --algo "sha1" "800d59cfcd3c05e900cb4e214be48f6b886a08df"
sha1-gA1Zz808BekAy04hS+SPa4hqCN8=
```
or with an explicit `-to` format:
```bash
nix hash convert --algo "sha1" --to sri "800d59cfcd3c05e900cb4e214be48f6b886a08df"
sha1-gA1Zz808BekAy04hS+SPa4hqCN8=
```
- Assert the input format of the hash:
```bash
nix hash convert --algo "sha256" --from nix32 "ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0="
error: input hash 'ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=' does not have the expected format '--from nix32'
nix hash convert --algo "sha256" --from nix32 "1b8m03r63zqhnjf7l5wnldhh7c134ap5vpj0850ymkq1iyzicy5s"
sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
```

The `--to`/`--from`/`--algo` parameters have context-sensitive auto-completion.

## Related Deprecations

The following commands are still available but will emit a deprecation warning. Please convert your code to
`nix hash convert`:

- `nix hash to-base16 $hash1 $hash2`: Use `nix hash convert --to base16 $hash1 $hash2` instead.
- `nix hash to-base32 $hash1 $hash2`: Use `nix hash convert --to nix32 $hash1 $hash2` instead.
- `nix hash to-base64 $hash1 $hash2`: Use `nix hash convert --to base64 $hash1 $hash2` instead.
- `nix hash to-sri $hash1 $hash2`: : Use `nix hash convert --to sri $hash1 $hash2`
or even just `nix hash convert $hash1 $hash2` instead.
}
8 changes: 4 additions & 4 deletions src/libexpr/primops.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1339,7 +1339,7 @@ drvName, Bindings * attrs, Value & v)
.errPos = state.positions[noPos]
});

auto ht = parseHashAlgoOpt(outputHashAlgo).value_or(HashAlgorithm::SHA256);
auto ha = parseHashAlgoOpt(outputHashAlgo).value_or(HashAlgorithm::SHA256);
auto method = ingestionMethod.value_or(FileIngestionMethod::Recursive);

for (auto & i : outputs) {
Expand All @@ -1348,13 +1348,13 @@ drvName, Bindings * attrs, Value & v)
drv.outputs.insert_or_assign(i,
DerivationOutput::Impure {
.method = method,
.hashAlgo = ht,
.hashAlgo = ha,
});
else
drv.outputs.insert_or_assign(i,
DerivationOutput::CAFloating {
.method = method,
.hashAlgo = ht,
.hashAlgo = ha,
});
}
}
Expand Down Expand Up @@ -3837,7 +3837,7 @@ static RegisterPrimOp primop_convertHash({
The format of the resulting hash. Must be one of
- `"base16"`
- `"base32"`
- `"nix32"`
- `"base64"`
- `"sri"`
Expand Down
2 changes: 1 addition & 1 deletion src/nix/hash.cc
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ struct CmdToBase : Command

std::string description() override
{
return fmt("convert a hash to %s representation",
return fmt("convert a hash to %s representation (deprecated, use `nix hash convert` instead)",
hashFormat == HashFormat::Base16 ? "base-16" :
hashFormat == HashFormat::Nix32 ? "base-32" :
hashFormat == HashFormat::Base64 ? "base-64" :
Expand Down

0 comments on commit 8afeaf0

Please sign in to comment.