From: Junio C Hamano <gitster@pobox.com>
To: Andreas Schwab <schwab@linux-m68k.org>
Cc: git@vger.kernel.org
Subject: Re: Bogus error from git log --full-diff
Date: Fri, 19 Jun 2020 10:10:16 -0700 [thread overview]
Message-ID: <xmqqtuz7hthj.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <87h7v7xf1n.fsf@igel.home> (Andreas Schwab's message of "Fri, 19 Jun 2020 17:15:32 +0200")
Andreas Schwab <schwab@linux-m68k.org> writes:
> If you have log.follow=true, then git log --full-diff doesn't work any
> more, giving a bogus error:
Does "any more" mean it used to work with older version of Git, or
it used to work before log.follow is thrown into the configuration
file?
> $ ./git -c log.follow=true log --full-diff .
> fatal: --follow requires exactly one pathspec
I see one and half possible bogosities in here.
* "--follow" is about following a single path, so even without
"--full-diff", i.e. "git log --follow .", should not proceed but
notice it as an error. The pathspec should name a single path,
like "helloworld.py" (and no, git does not track directories, so
"." is not a single path. The pathspec "." matches everything
under that directory).
* "--full-diff" wants to make a full comparison between two trees
(in the case of "git log", the child and its parent(s)), but
"--follow" wants to make a comparison between just two blobs
(i.e. the path that it is following in the child, and the
"corresponding" blob in the parent commit(s)), so they are
inherently incompatible.
Since neither is flagged as an error, the "--follow" logic is upset
when "--full-diff" widens the input of the "diff" run internally
(the error message comes from the fact that full-diff cleared the
pathspec used to generate this diff that the "--follow" logic uses
to find the corresponding path it is following---it sees zero when
it wants to have one).
I said these are one-and-half, because a reasonable expectation by
the end user could be that the configured log.follow is automatically
turned off when any incompatible option is given from the command
line, i.e.
git -c log.follow=yes log --full-diff .
should be equivalent to
git log --full-diff .
and not
git log --full-diff --follow .
And with that, we should not see the bogus * 1.5 error message.
So, I see 3 potential things that can be improved. Tightened error
checking for "--follow" itself, tightened error checking for mutual
exclusivity, and turning configured log.follow off automatically.
Thanks.
prev parent reply other threads:[~2020-06-19 17:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-19 15:15 Bogus error from git log --full-diff Andreas Schwab
2020-06-19 16:14 ` Konstantin Tokarev
2020-06-19 17:13 ` Junio C Hamano
2020-06-19 17:10 ` Junio C Hamano [this message]
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqtuz7hthj.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=schwab@linux-m68k.org \
/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.
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 NNTP newsgroup(s).