git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Denton Liu <liu.denton@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [PATCH 6/8] reflog-walk.c: don't print last newline with oneline
Date: Fri, 8 Nov 2019 00:50:24 -0800	[thread overview]
Message-ID: <20191108085024.GA26530@generichostname> (raw)
In-Reply-To: <xmqqwocdtwpa.fsf@gitster-ct.c.googlers.com>

Hi Junio,

On Wed, Nov 06, 2019 at 02:12:17PM +0900, Junio C Hamano wrote:
> Denton Liu <liu.denton@gmail.com> writes:
> 
> > Subject: Re: [PATCH 6/8] reflog-walk.c: don't print last newline with oneline
> 
> Please find a better phrasing that does not mislead the readers to
> think "eek, so now output from 'git log -g --oneline' does not get
> LF terminated?"
> 
> I think you are just changing the place where the LF is given from
> the callee that shows a single record (and then used to show LF
> after the record) to the caller that calls the callee (and now it
> shows LF after the call returns), in order to preserve the output,
> but with the given proposed log message, it is not clear if that is
> what you meant to do (I can read from the code what _is_ going on,
> but the log is to record what you _wanted_ to do, which can be
> different).

Yep, I'll reword the subject line.

> 
> > @@ -661,8 +661,10 @@ void show_log(struct rev_info *opt)
> 
> In the pre-context before this line there is a guard to ensure that
> we do this only when showing an entry from the reflog, so the effect
> of this hunk is "when showing from reflog in --oneline format, show
> LF after showing a single record" ...
> 
> >  					    opt->commit_format == CMIT_FMT_ONELINE,
> >  					    &opt->date_mode,
> >  					    opt->date_mode_explicit);
> > -			if (opt->commit_format == CMIT_FMT_ONELINE)
> > +			if (opt->commit_format == CMIT_FMT_ONELINE) {
> > +				putc('\n', opt->diffopt.file);
> >  				return;
> > +			}
> >  		}
> >  	}
> >  
> > diff --git a/reflog-walk.c b/reflog-walk.c
> > index 3a25b27d8f..e2b4c0b290 100644
> > --- a/reflog-walk.c
> > +++ b/reflog-walk.c
> > @@ -285,7 +285,11 @@ void show_reflog_message(struct reflog_walk_info *reflog_info, int oneline,
> >  		info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
> >  		get_reflog_selector(&selector, reflog_info, dmode, force_date, 0);
> >  		if (oneline) {
> > -			printf("%s: %s", selector.buf, info->message);
> > +			struct strbuf message = STRBUF_INIT;
> > +			strbuf_addstr(&message, info->message);
> > +			strbuf_trim_trailing_newline(&message);
> > +			printf("%s: %s", selector.buf, message.buf);
> > +			strbuf_release(&message);
> 
> ... and this one is what gets called from the above caller; we lost
> the final LF (if there is) from the output, that is compensated by
> the caller.

Yep, thats correct.

> 
> How well do we work with the "-z" output format, by the way, with
> the hardcoded '\n' on the output codepath?

From my tests, `-z` plays well with my changes. I'll add some tests to
be sure, though.

> 
> Making a new allocation feels inefficient just to omit the trailing
> newlines.  I wonder if a helper function that takes a "const char *"
> and returns a "const char *" in that string that points at the CRLF
> or LF or NUL at its end would be warranted.  If we do not care about
> CRLF, this part would become something like...
> 
> 	if (oneline) {
> 		const char *endp = strchrnul(info->message, '\n');
> 		printf("%s: %.*s", selector.buf,
> 			(int)(endp - info->message), info->message);
> 	}

Yep, I think that this works. In fact, we can probably just do

 	if (oneline) {
 		const char *endp = strchrnul(info->message, '\n');
		int len = strlen(info->message);
		if (len > 0)
			len--;
 		printf("%s: %.*s", selector.buf,
 			len, info->message);
 	}

because...

> but I didn't trace the code/data flow to see where info->message
> comes from well enough to tell if we need to worry about CRLF.  I
> thought reflogs are always written with LF termination, though.

I think that you are right. Reflogs are always written with LF
termination. This can be seen in get_reflog_message():

	void get_reflog_message(struct strbuf *sb,
				struct reflog_walk_info *reflog_info)
	{
		struct commit_reflog *commit_reflog = reflog_info->last_commit_reflog;
		struct reflog_info *info;
		size_t len;

		if (!commit_reflog)
			return;

		info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
		len = strlen(info->message);
		if (len > 0)
=>			len--; /* strip away trailing newline */
		strbuf_add(sb, info->message, len);
	}

> 
> Thanks.

  reply	other threads:[~2019-11-08  8:50 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-04 20:03 [PATCH 0/8] learn the "summary" pretty format Denton Liu
2019-11-04 20:03 ` [PATCH 1/8] pretty-formats.txt: use generic terms for hash Denton Liu
2019-11-04 20:03 ` [PATCH 2/8] revision: make get_revision_mark() return const pointer Denton Liu
2019-11-04 20:03 ` [PATCH 3/8] revision: change abbrev_commit_given to abbrev_commit_explicit Denton Liu
2019-11-04 20:03 ` [PATCH 4/8] pretty.c: inline initalize format_context Denton Liu
2019-11-04 20:03 ` [PATCH 5/8] pretty.c: extract functionality to repo_format_commit_generic() Denton Liu
2019-11-04 20:04 ` [PATCH 6/8] reflog-walk.c: don't print last newline with oneline Denton Liu
2019-11-06  5:12   ` Junio C Hamano
2019-11-08  8:50     ` Denton Liu [this message]
2019-11-04 20:04 ` [PATCH 7/8] pretty: implement 'summary' format Denton Liu
2019-11-04 20:16   ` Eric Sunshine
2019-11-04 20:35     ` Denton Liu
2019-11-04 20:38       ` Eric Sunshine
2019-11-04 20:45         ` Denton Liu
2019-11-04 20:04 ` [PATCH 8/8] SubmittingPatches: use `--pretty=summary` Denton Liu
2019-11-08 20:08 ` [PATCH v2 00/10] learn the "summary" pretty format Denton Liu
2019-11-08 20:08   ` [PATCH v2 01/10] SubmittingPatches: use generic terms for hash Denton Liu
2019-11-08 20:08   ` [PATCH v2 02/10] pretty-formats.txt: " Denton Liu
2019-11-08 20:08   ` [PATCH v2 03/10] revision: make get_revision_mark() return const pointer Denton Liu
2019-11-08 20:08   ` [PATCH v2 04/10] revision: change abbrev_commit_given to abbrev_commit_explicit Denton Liu
2019-11-08 20:08   ` [PATCH v2 05/10] pretty.c: inline initalize format_context Denton Liu
2019-11-08 20:08   ` [PATCH v2 06/10] pretty.c: extract functionality to repo_format_commit_generic() Denton Liu
2019-11-08 20:08   ` [PATCH v2 07/10] t4205: cover `git log --reflog -z` blindspot Denton Liu
2019-11-08 20:36     ` Eric Sunshine
2019-11-08 21:47       ` Denton Liu
2019-11-08 21:58         ` Eric Sunshine
2019-11-08 20:08   ` [PATCH v2 08/10] reflog-walk.c: move where the newline is added Denton Liu
2019-11-08 20:08   ` [PATCH v2 09/10] pretty: implement 'summary' format Denton Liu
2019-11-08 20:46     ` Eric Sunshine
2019-11-09  6:38     ` René Scharfe
2019-11-10  6:25       ` Junio C Hamano
2019-11-11 23:47         ` Denton Liu
2019-11-14  0:37           ` SZEDER Gábor
2019-11-14  2:44             ` Junio C Hamano
2019-11-09  6:38     ` René Scharfe
2019-11-14  1:10     ` SZEDER Gábor
2019-11-08 20:08   ` [PATCH v2 10/10] SubmittingPatches: use `--pretty=summary` Denton Liu
2019-11-14 20:47   ` [PATCH v3 00/10] learn the "reference" pretty format Denton Liu
2019-11-14 20:47     ` [PATCH v3 01/10] SubmittingPatches: use generic terms for hash Denton Liu
2019-11-14 20:47     ` [PATCH v3 02/10] pretty-formats.txt: " Denton Liu
2019-11-14 20:47     ` [PATCH v3 03/10] SubmittingPatches: remove dq from commit reference Denton Liu
2019-11-14 20:47     ` [PATCH v3 04/10] completion: complete `tformat:` pretty format Denton Liu
2019-11-14 20:47     ` [PATCH v3 05/10] revision: make get_revision_mark() return const pointer Denton Liu
2019-11-14 20:47     ` [PATCH v3 06/10] pretty.c: inline initalize format_context Denton Liu
2019-11-14 20:47     ` [PATCH v3 07/10] t4205: cover `git log --reflog -z` blindspot Denton Liu
2019-11-14 20:47     ` [PATCH v3 08/10] pretty: provide short date format Denton Liu
2019-11-14 20:47     ` [PATCH v3 09/10] pretty: implement 'reference' format Denton Liu
2019-11-15  3:33       ` Todd Zullinger
2019-11-15  6:07       ` Junio C Hamano
2019-11-15 13:18         ` SZEDER Gábor
2019-11-16  1:46           ` Junio C Hamano
2019-11-18  1:44             ` Junio C Hamano
2019-11-18  1:42         ` Junio C Hamano
2019-11-15  8:07       ` Eric Sunshine
2019-11-14 20:47     ` [PATCH v3 10/10] SubmittingPatches: use `--pretty=reference` Denton Liu
2019-11-19  0:21     ` [PATCH v4 00/11] learn the "reference" pretty format Denton Liu
2019-11-19  0:21       ` [PATCH v4 01/11] SubmittingPatches: use generic terms for hash Denton Liu
2019-11-19  0:21       ` [PATCH v4 02/11] pretty-formats.txt: " Denton Liu
2019-11-19  0:21       ` [PATCH v4 03/11] SubmittingPatches: remove dq from commit reference Denton Liu
2019-11-19  0:21       ` [PATCH v4 04/11] completion: complete `tformat:` pretty format Denton Liu
2019-11-19  0:21       ` [PATCH v4 05/11] revision: make get_revision_mark() return const pointer Denton Liu
2019-11-19  0:21       ` [PATCH v4 06/11] pretty.c: inline initalize format_context Denton Liu
2019-11-19  0:21       ` [PATCH v4 07/11] t4205: cover `git log --reflog -z` blindspot Denton Liu
2019-11-19  0:21       ` [PATCH v4 08/11] pretty: provide short date format Denton Liu
2019-11-19  0:21       ` [PATCH v4 09/11] pretty: implement 'reference' format Denton Liu
2019-11-19  0:21       ` [PATCH v4 10/11] SubmittingPatches: use `--pretty=reference` Denton Liu
2019-11-19  0:21       ` [PATCH v4 11/11] squash! pretty: implement 'reference' format Denton Liu
2019-11-19  3:10         ` Junio C Hamano
2019-11-20  0:51       ` [PATCH v5 00/11] learn the "reference" pretty format Denton Liu
2019-11-20  0:51         ` [PATCH v5 01/11] SubmittingPatches: use generic terms for hash Denton Liu
2019-11-20  0:51         ` [PATCH v5 02/11] pretty-formats.txt: " Denton Liu
2019-11-20  0:51         ` [PATCH v5 03/11] SubmittingPatches: remove dq from commit reference Denton Liu
2019-11-20  0:51         ` [PATCH v5 04/11] completion: complete `tformat:` pretty format Denton Liu
2019-11-20  0:51         ` [PATCH v5 05/11] revision: make get_revision_mark() return const pointer Denton Liu
2019-11-20  0:51         ` [PATCH v5 06/11] pretty.c: inline initalize format_context Denton Liu
2019-11-20  0:51         ` [PATCH v5 07/11] t4205: cover `git log --reflog -z` blindspot Denton Liu
2019-11-20  0:51         ` [PATCH v5 08/11] pretty: provide short date format Denton Liu
2019-11-20  0:51         ` [PATCH v5 09/11] pretty: add struct cmt_fmt_map::default_date_mode_type Denton Liu
2019-11-20  3:15           ` Junio C Hamano
2019-11-20  0:51         ` [PATCH v5 10/11] pretty: implement 'reference' format Denton Liu
2019-11-20  0:51         ` [PATCH v5 11/11] SubmittingPatches: use `--pretty=reference` Denton Liu

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191108085024.GA26530@generichostname \
    --to=liu.denton@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).