* [PATCH v2 1/2] pretty: add X-Change-ID to mail formats
@ 2025-07-03 11:29 Drew DeVault
2025-07-03 11:29 ` [PATCH v2 2/2] am: import X-Change-ID from email headers Drew DeVault
` (3 more replies)
0 siblings, 4 replies; 17+ messages in thread
From: Drew DeVault @ 2025-07-03 11:29 UTC (permalink / raw)
To: git
Cc: Drew DeVault, Martin von Zweigbergk, Patrick Steinhardt,
Andy Koppe, Remo Senekowitsch
Introduce the X-Change-ID header to emails prepared by git (i.e. via
format-patch, send-email). This allows tools which work with those
emails (e.g. patchwork, sourcehut) to meaningfully integrate with tools
that assign change IDs to commits.
With some follow-up work, this is also the first step towards ensuring
that those change IDs are preserved through from git-send-email to
git-am as a change moves through its review lifecycle.
Signed-off-by: Drew DeVault <drew@ddevault.org>
---
v2 is unchanged from v1.
One remark that occurs to me upon spinning v2 is that I'm not sure how
to test this behavior. There is no obvious way to cause git upstream to
produce a commit with a change-id -- presently these are only ever added
by third-party tools.
pretty.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/pretty.c b/pretty.c
index 0bc8ad8a9a..70fba7b023 100644
--- a/pretty.c
+++ b/pretty.c
@@ -2045,7 +2045,7 @@ static void pp_header(struct pretty_print_context *pp,
int parents_shown = 0;
for (;;) {
- const char *name, *line = *msg_p;
+ const char *name, *change_id, *line = *msg_p;
int linelen = get_one_line(*msg_p);
if (!linelen)
@@ -2089,6 +2089,11 @@ static void pp_header(struct pretty_print_context *pp,
strbuf_grow(sb, linelen + 80);
pp_user_info(pp, "Commit", sb, name, encoding);
}
+ if (skip_prefix(line, "change-id ", &change_id) &&
+ cmit_fmt_is_mail(pp->fmt)) {
+ strbuf_addf(sb, "X-Change-ID: %.*s\n",
+ linelen - 11, change_id);
+ }
}
}
--
2.50.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 2/2] am: import X-Change-ID from email headers 2025-07-03 11:29 [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Drew DeVault @ 2025-07-03 11:29 ` Drew DeVault 2025-07-06 3:37 ` [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Jeff King ` (2 subsequent siblings) 3 siblings, 0 replies; 17+ messages in thread From: Drew DeVault @ 2025-07-03 11:29 UTC (permalink / raw) To: git Cc: Drew DeVault, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch When parsing emails formatted by git-send-email which include a change-id commit header, the change-id is written as X-Change-ID to the mail headers. This change causes git-am to grab the X-Change-ID email header and write it to the commit header as change-id. This completes the loop to ensure that sending and receiving patches via email preserves the change-id header, if present. Signed-off-by: Drew DeVault <drew@ddevault.org> --- I'm pretty sure I got all of the lifecycle details including --resume correct, but I would appreciate a second set of eyes. Also not sure how to test this one, though this time it's less because of any fundamental limitations and has more to do with me not really understanding the test suite design. Perfectly acceptable for reviewers to insist on a v3 which adds the necessary tests but I will wait to endure that headache until some more discussion lands on this proposal in general. builtin/am.c | 46 ++++++++++++++++++++++++++++++++++++++++++---- mailinfo.c | 4 +++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/builtin/am.c b/builtin/am.c index a800003340..04cc9ef581 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -119,6 +119,7 @@ struct am_state { char *author_name; char *author_email; char *author_date; + char *change_id; char *msg; size_t msg_len; @@ -186,6 +187,7 @@ static void am_state_release(struct am_state *state) free(state->author_name); free(state->author_email); free(state->author_date); + free(state->change_id); free(state->msg); strvec_clear(&state->git_apply_opts); } @@ -408,6 +410,11 @@ static void am_load(struct am_state *state) read_commit_msg(state); + if (read_state_file(&sb, state, "change-id", 1) != -1) { + assert(!state->change_id); + state->change_id = strbuf_detach(&sb, NULL); + } + if (read_state_file(&sb, state, "original-commit", 1) < 0) oidclr(&state->orig_commit, the_repository->hash_algo); else if (get_oid_hex(sb.buf, &state->orig_commit) < 0) @@ -1119,11 +1126,13 @@ static void am_next(struct am_state *state) FREE_AND_NULL(state->author_name); FREE_AND_NULL(state->author_email); FREE_AND_NULL(state->author_date); + FREE_AND_NULL(state->change_id); FREE_AND_NULL(state->msg); state->msg_len = 0; unlink(am_path(state, "author-script")); unlink(am_path(state, "final-commit")); + unlink(am_path(state, "change-id")); oidclr(&state->orig_commit, the_repository->hash_algo); unlink(am_path(state, "original-commit")); @@ -1210,6 +1219,7 @@ static int parse_mail(struct am_state *state, const char *mail) struct strbuf author_name = STRBUF_INIT; struct strbuf author_date = STRBUF_INIT; struct strbuf author_email = STRBUF_INIT; + struct strbuf change_id = STRBUF_INIT; int ret = 0; struct mailinfo mi; @@ -1288,6 +1298,8 @@ static int parse_mail(struct am_state *state, const char *mail) strbuf_addstr(&author_email, x); else if (skip_prefix(sb.buf, "Date: ", &x)) strbuf_addstr(&author_date, x); + else if (skip_prefix(sb.buf, "X-Change-ID: ", &x)) + strbuf_addstr(&change_id, x); } fclose(fp); @@ -1310,6 +1322,11 @@ static int parse_mail(struct am_state *state, const char *mail) assert(!state->author_date); state->author_date = strbuf_detach(&author_date, NULL); + if (change_id.len) { + assert(!state->change_id); + state->change_id = strbuf_detach(&change_id, NULL); + } + assert(!state->msg); state->msg = strbuf_detach(&msg, &state->msg_len); @@ -1318,6 +1335,7 @@ static int parse_mail(struct am_state *state, const char *mail) strbuf_release(&author_date); strbuf_release(&author_email); strbuf_release(&author_name); + strbuf_release(&change_id); strbuf_release(&sb); clear_mailinfo(&mi); return ret; @@ -1345,13 +1363,14 @@ static int get_mail_commit_oid(struct object_id *commit_id, const char *mail) } /** - * Sets state->msg, state->author_name, state->author_email, state->author_date - * to the commit's respective info. + * Sets state->msg, state->author_name, state->author_email, state->author_date, + * and state->change_id to the commit's respective info. */ static void get_commit_info(struct am_state *state, struct commit *commit) { - const char *buffer, *ident_line, *msg; + const char *buffer, *ident_line, *change_id, *msg; size_t ident_len; + size_t change_id_len; struct ident_split id; buffer = repo_logmsg_reencode(the_repository, commit, NULL, @@ -1381,6 +1400,12 @@ static void get_commit_info(struct am_state *state, struct commit *commit) assert(!state->author_date); state->author_date = xstrdup(show_ident_date(&id, DATE_MODE(NORMAL))); + change_id = find_commit_header(buffer, "change-id", &change_id_len); + if (change_id && change_id_len) { + assert(!state->change_id); + state->change_id = xmemdupz(change_id, change_id_len); + } + assert(!state->msg); msg = strstr(buffer, "\n\n"); if (!msg) @@ -1668,6 +1693,8 @@ static void do_commit(const struct am_state *state) struct commit_list *parents = NULL; const char *reflog_msg, *author, *committer = NULL; struct strbuf sb = STRBUF_INIT; + struct commit_extra_header change_id_hdr = {0}; + struct commit_extra_header *extra = NULL; if (!state->no_verify && run_hooks(the_repository, "pre-applypatch")) exit(1); @@ -1699,9 +1726,16 @@ static void do_commit(const struct am_state *state) : state->author_date, IDENT_STRICT); + if (state->change_id && strlen(state->change_id) != 0) { + change_id_hdr.key = "change-id"; + change_id_hdr.value = state->change_id; + change_id_hdr.len = strlen(state->change_id); + extra = &change_id_hdr; + } + if (commit_tree_extended(state->msg, state->msg_len, &tree, parents, &commit, author, committer, state->sign_commit, - NULL)) + extra)) die(_("failed to write commit object")); reflog_msg = getenv("GIT_REFLOG_ACTION"); @@ -1853,6 +1887,10 @@ static void am_run(struct am_state *state, int resume) write_author_script(state); write_commit_msg(state); + + if (state->change_id) + write_state_text(state, "change-id", + state->change_id); } if (state->interactive && do_interactive(state)) diff --git a/mailinfo.c b/mailinfo.c index b4e815b2d8..46d68a03d6 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -351,7 +351,7 @@ static void cleanup_subject(struct mailinfo *mi, struct strbuf *subject) } static const char * const header[] = { - "From", "Subject", "Date", + "From", "Subject", "Date", "X-Change-ID", }; static inline int skip_header(const struct strbuf *line, const char *hdr, @@ -1183,6 +1183,8 @@ static void handle_info(struct mailinfo *mi) handle_from(mi, hdr); fprintf(mi->output, "Author: %s\n", mi->name.buf); fprintf(mi->output, "Email: %s\n", mi->email.buf); + } else if (!strcmp(header[i], "X-Change-ID")) { + output_header_lines(mi->output, "X-Change-ID", hdr); } else { cleanup_space(hdr); fprintf(mi->output, "%s: %s\n", header[i], hdr->buf); -- 2.50.0 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-03 11:29 [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Drew DeVault 2025-07-03 11:29 ` [PATCH v2 2/2] am: import X-Change-ID from email headers Drew DeVault @ 2025-07-06 3:37 ` Jeff King 2025-07-06 10:46 ` Drew DeVault 2025-07-06 6:20 ` Aditya Garg 2025-08-19 17:45 ` Remo Senekowitsch 3 siblings, 1 reply; 17+ messages in thread From: Jeff King @ 2025-07-06 3:37 UTC (permalink / raw) To: Drew DeVault Cc: git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch On Thu, Jul 03, 2025 at 01:29:51PM +0200, Drew DeVault wrote: > One remark that occurs to me upon spinning v2 is that I'm not sure how > to test this behavior. There is no obvious way to cause git upstream to > produce a commit with a change-id -- presently these are only ever added > by third-party tools. I don't have any opinion on the feature itself, but the plumbing way to do it would perhaps be: # make some vanilla commit... git commit -m foo && # make a new variant with the change id commit=$( git cat-file commit HEAD | perl -lpe 'print "change-id foo" unless length' | git hash-object -w --stdin -t commit ) && # replace the old one git update-ref HEAD $commit which would be enough for Git's test suite. If this is something that other third-party tools are going to start adding, it might be worth adding some tests to Git's suite anyway to make sure it is handled correctly. (I didn't follow the discussion on whether a new commit header was something the Git project wanted to endorse, versus sticking it in a trailer line, so don't take this as either a positive or negative on the approach). -Peff ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-06 3:37 ` [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Jeff King @ 2025-07-06 10:46 ` Drew DeVault 0 siblings, 0 replies; 17+ messages in thread From: Drew DeVault @ 2025-07-06 10:46 UTC (permalink / raw) To: Jeff King Cc: git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch [-- Attachment #1.1.1: Type: text/plain, Size: 597 bytes --] On Sun Jul 6, 2025 at 5:37 AM CEST, Jeff King wrote: > I don't have any opinion on the feature itself, but the plumbing way to > do it would perhaps be: > > # make some vanilla commit... > git commit -m foo && > > # make a new variant with the change id > commit=$( > git cat-file commit HEAD | > perl -lpe 'print "change-id foo" unless length' | > git hash-object -w --stdin -t commit > ) && > > # replace the old one > git update-ref HEAD $commit Thanks! I'll incorporate this into the tests in the next patch version after some further discussion. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-03 11:29 [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Drew DeVault 2025-07-03 11:29 ` [PATCH v2 2/2] am: import X-Change-ID from email headers Drew DeVault 2025-07-06 3:37 ` [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Jeff King @ 2025-07-06 6:20 ` Aditya Garg 2025-07-06 10:41 ` Drew DeVault 2025-08-19 17:45 ` Remo Senekowitsch 3 siblings, 1 reply; 17+ messages in thread From: Aditya Garg @ 2025-07-06 6:20 UTC (permalink / raw) To: Drew DeVault, git Cc: Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King On 03-07-2025 04:59 pm, Drew DeVault wrote: > Introduce the X-Change-ID header to emails prepared by git (i.e. via > format-patch, send-email). This allows tools which work with those > emails (e.g. patchwork, sourcehut) to meaningfully integrate with tools > that assign change IDs to commits. > > With some follow-up work, this is also the first step towards ensuring > that those change IDs are preserved through from git-send-email to > git-am as a change moves through its review lifecycle. > > Signed-off-by: Drew DeVault <drew@ddevault.org> > --- > v2 is unchanged from v1. > > One remark that occurs to me upon spinning v2 is that I'm not sure how > to test this behavior. There is no obvious way to cause git upstream to > produce a commit with a change-id -- presently these are only ever added > by third-party tools. I don't think we should add it to email headers. There are many email providers which do not allow custom headers in the emails. For example if you are using protonmail bridge or any third party protonmail client, the headers are not preserved. Similarly, if you are using MS Graph to send emails, headers are again not preserved. We should also consider cases when people use Thunderbird, Mutt or something similar to send emails, rather than git send-email. The headers IMO should include the standard ones like From, Subject etc. Custom headers should be a part of body, just like we do Signed-off-by, Link etc. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-06 6:20 ` Aditya Garg @ 2025-07-06 10:41 ` Drew DeVault 2025-07-07 1:30 ` Junio C Hamano 0 siblings, 1 reply; 17+ messages in thread From: Drew DeVault @ 2025-07-06 10:41 UTC (permalink / raw) To: Aditya Garg, git Cc: Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King [-- Attachment #1.1.1: Type: text/plain, Size: 1742 bytes --] On Sun Jul 6, 2025 at 8:20 AM CEST, Aditya Garg wrote: > I don't think we should add it to email headers. There are many email providers > which do not allow custom headers in the emails. For example if you are using > protonmail bridge or any third party protonmail client, the headers are not > preserved. Similarly, if you are using MS Graph to send emails, headers are > again not preserved. We should also consider cases when people use Thunderbird, > Mutt or something similar to send emails, rather than git send-email. As far as I can tell, this isn't actually true. I looked into it and protonmail and MS Graph both seem to support custom headers. I have also verified that mutt will preserve the header when you edit the email normally with mutt -H. If you're sending an email with Thunderbird, none of these things are preserved (including From, Subject, etc), and the best you can hope for is attaching the patch, in which case X-Change-ID will be preserved unmolested. Moreover, if the change-id header is lost, it's not the end of the world, it just degrades to the present-day state of affairs, in which you cannot use it to associate patches with prior versions. > The headers IMO should include the standard ones like From, Subject etc. > Custom headers should be a part of body, just like we do Signed-off-by, Link etc. Trailers and headers are different. The main point of the change-id discussion earlier on this list was to avoid adding trailers. I also suspect that if we added this as an "inbody header" that older git implementations would ingest the X-Change-ID header into the commit message, which is not a desirable behavior. IMO the right way forward is to use a mail header. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-06 10:41 ` Drew DeVault @ 2025-07-07 1:30 ` Junio C Hamano 2025-07-07 5:53 ` Junio C Hamano 2025-07-07 7:09 ` Drew DeVault 0 siblings, 2 replies; 17+ messages in thread From: Junio C Hamano @ 2025-07-07 1:30 UTC (permalink / raw) To: Drew DeVault Cc: Aditya Garg, git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King "Drew DeVault" <drew@ddevault.org> writes: > Trailers and headers are different. The main point of the change-id > discussion earlier on this list was to avoid adding trailers. It sounds like this "avoiding trailers" is the root cause of the problem. If change-id is something not precious as you earlier said, having various operations lose it by design or by accident may not hurt a lot, but then doesn't it make it harder to notice by hiding it in a non-standard commit header field? There is no easy way to tell "git log --format" to show such a custom header, you'd need to tell amend, rebase, cherry-pick, etc. to carry the custom header forward (or not---have all the change-id loving communities agreed on when to propagate and when not to?). Keeping it as one of the trailer fields will always make it available [*], propagate existing one by default with any existing tool, and because it is in the same place as log message, the user can easily remove it if it is not appropriate to keep it. Side note: [*] Unless you are doing "log --oneline", that is, but I'd say at that point you are hiding it deliberately. > I also suspect that if we added this as an "inbody header" that older > git implementations would ingest the X-Change-ID header into the commit > message, which is not a desirable behavior. Of course not. If the thing is a trailer, you do not even have to worry about such sillyness caused by adding it as a new in-body header. > IMO the right way forward is to use a mail header. No. In the change-id case, trailer is the right way to go. Having said all that, you may sense that I am not all that impressed by the previous rounds of dicsussions arguing for recording change-id as an extra non-standard commit header. We should think twice or more before making anything that structurally does not cause Git to behave differently taking advantage of the information recorded there an extra commit header field. But after thinking thrice, we may find a set of good pieces of information that should be added as new commit header that are structurally more meaningful, and there will be times when we need to convey them over e-mailed workflow to allow patch recipient not to lose such information. In such a case, I fully agree that embedding in an e-mail header would be the way to go. I would suggest a lot more generic implementation to solve it once and for all. How about doing it more like this: "git format-patch --extra-headers" grabs all extra headers (i.e. those that are not the bog-standard "tree", "parent", "author", "committer") and emit these X-git-extra-commit-header: encoding=iso8859-1 X-git-extra-commit-header: frotz=nitfol next to "Subject:", etc. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 1:30 ` Junio C Hamano @ 2025-07-07 5:53 ` Junio C Hamano 2025-07-07 6:57 ` Martin von Zweigbergk 2025-07-07 7:09 ` Drew DeVault 1 sibling, 1 reply; 17+ messages in thread From: Junio C Hamano @ 2025-07-07 5:53 UTC (permalink / raw) To: Drew DeVault Cc: Aditya Garg, git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King Junio C Hamano <gitster@pobox.com> writes: >> IMO the right way forward is to use a mail header. > > No. In the change-id case, trailer is the right way to go. > ... > But after thinking thrice, we may find a set of good pieces of > information that should be added as new commit header ... > ... and there will be times when we need > to convey them over e-mailed workflow to allow patch recipient not > to lose such information. Or a third-party software may add a new commit header without gauging and waiting for the community consensus anyway, which may or may not have much structural meaning, and then we may want to extract that piece of information hidden in the commit header out, because it was not written as trailer (in which case there wouldn't have needed any extra effort to extract it in the first place). This part can use a bit of clarification. My endorsement below to use an extra e-mail header applies when some commit objects ended up with extra non-standard headers holding pieces of information that we want to send as part of a patch, whether it is a good idea or a bad idea to place that particular kind of information in a commit header. And the question is "Now, what is the best way to transfer it over a patched e-mail?" If it were a good idea to place that particular kind of information in a header, that is of course an effort worth investing in. If it were a horrible idea to place it in a header, it still is worth investing in an effort to give ourselves a way to salvage such information out of the header, even though we wouldn't have needed such extra tool if they didn't hide it in the header. But once a generic mechanism is written, then Git does not have to behave differently if an extra commit header is something a more recent versions of Git tools started using after the idea gained community consensus, or a third-party software unilaterally added without gauging or waiting for community consensus. The same single mechanism can be used to extract the information and carry it in e-mails, and mailinfo can be told to extract it out. It can be left up to the consumer after mailinfo disects the pieces of information out of the e-mail. > In such a case, I fully agree that embedding in an e-mail header > would be the way to go. > > I would suggest a lot more generic implementation to solve it once > and for all. How about doing it more like this: > > "git format-patch --extra-headers" grabs all extra headers > (i.e. those that are not the bog-standard "tree", "parent", > "author", "committer") and emit these > > X-git-extra-commit-header: encoding=iso8859-1 > X-git-extra-commit-header: frotz=nitfol > > next to "Subject:", etc. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 5:53 ` Junio C Hamano @ 2025-07-07 6:57 ` Martin von Zweigbergk 2025-07-07 6:59 ` Martin von Zweigbergk 2025-07-07 7:12 ` Drew DeVault 0 siblings, 2 replies; 17+ messages in thread From: Martin von Zweigbergk @ 2025-07-07 6:57 UTC (permalink / raw) To: Junio C Hamano Cc: Drew DeVault, Aditya Garg, git, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King On Sun, 6 Jul 2025 at 22:53, Junio C Hamano <gitster@pobox.com> wrote: > > Junio C Hamano <gitster@pobox.com> writes: > > >> IMO the right way forward is to use a mail header. > > > > No. In the change-id case, trailer is the right way to go. > > ... > > But after thinking thrice, we may find a set of good pieces of > > information that should be added as new commit header ... > > ... and there will be times when we need > > to convey them over e-mailed workflow to allow patch recipient not > > to lose such information. > > Or a third-party software may add a new commit header without > gauging and waiting for the community consensus anyway, which may or > may not have much structural meaning, and then we may want to extract > that piece of information hidden in the commit header out, because > it was not written as trailer (in which case there wouldn't have > needed any extra effort to extract it in the first place). > > This part can use a bit of clarification. > > My endorsement below to use an extra e-mail header applies when some > commit objects ended up with extra non-standard headers holding > pieces of information that we want to send as part of a patch, > whether it is a good idea or a bad idea to place that particular > kind of information in a commit header. And the question is "Now, > what is the best way to transfer it over a patched e-mail?" > > If it were a good idea to place that particular kind of information > in a header, that is of course an effort worth investing in. > > If it were a horrible idea to place it in a header, it still is > worth investing in an effort to give ourselves a way to salvage such > information out of the header, even though we wouldn't have needed > such extra tool if they didn't hide it in the header. +1 Does this also apply to commit signatures? I just created a signed commit and checked what `git format-patch` produces. I was a bit surprised to see that it doesn't seem to show up anywhere. Is it not supported or did I miss some flag or config? > > But once a generic mechanism is written, then Git does not have to > behave differently if an extra commit header is something a more > recent versions of Git tools started using after the idea gained > community consensus, or a third-party software unilaterally added > without gauging or waiting for community consensus. The same single > mechanism can be used to extract the information and carry it in > e-mails, and mailinfo can be told to extract it out. It can be left > up to the consumer after mailinfo disects the pieces of information > out of the e-mail. > > > In such a case, I fully agree that embedding in an e-mail header > > would be the way to go. Is it another option to put it somewhere in the body? Could we fit additional headers (e.g. signatures and third-party ones) somewhere between the `---` line and the additional diff? Or how about after the final `--` line? I haven't checked the specification. I just saw these lines in the `git format-patch` output. > > > > I would suggest a lot more generic implementation to solve it once > > and for all. How about doing it more like this: > > > > "git format-patch --extra-headers" grabs all extra headers > > (i.e. those that are not the bog-standard "tree", "parent", > > "author", "committer") and emit these > > > > X-git-extra-commit-header: encoding=iso8859-1 > > X-git-extra-commit-header: frotz=nitfol > > > > next to "Subject:", etc. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 6:57 ` Martin von Zweigbergk @ 2025-07-07 6:59 ` Martin von Zweigbergk 2025-07-07 12:40 ` Junio C Hamano 2025-07-07 7:12 ` Drew DeVault 1 sibling, 1 reply; 17+ messages in thread From: Martin von Zweigbergk @ 2025-07-07 6:59 UTC (permalink / raw) To: Junio C Hamano Cc: Drew DeVault, Aditya Garg, git, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King On Sun, 6 Jul 2025 at 23:57, Martin von Zweigbergk <martinvonz@google.com> wrote: > > On Sun, 6 Jul 2025 at 22:53, Junio C Hamano <gitster@pobox.com> wrote: > > > > Junio C Hamano <gitster@pobox.com> writes: > > > > >> IMO the right way forward is to use a mail header. > > > > > > No. In the change-id case, trailer is the right way to go. > > > ... > > > But after thinking thrice, we may find a set of good pieces of > > > information that should be added as new commit header ... > > > ... and there will be times when we need > > > to convey them over e-mailed workflow to allow patch recipient not > > > to lose such information. > > > > Or a third-party software may add a new commit header without > > gauging and waiting for the community consensus anyway, which may or > > may not have much structural meaning, and then we may want to extract > > that piece of information hidden in the commit header out, because > > it was not written as trailer (in which case there wouldn't have > > needed any extra effort to extract it in the first place). > > > > This part can use a bit of clarification. > > > > My endorsement below to use an extra e-mail header applies when some > > commit objects ended up with extra non-standard headers holding > > pieces of information that we want to send as part of a patch, > > whether it is a good idea or a bad idea to place that particular > > kind of information in a commit header. And the question is "Now, > > what is the best way to transfer it over a patched e-mail?" > > > > If it were a good idea to place that particular kind of information > > in a header, that is of course an effort worth investing in. > > > > If it were a horrible idea to place it in a header, it still is > > worth investing in an effort to give ourselves a way to salvage such > > information out of the header, even though we wouldn't have needed > > such extra tool if they didn't hide it in the header. > > +1 > > Does this also apply to commit signatures? I just created a signed > commit and checked what `git format-patch` produces. I was a bit > surprised to see that it doesn't seem to show up anywhere. Is it not > supported or did I miss some flag or config? Oh, perhaps they're deliberately not included because the commit timestamp is not included in the patch so the signatures would be invalid even if the patch was applied to the right parent? > > > > > But once a generic mechanism is written, then Git does not have to > > behave differently if an extra commit header is something a more > > recent versions of Git tools started using after the idea gained > > community consensus, or a third-party software unilaterally added > > without gauging or waiting for community consensus. The same single > > mechanism can be used to extract the information and carry it in > > e-mails, and mailinfo can be told to extract it out. It can be left > > up to the consumer after mailinfo disects the pieces of information > > out of the e-mail. > > > > > In such a case, I fully agree that embedding in an e-mail header > > > would be the way to go. > > > Is it another option to put it somewhere in the body? Could we fit > additional headers (e.g. signatures and third-party ones) somewhere > between the `---` line and the additional diff? Or how about after the > final `--` line? I haven't checked the specification. I just saw these > lines in the `git format-patch` output. > > > > > > > I would suggest a lot more generic implementation to solve it once > > > and for all. How about doing it more like this: > > > > > > "git format-patch --extra-headers" grabs all extra headers > > > (i.e. those that are not the bog-standard "tree", "parent", > > > "author", "committer") and emit these > > > > > > X-git-extra-commit-header: encoding=iso8859-1 > > > X-git-extra-commit-header: frotz=nitfol > > > > > > next to "Subject:", etc. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 6:59 ` Martin von Zweigbergk @ 2025-07-07 12:40 ` Junio C Hamano 0 siblings, 0 replies; 17+ messages in thread From: Junio C Hamano @ 2025-07-07 12:40 UTC (permalink / raw) To: Martin von Zweigbergk Cc: Drew DeVault, Aditya Garg, git, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King Martin von Zweigbergk <martinvonz@google.com> writes: >> Does this also apply to commit signatures? I just created a signed >> commit and checked what `git format-patch` produces. I was a bit >> surprised to see that it doesn't seem to show up anywhere. Is it not >> supported or did I miss some flag or config? > > Oh, perhaps they're deliberately not included because the commit > timestamp is not included in the patch so the signatures would be > invalid even if the patch was applied to the right parent? An excellent observation. Yes, it was a deliberate design decision to omit cryptographic signature(s) on the commit object itself, based on the assumption that the primary motivation behind e-mailed patch workflow is to convey the essense of the change in a readable form, while allowing minor modifications to both proposed log message and the diff while/before applying it, and on top of a state that is slightly different from the state the patch was taken from. It was out of scope to reproduce the history bit-for-bit identically. Besides the author timestamp, the committer timestamp and identity (the recipient of an e-mailed patch is likely to be different from the sender), "git am -s --whitespace=fix" would be a common thing a recipient would want to clean up the patch sent over the e-mail anyway. But with many past design decisions, the underlying assumptions are worth reevaluating from time to time. They may have become outdated, or new use cases may have emerged that the tools are good fit to support them with enhancements. Instead of only limiting to convey the essense in a readable form, we could also aim to support the exact bit-for-bit reproducibility under certain conditions, e.g., the recipient has exact objects named by the "tree" and "parent" headers in the original commit object. Think of it as an e-mailable bundle file whose contents can be inspected before unbundling. And for such a "inspectable and e-mailable bundle that can be used to fully reproduce the state bit-for-bit", ... >> Is it another option to put it somewhere in the body? Could we fit >> additional headers (e.g. signatures and third-party ones) somewhere >> between the `---` line and the additional diff? Or how about after the >> final `--` line? I haven't checked the specification. I just saw these >> lines in the `git format-patch` output. ... I think a far simpler and more robust approach is to dump the whole "git cat-file commit" output somewhere in the e-mail, not limiting ourselves to "extra" headers, in some "less susceptible to corruption" form (e.g. base85). The standard headers like "tree" and "parent" are good thing to have if a new requirement is to allow exact reproducibility when the objects the patch was based on exist, and the raw commit message with trailing whitespaces would be needed in a protected form as well, since e-mailed patches can lose them during transit. And below the three-dash line as you suggested is one good place to keep such an extra piece of information. Or the "cat-file commit" dump can be on an extra e-mail header. Some e-mail environments will deliberately hide anything after the final "-- " (signature) line, and saving a message may even lose it, so it is not a good place to store anything that is worth feeding "git am" with. Thanks. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 6:57 ` Martin von Zweigbergk 2025-07-07 6:59 ` Martin von Zweigbergk @ 2025-07-07 7:12 ` Drew DeVault 1 sibling, 0 replies; 17+ messages in thread From: Drew DeVault @ 2025-07-07 7:12 UTC (permalink / raw) To: Martin von Zweigbergk, Junio C Hamano Cc: Aditya Garg, git, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King [-- Attachment #1.1.1: Type: text/plain, Size: 1372 bytes --] On Mon Jul 7, 2025 at 8:57 AM CEST, Martin von Zweigbergk wrote: > +1 > > Does this also apply to commit signatures? I just created a signed > commit and checked what `git format-patch` produces. I was a bit > surprised to see that it doesn't seem to show up anywhere. Is it not > supported or did I miss some flag or config? There is, to the best of my understanding, no serious effort being made towards causing commit signatures to survive the git-format-patch/git-am process. There's also some confusion that often occurs here because commit signatures are unrelated to PGP signatures and it is not possible to make either system meaningfully aware of the other. >> > In such a case, I fully agree that embedding in an e-mail header >> > would be the way to go. > > Is it another option to put it somewhere in the body? Could we fit > additional headers (e.g. signatures and third-party ones) somewhere > between the `---` line and the additional diff? Or how about after the > final `--` line? I haven't checked the specification. I just saw these > lines in the `git format-patch` output. I really think that it would be much wiser of us to put it in the email headers, which already exist as a well-defined structured data format for this purpose, rather than introduce something like commit trailers to the timely commentary section. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-07 1:30 ` Junio C Hamano 2025-07-07 5:53 ` Junio C Hamano @ 2025-07-07 7:09 ` Drew DeVault 1 sibling, 0 replies; 17+ messages in thread From: Drew DeVault @ 2025-07-07 7:09 UTC (permalink / raw) To: Junio C Hamano Cc: Aditya Garg, git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe, Remo Senekowitsch, Jeff King, Junio C Hamano [-- Attachment #1.1.1: Type: text/plain, Size: 1530 bytes --] On Mon Jul 7, 2025 at 3:30 AM CEST, Junio C Hamano wrote: > I would suggest a lot more generic implementation to solve it once > and for all. How about doing it more like this: > > "git format-patch --extra-headers" grabs all extra headers > (i.e. those that are not the bog-standard "tree", "parent", > "author", "committer") and emit these > > X-git-extra-commit-header: encoding=iso8859-1 > X-git-extra-commit-header: frotz=nitfol > > next to "Subject:", etc. +1. I particularly like how this approach throws out a bunch of arguing over the utility of the specific use-case -- clever :) Do you think there's any reason not to throw all extra headers into X-git-extra-commit-header (or whatever) unconditionally? Does it need to be behind a flag or config option? If some tool added the extra commit headers, they presumably have a good reason for doing so and we ought to encode that information so we can reproduce the commit properly, same as we would with the rest of the commit headers. I suppose there is a scenario where this breaks something because someone has a poorly thought-out string munging parser for git format-patch output that will barf upon encountering the unexpected, or some mail provider rejects emails rather than silently dropping headers it doesn't like, but both possibilities seem remote -- especially when considering that these hypothetical edge cases have to be combined with a use-case which deploys extra commit headers in the first place. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-07-03 11:29 [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Drew DeVault ` (2 preceding siblings ...) 2025-07-06 6:20 ` Aditya Garg @ 2025-08-19 17:45 ` Remo Senekowitsch 2025-08-20 7:29 ` Drew DeVault 3 siblings, 1 reply; 17+ messages in thread From: Remo Senekowitsch @ 2025-08-19 17:45 UTC (permalink / raw) To: Drew DeVault, git; +Cc: Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe On Thu Jul 3, 2025 at 1:29 PM CEST, Drew DeVault wrote: > Introduce the X-Change-ID header to emails prepared by git (i.e. via > format-patch, send-email). This allows tools which work with those > emails (e.g. patchwork, sourcehut) to meaningfully integrate with tools > that assign change IDs to commits. > > With some follow-up work, this is also the first step towards ensuring > that those change IDs are preserved through from git-send-email to > git-am as a change moves through its review lifecycle. Hi Drew, Do you intend to keep working on this by any chance? I'm writing a code review tool that relies on Jujutsu's change-id header for its "killer feature". It will also support different code review platforms as backends, including GitHub, mailing lists and more. As long as mailing lists do not preserve the change-id header though, users of them will fundamentally have a degraded experience. That is to say, your efforts here are much appreciated. :-) Best, Remo ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-08-19 17:45 ` Remo Senekowitsch @ 2025-08-20 7:29 ` Drew DeVault 2025-08-21 0:50 ` Junio C Hamano 0 siblings, 1 reply; 17+ messages in thread From: Drew DeVault @ 2025-08-20 7:29 UTC (permalink / raw) To: Remo Senekowitsch, git Cc: Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe [-- Attachment #1.1.1: Type: text/plain, Size: 133 bytes --] Hey Remo! I haven't gotten much actionable feedback on this patch yet, so there's not much to do here but wait for more reviewers. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-08-20 7:29 ` Drew DeVault @ 2025-08-21 0:50 ` Junio C Hamano 2025-08-21 8:52 ` Drew DeVault 0 siblings, 1 reply; 17+ messages in thread From: Junio C Hamano @ 2025-08-21 0:50 UTC (permalink / raw) To: Drew DeVault Cc: Remo Senekowitsch, git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe "Drew DeVault" <drew@ddevault.org> writes: > I haven't gotten much actionable feedback on this patch yet, > so there's not much to do here but wait for more reviewers. For a topic that is older than 6 weeks, I am afraid that is a losing strategy. People who might have cared about the topic said all they wanted to say, new people are less likely to discover the topic than it was fresh, and unless you make an action (e.g., posting the "next patch version" you mentioned in [*1*]), it is highly unlikely for anything to happen while you are passive. Even a small update that addresses all the little feedback would serve as a "ping" to reignite interests. You seem to have liked the approach to generalize and encode all the commit object headers (except for of course the object name and author and committer ident, which already have place to be in the format-patch output) on an e-mail header in [*2*]. That should be sufficient for a small update that tries to reignite interests. [References] *1* https://lore.kernel.org/git/DB4WU136IYR2.3ELSGQUDD6QI8@ddevault.org/ *2* https://lore.kernel.org/git/DB5MUUDPF6C0.3OR02N6JQB8H8@ddevault.org/ ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/2] pretty: add X-Change-ID to mail formats 2025-08-21 0:50 ` Junio C Hamano @ 2025-08-21 8:52 ` Drew DeVault 0 siblings, 0 replies; 17+ messages in thread From: Drew DeVault @ 2025-08-21 8:52 UTC (permalink / raw) To: Junio C Hamano Cc: Remo Senekowitsch, git, Martin von Zweigbergk, Patrick Steinhardt, Andy Koppe [-- Attachment #1.1.1: Type: text/plain, Size: 1192 bytes --] On Thu Aug 21, 2025 at 2:50 AM CEST, Junio C Hamano wrote: > For a topic that is older than 6 weeks, I am afraid that is a losing > strategy. People who might have cared about the topic said all they > wanted to say, new people are less likely to discover the topic than > it was fresh, and unless you make an action (e.g., posting the "next > patch version" you mentioned in [*1*]), it is highly unlikely for > anything to happen while you are passive. Even a small update that > addresses all the little feedback would serve as a "ping" to reignite > interests. > > You seem to have liked the approach to generalize and encode all the > commit object headers (except for of course the object name and > author and committer ident, which already have place to be in the > format-patch output) on an e-mail header in [*2*]. That should be > sufficient for a small update that tries to reignite interests. Oh, of course. For some reason I had had the notion that I had already written a v3 based on this feedback and it was awaiting further comments. But in fact I have done no such thing. I'll put this back on my todo list and get a v3 out in the foreseeable future. [-- Attachment #1.2: 42F3F1862E3CC4B8.asc --] [-- Type: application/pgp-keys, Size: 644 bytes --] -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZ7Y9kxYJKwYBBAHaRw8BAQdA/pPy6X+nNL5T2QaJKEM08xN/Kz7wFTAZoH5Y riV9x1m0IERyZXcgRGVWYXVsdCA8ZHJld0BkZGV2YXVsdC5vcmc+iJMEExYKADsC GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSftec33CWynY7sRpFC8/GG LjzEuAUCZ7Y9wwAKCRBC8/GGLjzEuMEEAP9DH+1LgvTqZDLZ8babB5Cdp5y0ZW+Q Tx78mh1L8jJd6gEAssmgsImcrZv4adP2UW5RU5BHCe9KUdx0DyV83QwlFAS4OARn tj2TEgorBgEEAZdVAQUBAQdAGAH9dlaCONoXpmQgHoQgYI2tS+VM3mzU8I2PyVYQ 1GUDAQgHiHgEGBYKACACGwwWIQSftec33CWynY7sRpFC8/GGLjzEuAUCZ7Y91gAK CRBC8/GGLjzEuHcnAP4yjOiM0yqkST6yXzDUWze7B9Im24F8HVx+wNqcDaDtcAD/ fKQhz0SCPiblO6lc7MFUvlaOz2v87UpUYRhzPdgQqwk= =emrb -----END PGP PUBLIC KEY BLOCK----- [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2025-08-21 8:52 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-03 11:29 [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Drew DeVault 2025-07-03 11:29 ` [PATCH v2 2/2] am: import X-Change-ID from email headers Drew DeVault 2025-07-06 3:37 ` [PATCH v2 1/2] pretty: add X-Change-ID to mail formats Jeff King 2025-07-06 10:46 ` Drew DeVault 2025-07-06 6:20 ` Aditya Garg 2025-07-06 10:41 ` Drew DeVault 2025-07-07 1:30 ` Junio C Hamano 2025-07-07 5:53 ` Junio C Hamano 2025-07-07 6:57 ` Martin von Zweigbergk 2025-07-07 6:59 ` Martin von Zweigbergk 2025-07-07 12:40 ` Junio C Hamano 2025-07-07 7:12 ` Drew DeVault 2025-07-07 7:09 ` Drew DeVault 2025-08-19 17:45 ` Remo Senekowitsch 2025-08-20 7:29 ` Drew DeVault 2025-08-21 0:50 ` Junio C Hamano 2025-08-21 8:52 ` Drew DeVault
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).