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

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

From
Jeff King <peff@peff.net>
Date
Feb 25, 2019, 17:32 UTC
Message-ID
<20190225173248.GB17524@sigill.intra.peff.net>
In-Reply-To
<20190225171817.GA17524@sigill.intra.peff.net>
On Mon, Feb 25, 2019 at 12:18:17PM -0500, Jeff King wrote:
Show 13 quoted lines
> > git log docs suggest it should not do this:
> > 
> >        -s, --no-patch
> >            Suppress diff output. Useful for commands like git show
> > that show the patch by default, or to cancel
> >            the effect of --patch.
> > 
> > Couldn't find anything in a search of the archives of this mailing
> > list, although that's obviously far from conclusive. Seems to be
> > longstanding, as it was mentioned on StackOverflow back in 2015:
> 
> I think the issue is just that "-L" follows a very different code path
> than the normal diff generator. Perhaps something like this helps?

Here it is with a test and a commit message (I don't think any doc update is necessary; as you noted, the docs already imply this is what should happen).

-- >8 --
Subject: [PATCH] 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>
---
This punts completely on the larger question of what should happen with
other formats like "--stat", "--raw", etc. They'll continue to be
ignored entirely and we'll generate the line-log patch. Possibly we
should detect and complain?
 line-log.c          | 3 ++-
 t/t4211-line-log.sh | 7 +++++++
 2 files changed, 9 insertions(+), 1 deletion(-)
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);
 
 	show_log(rev);
-	dump_diff_hacky(rev, range);
+	if (!(rev->diffopt.output_format & DIFF_FORMAT_NO_OUTPUT))
+		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.672.g12e864cee7
Previous: Jeff KingNext: SZEDER Gábor
Message 3 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.