From: Toon Claes <toon@iotcl.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: Karthik Nayak <karthik.188@gmail.com>
Subject: Re: [PATCH 6/8] refs: fix identity for migrated reflogs
Date: Thu, 24 Jul 2025 14:56:11 +0200 [thread overview]
Message-ID: <87ldodkas4.fsf@iotcl.com> (raw)
In-Reply-To: <20250722-pks-reflog-append-v1-6-183e5949de16@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
> When migrating reflog entries between different storage formats we must
> reconstruct the identity of reflog entries. This is done by passing the
> committer passed to the `migrate_one_reflog_entry()` callback function
> to `fmt_ident()`.
>
> This results in an invalid identity though: `fmt_ident()` expects the
> caller to provide both name and mail of the author, but we pass the full
> identity as mail. This leads to an identity like:
>
> pks <Patrick Steinhardt ps@pks.im>
>
> Fix the bug by splitting the identity line first. This allows us to
> extract both the name and mail so that we can pass them to `fmt_ident()`
> separately.
>
> This commit does not yet add any tests as there is another bug in the
> reflog migration that will be fixed in a subsequent commit. Once that
> bug is fixed we'll make the reflog verification in t1450 stricter, and
> that will catch both this bug here and the other bug.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> refs.c | 21 ++++++++++++++++++---
> 1 file changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/refs.c b/refs.c
> index 188989e4113..64544300dc3 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -2945,7 +2945,7 @@ struct migration_data {
> struct ref_store *old_refs;
> struct ref_transaction *transaction;
> struct strbuf *errbuf;
> - struct strbuf sb;
> + struct strbuf sb, name, mail;
> };
>
> static int migrate_one_ref(const char *refname, const char *referent UNUSED, const struct object_id *oid,
> @@ -2984,7 +2984,7 @@ struct reflog_migration_data {
> struct ref_store *old_refs;
> struct ref_transaction *transaction;
> struct strbuf *errbuf;
> - struct strbuf *sb;
> + struct strbuf *sb, *name, *mail;
> };
>
> static int migrate_one_reflog_entry(struct object_id *old_oid,
> @@ -2994,13 +2994,22 @@ static int migrate_one_reflog_entry(struct object_id *old_oid,
> const char *msg, void *cb_data)
> {
> struct reflog_migration_data *data = cb_data;
> + struct ident_split ident;
> const char *date;
> int ret;
>
> + if (split_ident_line(&ident, committer, strlen(committer)) < 0)
> + return -1;
> +
> + strbuf_reset(data->name);
> + strbuf_add(data->name, ident.name_begin, ident.name_end - ident.name_begin);
> + strbuf_reset(data->mail);
> + strbuf_add(data->mail, ident.mail_begin, ident.mail_end - ident.mail_begin);
> +
> date = show_date(timestamp, tz, DATE_MODE(NORMAL));
> strbuf_reset(data->sb);
> /* committer contains name and email */
This comment doesn't make sense here no more. Better leave it out.
> - strbuf_addstr(data->sb, fmt_ident("", committer, WANT_BLANK_IDENT, date, 0));
> + strbuf_addstr(data->sb, fmt_ident(data->name->buf, data->mail->buf, WANT_BLANK_IDENT, date, 0));
I was checking whether we could use IDENT_NO_NAME instead of parsing the
ident. But fmt_ident() calls strbuf_addstr_without_crud() which strips
out the angle brackets from the email address, which builds an invalid
identity like: "C O Mitter committer@example.com 1112911993 -0700"
We could opt to add a flag IDENT_LEAVE_CRUD which calls strbuf_addstr()
instead, but I'm not sure we want to go there.
--
Cheers,
Toon
next prev parent reply other threads:[~2025-07-24 12:56 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-22 11:20 [PATCH 0/8] refs: fix migration of reflog entries Patrick Steinhardt
2025-07-22 11:20 ` [PATCH 1/8] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-07-22 22:04 ` Junio C Hamano
2025-07-22 11:20 ` [PATCH 2/8] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-07-23 18:14 ` Justin Tobler
2025-07-24 7:42 ` Patrick Steinhardt
2025-07-24 16:45 ` Junio C Hamano
2025-07-22 11:20 ` [PATCH 3/8] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-07-23 18:25 ` Justin Tobler
2025-07-24 8:36 ` Karthik Nayak
2025-07-24 12:55 ` Toon Claes
2025-07-22 11:20 ` [PATCH 4/8] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-07-23 19:00 ` Justin Tobler
2025-07-24 7:42 ` Patrick Steinhardt
2025-07-24 12:54 ` Toon Claes
2025-07-25 5:36 ` Patrick Steinhardt
2025-07-24 16:20 ` SZEDER Gábor
2025-07-24 21:10 ` Junio C Hamano
2025-07-25 5:36 ` Patrick Steinhardt
2025-07-25 14:35 ` Junio C Hamano
2025-07-22 11:20 ` [PATCH 5/8] ident: fix type of string length parameter Patrick Steinhardt
2025-07-22 11:20 ` [PATCH 6/8] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-07-23 19:41 ` Justin Tobler
2025-07-24 7:42 ` Patrick Steinhardt
2025-07-24 9:41 ` Karthik Nayak
2025-07-24 12:56 ` Toon Claes [this message]
2025-07-22 11:20 ` [PATCH 7/8] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-07-23 20:31 ` Justin Tobler
2025-07-24 7:42 ` Patrick Steinhardt
2025-07-24 10:21 ` Karthik Nayak
2025-07-24 11:35 ` Patrick Steinhardt
2025-07-22 11:20 ` [PATCH 8/8] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
2025-07-22 22:09 ` Junio C Hamano
2025-07-23 4:04 ` Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 0/8] refs: fix migration of reflog entries Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 1/8] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 2/8] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 3/8] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 4/8] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-07-28 15:33 ` Kristoffer Haugsbakk
2025-07-28 18:49 ` Junio C Hamano
2025-07-28 20:39 ` Karthik Nayak
2025-07-28 20:59 ` Junio C Hamano
2025-07-30 7:55 ` Karthik Nayak
2025-07-29 0:25 ` Ben Knoble
2025-07-29 6:14 ` Kristoffer Haugsbakk
2025-07-29 6:51 ` Patrick Steinhardt
2025-07-29 15:00 ` Junio C Hamano
2025-07-30 5:33 ` Patrick Steinhardt
2025-07-30 10:33 ` Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 5/8] ident: fix type of string length parameter Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 6/8] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 7/8] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-07-25 11:36 ` Jeff King
2025-07-28 14:43 ` Patrick Steinhardt
2025-07-29 7:14 ` Jeff King
2025-07-29 7:54 ` Patrick Steinhardt
2025-07-25 6:58 ` [PATCH v2 8/8] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 0/9] refs: fix migration of reflog entries Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 1/9] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 2/9] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 3/9] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-08-01 11:38 ` Toon Claes
2025-08-04 7:37 ` Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 4/9] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-07-29 16:07 ` Junio C Hamano
2025-08-01 11:37 ` Toon Claes
2025-08-04 7:38 ` Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 5/9] ident: fix type of string length parameter Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 6/9] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 7/9] refs/files: detect race when generating reflog entry for HEAD Patrick Steinhardt
2025-07-29 16:16 ` Junio C Hamano
2025-08-01 11:55 ` Toon Claes
2025-08-02 11:11 ` Jeff King
2025-08-04 7:38 ` Patrick Steinhardt
2025-08-04 14:47 ` Jeff King
2025-07-29 8:55 ` [PATCH v3 8/9] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-07-29 8:55 ` [PATCH v3 9/9] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 0/9] refs: fix migration of reflog entries Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 1/9] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 2/9] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 3/9] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 4/9] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 5/9] ident: fix type of string length parameter Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 6/9] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 7/9] refs/files: detect race when generating reflog entry for HEAD Patrick Steinhardt
2025-08-04 15:38 ` Jeff King
2025-08-04 9:46 ` [PATCH v4 8/9] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-08-04 9:46 ` [PATCH v4 9/9] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 0/9] refs: fix migration of reflog entries Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 1/9] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-08-05 17:04 ` Jean-Noël AVILA
2025-08-05 21:47 ` Junio C Hamano
2025-08-06 5:53 ` Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 2/9] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 3/9] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 4/9] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 5/9] ident: fix type of string length parameter Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 6/9] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 7/9] refs/files: detect race when generating reflog entry for HEAD Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 8/9] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-08-05 15:11 ` [PATCH v5 9/9] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
2025-08-05 18:47 ` [PATCH v5 0/9] refs: fix migration of reflog entries Jeff King
2025-08-06 5:53 ` Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 " Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 1/9] Documentation/git-reflog: convert to use synopsis type Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 2/9] builtin/reflog: improve grouping of subcommands Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 3/9] refs: export `ref_transaction_update_reflog()` Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 4/9] builtin/reflog: implement subcommand to write new entries Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 5/9] ident: fix type of string length parameter Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 6/9] refs: fix identity for migrated reflogs Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 7/9] refs/files: detect race when generating reflog entry for HEAD Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 8/9] refs: stop unsetting REF_HAVE_OLD for log-only updates Patrick Steinhardt
2025-08-06 5:54 ` [PATCH v6 9/9] refs: fix invalid old object IDs when migrating reflogs Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ldodkas4.fsf@iotcl.com \
--to=toon@iotcl.com \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.