git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] line-log: suppress diff output with "-s"

From
Jeff King <peff@peff.net>
Date
Feb 25, 2019, 18:55 UTC
Message-ID
<20190225185519.GA31135@sigill.intra.peff.net>
In-Reply-To
<20190225175918.GV1622@szeder.dev>
On Mon, Feb 25, 2019 at 06:59:18PM +0100, SZEDER Gábor wrote:
Show 11 quoted lines
> On Mon, Feb 25, 2019 at 12:32:49PM -0500, Jeff King wrote:
> > diff --git a/line-log.c b/line-log.c
> > index 24e21731c4..863f5cbe0f 100644
> > --- a/line-log.c
> > +++ b/line-log.c
> > @@ -1106,7 +1106,8 @@ int line_log_print(struct rev_info *rev, struct commit *commit)
> >  	struct line_log_data *range = lookup_line_range(rev, commit);
> 
> Note that the result of this lookup_line_range() call is only used
> when we do show the diff below; if we don't, there is no use calling
> it.

Thanks. I think sometimes we can depend on an optimizing compiler to delay the initialization until use, but in this case the function call is much too complex to be reordered. Here's a v2 which bumps it down.

-- >8 --
Subject: [PATCH v2] line-log: suppress diff output with "-s"

When "-L" is in use, we ignore any diff output format that the user provides to us, and just always print a patch (with extra context lines covering the whole area of interest). It's not entirely clear what we should do with all formats (e.g., should "--stat" show just the diffstat of the touched lines, or the stat for the whole file?).

But "-s" is pretty clear: the user probably wants to see just the commits that touched those lines, without any diff at all. Let's at least make that work.

Signed-off-by: Jeff King <peff@peff.net>
---
 line-log.c          | 6 ++++--
 t/t4211-line-log.sh | 7 +++++++
 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/line-log.c b/line-log.c
index 24e21731c4..59248e37cc 100644
--- a/line-log.c
+++ b/line-log.c
@@ -1103,10 +1103,12 @@ static int process_all_files(struct line_log_data **range_out,
 
 int line_log_print(struct rev_info *rev, struct commit *commit)
 {
-	struct line_log_data *range = lookup_line_range(rev, commit);
 
 	show_log(rev);
-	dump_diff_hacky(rev, range);
+	if (!(rev->diffopt.output_format & DIFF_FORMAT_NO_OUTPUT)) {
+		struct line_log_data *range = lookup_line_range(rev, commit);
+		dump_diff_hacky(rev, range);
+	}
 	return 1;
 }
 
diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh
index bd5fe4d148..c9f2036f68 100755
--- a/t/t4211-line-log.sh
+++ b/t/t4211-line-log.sh
@@ -115,4 +115,11 @@ test_expect_success 'range_set_union' '
 	git log $(for x in $(test_seq 200); do echo -L $((2*x)),+1:c.c; done)
 '
 
+test_expect_success '-s shows only line-log commits' '
+	git log --format="commit %s" -L1,24:b.c >expect.raw &&
+	grep ^commit expect.raw >expect &&
+	git log --format="commit %s" -L1,24:b.c -s >actual &&
+	test_cmp expect actual
+'
+
 test_done
-- 
2.21.0.674.ga8a7ac9a24
Previous: SZEDER GáborNext: Randall S. Becker
Message 5 of 6 in “[BUG] git log -L ... -s does not suppress diff output”
  1. Matthew BoothFeb 25, 2019
  2. Jeff KingFeb 25, 2019
  3. line-log: suppress diff output with "-s"Jeff King, Feb 25, 2019
  4. SZEDER GáborFeb 25, 2019
  5. Jeff KingFeb 25, 2019
  6. Randall S. BeckerFeb 25, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.