Re: [PATCH v2 5/5] refs/debug: trim trailing LF from reflog message
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 26, 2021, 08:16 UTC
- Message-ID
- <xmqqilwf72nf.fsf@gitster.g>
- In-Reply-To
- <0288e743eb2e96e2effd6b0b90c6f885009bf337.1637855872.git.gitgitgadget@gmail.com>
"Han-Wen Nienhuys via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 30 quoted lines
> From: Han-Wen Nienhuys <hanwen@google.com> > > On iteration, the reflog message is always terminated by a newline. Trim it to > avoid clobbering the console with is this extra newline. > > Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> > --- > refs/debug.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/refs/debug.c b/refs/debug.c > index 8667c640237..2631210795b 100644 > --- a/refs/debug.c > +++ b/refs/debug.c > @@ -284,15 +284,21 @@ static int debug_print_reflog_ent(struct object_id *old_oid, > int ret; > char o[GIT_MAX_HEXSZ + 1] = "null"; > char n[GIT_MAX_HEXSZ + 1] = "null"; > + struct strbuf trimmed = STRBUF_INIT; > if (old_oid) > oid_to_hex_r(o, old_oid); > if (new_oid) > oid_to_hex_r(n, new_oid); > > + strbuf_addstr(&trimmed, msg); > ret = dbg->fn(old_oid, new_oid, committer, timestamp, tz, msg, > dbg->cb_data); > - trace_printf_key(&trace_refs, "reflog_ent %s (ret %d): %s -> %s, %s %ld \"%s\"\n", > - dbg->refname, ret, o, n, committer, (long int)timestamp, msg); > + strbuf_trim_trailing_newline(&trimmed);
The API promises to have only LF, not CRLF, at the end, so strbuf_trim_trailing_newline() is a bit overkill (and if payload happened to end with CR, we would lose it).
Show 7 quoted lines
> + trace_printf_key(&trace_refs, > + "reflog_ent %s (ret %d): %s -> %s, %s %ld \"%s\"\n", > + dbg->refname, ret, o, n, committer, > + (long int)timestamp, trimmed.buf); > + strbuf_release(&trimmed); > return ret; > }
Can we use counted bytes in trace_printf()? If we can, it would be simpler to just scan "msg" for LF and then show only the span between the beginning of the string and the found LF using "%.*s", perhaps like this?
refs/debug.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git c/refs/debug.c w/refs/debug.c index 8667c64023..c97eeb5740 100644 --- c/refs/debug.c +++ w/refs/debug.c @@ -284,15 +284,20 @@ static int debug_print_reflog_ent(struct object_id *old_oid, int ret; char o[GIT_MAX_HEXSZ + 1] = "null"; char n[GIT_MAX_HEXSZ + 1] = "null"; + int msglen; + if (old_oid) oid_to_hex_r(o, old_oid); if (new_oid) oid_to_hex_r(n, new_oid); + msglen = strchrnul(msg, '\n') - msg; ret = dbg->fn(old_oid, new_oid, committer, timestamp, tz, msg, dbg->cb_data); - trace_printf_key(&trace_refs, "reflog_ent %s (ret %d): %s -> %s, %s %ld \"%s\"\n", - dbg->refname, ret, o, n, committer, (long int)timestamp, msg); + trace_printf_key(&trace_refs, + "reflog_ent %s (ret %d): %s -> %s, %s %ld \"%.*s\"\n", + dbg->refname, ret, o, n, committer, (long int)timestamp, + (int)msglen, msg); return ret; }