-
Notifications
You must be signed in to change notification settings - Fork 382
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add templater support for rendering commit signatures #4853
Conversation
760fda2
to
b000597
Compare
d1a1a72
to
4e6ba53
Compare
Is there anything blocking this PR? It seems to be in a functional state. |
Well, since I simply materialized the changes from @julienvincent and @necauqua, there are still two things missing: Regarding printing hints about dropped signatures, I reached out for help (#4712 (comment), #4712 (comment)). Maybe we could merge without the hints (and create a new issue to track that missing piece to be implemented later)? Then I would focus on getting the docs ready. |
Based on the PR title, I would presume that this PR is focused mainly on being able to display commit signatures. So it seems fine to me if printing hints about dropped commit signatures is shifted to a different issue/PR, since it isn't directly related to displaying commit signatures. |
Sounds good to me. |
4e6ba53
to
f4d1de5
Compare
I pushed a slightly modified version of 739ddf2. However, I believe it was planned to add a
@necauqua, originally this was your work, I think. Was it planned to add |
b59be44
to
8a8e8b5
Compare
@julienvincent, I added you as co-author to the commits. Would you like to provide the email address you used to sign the CLA, so I can add you as a co-author? |
Thanks for attribution - I just went ahead and signed the CLA for the email address you used. I reran the check which is now passing 👍🏻 |
64de0ae
to
48b66cf
Compare
All right, not daring to mention the words "final" or "last", but this is ready for review again. |
48b66cf
to
3a91ed9
Compare
We need to make `TestSigningBackend` available for cli tests, as we will add cli tests for signing related functionality (templates for displaying commit signatures, `jj sign`) in upcoming commits. Co-authored-by: julienvincent <[email protected]>
3a91ed9
to
57de8e8
Compare
We need to provide a value for the `display` attribute to assert against in upcoming tests, which verify signature templates.
49cf42a
to
61467cc
Compare
Disclaimer: this is the work of @necauqua and @julienvincent (see jj-vcs#3141). I simply materialized the changes by rebasing them on latest `main` and making the necessary adjustments to pass CI. --- I had to fix an issue in `TestSignatureBackend::sign()`. The following test was failing: ``` ---- test_signature_templates::test_signature_templates stdout ---- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot: signature_templates Source: cli/tests/test_signature_templates.rs:28 ──────────────────────────────────────────────────────────────────────────────── Expression: stdout ──────────────────────────────────────────────────────────────────────────────── -old snapshot +new results ────────────┬─────────────────────────────────────────────────────────────────── 0 0 │ @ Commit ID: 05ac066d05701071af20e77506a0f2195194cbc9 1 1 │ │ Change ID: qpvuntsmwlqtpsluzzsnyyzlmlwvmlnu 2 2 │ │ Author: Test User <[email protected]> (2001-02-03 08:05:07) 3 3 │ │ Committer: Test User <[email protected]> (2001-02-03 08:05:07) 4 │-│ Signature: Good test signature 4 │+│ Signature: Bad test signature 5 5 │ │ 6 6 │ │ (no description set) 7 7 │ │ 8 8 │ ◆ Commit ID: 0000000000000000000000000000000000000000 ────────────┴─────────────────────────────────────────────────────────────────── ``` Print debugging revealed that the signature was bad, because of a missing trailing `\n` in `TestSignatureBackend::sign()`. ```diff diff --git a/lib/src/test_signing_backend.rs b/lib/src/test_signing_backend.rs index d47fef1086..0ba249e358 100644 --- a/lib/src/test_signing_backend.rs +++ b/lib/src/test_signing_backend.rs @@ -59,6 +59,8 @@ let key = (!key.is_empty()).then_some(std::str::from_utf8(key).unwrap().to_owned()); let sig = self.sign(data, key.as_deref())?; + dbg!(&std::str::from_utf8(&signature).unwrap()); + dbg!(&std::str::from_utf8(&sig).unwrap()); if sig == signature { Ok(Verification::new( SigStatus::Good, ``` ``` [lib/src/test_signing_backend.rs:62:9] &std::str::from_utf8(&signature).unwrap() = \"--- JJ-TEST-SIGNATURE ---\\nKEY: \\n5300977ff3ecda4555bd86d383b070afac7b7459c07f762af918943975394a8261d244629e430c8554258904f16dd9c18d737f8969f2e7d849246db0d93cc004\\n\" [lib/src/test_signing_backend.rs:63:9] &std::str::from_utf8(&sig).unwrap() = \"--- JJ-TEST-SIGNATURE ---\\nKEY: \\n5300977ff3ecda4555bd86d383b070afac7b7459c07f762af918943975394a8261d244629e430c8554258904f16dd9c18d737f8969f2e7d849246db0d93cc004\" ``` Thankfully, @yuja pointed out that libgit2 appends a trailing newline (see bfb7613). Co-authored-by: necauqua <[email protected]> Co-authored-by: julienvincent <[email protected]>
61467cc
to
d8bffee
Compare
@yuja, thanks again! |
Oh, the invitation email might be missing or filtered as spam. Mine was received on "Dec 20, 2024", so it would be expired anyway. cc @martinvonz |
I've sent a new invitation now, @pylbrecht |
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [template-aliases] 'should_show_cryptographic_signature()' = 'true' 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [template-aliases] 'should_show_cryptographic_signature()' = 'true' 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [template-aliases] 'should_show_cryptographic_signature()' = 'true' 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override the `should_show_cryptographic_signature()` template alias like so: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override `ui.show-cryptographic-signatures`: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
Cryptographic signature support in templates was added in c99c97c (#4853), but has to be manually configured. This adds some defaults to the built-in config. Instead of having separate `builtin_*_with_sig` aliases, this adds to the aliases that actually format commits. Since signature verification is slow, this is disabled by default. To enable it, override `ui.show-cryptographic-signatures`: [ui] show-cryptographic-signatures = true [template-aliases] 'format_short_cryptographic_signature(signature)' = ... 'format_detailed_cryptographic_signature(signature)' = ... Note that the two formatting functions take `Option<CryptographicSignature>`, not `CryptographicSignature`. This allows you to display a custom message if a signature is not found, but will emit an error if you do not check for signature presence. [template-aliases] 'format_detailed_cryptographic_signature(signature)' = ''' if(signature, "message if present", "message if missing", ) '''
These changes are continuing the work of #3141.
I took over its changes and rebased them on latest
main
.This work is required for #4747, as it lays the foundation for writing CLI tests for
jj sign
.Checklist
If applicable:
CHANGELOG.md
I have updated the config schema (cli/src/config-schema.json)