git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2] line-log: suppress diff output with "-s"
Date: Sun, 10 Mar 2019 23:54:33 -0400	[thread overview]
Message-ID: <20190311035432.GC7087@sigill.intra.peff.net> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.1903081942340.41@tvgsbejvaqbjf.bet>

On Fri, Mar 08, 2019 at 07:44:22PM +0100, Johannes Schindelin wrote:

> > Do we want to do something like this:
> > 
> > diff --git a/revision.c b/revision.c
> > index eb8e51bc63..a1b4fe2aa6 100644
> > --- a/revision.c
> > +++ b/revision.c
> > @@ -2689,6 +2689,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
> >  	if (revs->first_parent_only && revs->bisect)
> >  		die(_("--first-parent is incompatible with --bisect"));
> >  
> > +	if (revs->line_level_traverse &&
> > +	    (revs->diffopt.output_format & ~(DIFF_FORMAT_PATCH|DIFF_FORMAT_NO_OUTPUT)))
> > +		die(_("-L does not yet support diff formats besides -p and -s"));
> > +
> >  	if (revs->expand_tabs_in_log < 0)
> >  		revs->expand_tabs_in_log = revs->expand_tabs_in_log_default;
> 
> Since you already have that patch, why not go wild and apply it, too? ;-)

OK, then. Here it is as a real patch.

> I guess you copy-edited the code from somewhere because you usually do
> leave spaces around the `|`... I don't care, though ;-)

Heh, nope, I wrote it by hand.

I actually wondered if there was a better way to write this. One of the
things that bugs me about the patch is that this policy check is so far
from actual line-log code, which means the two may drift apart over
time. We could put a LINE_LOG_SUPPORTED_FORMATS into line-log.h, but
that's also pretty far from the actual code. We could just make the
output logic in the line-log code something like:

  if (NO_OUTPUT)
	...do no output...
  else if (PATCH || DEFAULT)
        ...show normal patch...
  else
	die("unsupported output format");

but it's probably a little friendlier to diagnose the problem up front,
not after we did a bunch of computation.  And most of these other
"incompatible" checks in setup_revisions() suffer from the same
maintainability problem. So instead, I went with the code above (with
spaces!) and protected it with some tests.

-- >8 --
Subject: [PATCH] line-log: detect unsupported formats

If you use "log -L" with an output format like "--raw" or "--stat",
we'll silently ignore the format and just output the normal patch.
Let's detect and complain about this, which at least tells the user
what's going on.

The tests here aren't exhaustive over the set of all formats, but it
should at least let us know if somebody breaks the format-checking.

Signed-off-by: Jeff King <peff@peff.net>
---
On top of the other patch, naturally.

 revision.c          |  4 ++++
 t/t4211-line-log.sh | 10 ++++++++++
 2 files changed, 14 insertions(+)

diff --git a/revision.c b/revision.c
index eb8e51bc63..cb69a227d5 100644
--- a/revision.c
+++ b/revision.c
@@ -2689,6 +2689,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
 	if (revs->first_parent_only && revs->bisect)
 		die(_("--first-parent is incompatible with --bisect"));
 
+	if (revs->line_level_traverse &&
+	    (revs->diffopt.output_format & ~(DIFF_FORMAT_PATCH | DIFF_FORMAT_NO_OUTPUT)))
+		die(_("-L does not yet support diff formats besides -p and -s"));
+
 	if (revs->expand_tabs_in_log < 0)
 		revs->expand_tabs_in_log = revs->expand_tabs_in_log_default;
 
diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh
index c9f2036f68..1db7bd0f59 100755
--- a/t/t4211-line-log.sh
+++ b/t/t4211-line-log.sh
@@ -122,4 +122,14 @@ test_expect_success '-s shows only line-log commits' '
 	test_cmp expect actual
 '
 
+test_expect_success '-p shows the default patch output' '
+	git log -L1,24:b.c >expect &&
+	git log -L1,24:b.c -p >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success '--raw is forbidden' '
+	test_must_fail git log -L1,24:b.c --raw
+'
+
 test_done
-- 
2.21.0.787.gbeacff058d


  reply	other threads:[~2019-03-11  3:54 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-07 19:45 [PATCH v2] line-log: suppress diff output with "-s" Jeff King
2019-03-08 15:38 ` Johannes Schindelin
2019-03-08 16:20   ` Jeff King
2019-03-08 18:44     ` Johannes Schindelin
2019-03-11  3:54       ` Jeff King [this message]
2019-03-11  1:49     ` Junio C Hamano

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=20190311035432.GC7087@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Johannes.Schindelin@gmx.de \
    --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).