From: Thomas Gummerer <t.gummerer@gmail.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: git@vger.kernel.org, Alexey Borzenkov <snaury@gmail.com>,
"Ren\?\? Scharfe" <l.s.r@web.de>,
Michael Haggerty <mhagger@alum.mit.edu>,
Tim Henigan <tim.henigan@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Bobby Powers <bobbypowers@gmail.com>,
Jens Lehmann <Jens.Lehmann@web.de>, Jeff King <peff@peff.net>
Subject: Re: [PATCH] diff: don't read index when --no-index is given
Date: Mon, 09 Dec 2013 20:14:01 +0100 [thread overview]
Message-ID: <87siu1n8g6.fsf@gmail.com> (raw)
In-Reply-To: <20131209151609.GA14841@google.com>
Jonathan Nieder <jrnieder@gmail.com> writes:
> Thomas Gummerer wrote:
>
>> git diff --no-index ... currently reads the index, during setup, when
>> calling gitmodules_config(). In the usual case this gives us some
>> performance drawbacks,
>
> Makes sense.
>
>> but it's especially annoying if there is a broken
>> index file.
>
> Is this really a normal case? It makes sense that as a side-effect it
> is easier to use "git diff --no-index" as a general-purpose tool while
> investigating a broken repo, but I would have thought that quickly
> learning a repo is broken is a good thing in any case.
>
> A little more information about the context where this came up would
> be helpful, I guess.
It came up while I was working on index-v5, where I had to investigate
quite a few repositories where the index was broken, especially when I
was changing the index format slightly. For example I would take one
version, use test-dump-cache-tree to dump the cache tree to a file,
change the format slightly, use test-dump-cache-tree again, and check
the difference with "git diff --no-index".
This might not be a very common use case, but maybe the patch might help
someone else too. (In addition to the performance improvements)
I'm not sure how much diff --no-index is used normally, but when the
index is broken that would be detected relatively soon anyway. I'm not
so worried about one more command working when it's broken.
> [...]
>> --- a/builtin/diff.c
>> +++ b/builtin/diff.c
> [...]
>> @@ -282,9 +282,18 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
>> *
>> * Other cases are errors.
>> */
>> + for (i = 1; i < argc; i++) {
>> + if (!strcmp(argv[i], "--"))
>> + break;
>> + if (!strcmp(argv[i], "--no-index")) {
>> + no_index = 1;
>> + break;
>> + }
>
> setup_revisions() uses the same logic that doesn't handle options that
> take arguments in their "unstuck" form (e.g., "--word-diff-regex --"),
> so this is probably not a regression, though I haven't checked. :)
The same logic is used in diff_no_index(), so I think it should be fine.
> [...]
>> prefix = setup_git_directory_gently(&nongit);
>> - gitmodules_config();
>> + if (!no_index)
>> + gitmodules_config();
>
> Perhaps we can improve performance and behavior by skipping the
> setup_git_directory_gently() call, too?
>
> That would help with the repairing-broken-repository case by
> working even if .git/config or .git/HEAD is broken, and I think
> it is more intuitive that the repository-local configuration is
> ignored by "git diff --no-index". It would also help with
> performance by avoiding some filesystem access.
Yes, I think that would make sense, thanks. I tested it, and it didn't
change the performance, but it's still a good change for the broken
repository case. Will change in the re-roll and add a test for that.
> [...]
>> +test_expect_success 'git diff --no-index with broken index' '
>> + cd repo &&
>> + echo broken >.git/index &&
>> + test_expect_code 0 git diff --no-index a ../non/git/a
>
> Clever. I wouldn't use "test_expect_code 0", since that's
> already implied by including the "git diff --no-index" call
> in the && chain.
Thanks, will change. Thanks a lot for your review. Will send a re-roll
soon.
> Thanks and hope that helps,
> Jonathan
--
Thomas
next prev parent reply other threads:[~2013-12-09 19:14 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-09 12:05 [PATCH] diff: don't read index when --no-index is given Thomas Gummerer
2013-12-09 15:16 ` Jonathan Nieder
2013-12-09 17:27 ` Jens Lehmann
2013-12-09 19:06 ` Jonathan Nieder
2013-12-09 19:14 ` Thomas Gummerer [this message]
2013-12-09 19:20 ` Jonathan Nieder
2013-12-09 20:40 ` [PATCH v2] " Thomas Gummerer
2013-12-09 20:55 ` Torsten Bögershausen
2013-12-09 20:57 ` Eric Sunshine
2013-12-09 21:17 ` Thomas Gummerer
2013-12-09 20:30 ` [PATCH] " Junio C Hamano
2013-12-09 21:13 ` Thomas Gummerer
2013-12-10 17:52 ` [PATCH v3 1/2] diff: move no-index detection to builtin/diff.c Thomas Gummerer
2013-12-10 17:52 ` [PATCH v3 2/2] diff: don't read index when --no-index is given Thomas Gummerer
2013-12-10 18:18 ` Jonathan Nieder
2013-12-10 18:55 ` Thomas Gummerer
2013-12-10 18:16 ` [PATCH v3 1/2] diff: move no-index detection to builtin/diff.c Jonathan Nieder
2013-12-10 18:46 ` Thomas Gummerer
2013-12-11 9:58 ` [PATCH v4 " Thomas Gummerer
2013-12-11 9:58 ` [PATCH v4 2/2] diff: don't read index when --no-index is given Thomas Gummerer
2013-12-12 20:25 ` Junio C Hamano
2013-12-14 0:44 ` Jonathan Nieder
2013-12-14 0:43 ` [PATCH v4 1/2] diff: move no-index detection to builtin/diff.c Jonathan Nieder
2013-12-14 10:42 ` Thomas Gummerer
2013-12-16 17:48 ` Junio C Hamano
2013-12-16 19:23 ` [PATCH 1/2] diff: add test for --no-index executed outside repo Thomas Gummerer
2013-12-16 19:23 ` [PATCH 2/2] diff: avoid some nesting Thomas Gummerer
2013-12-16 19:42 ` [PATCH 1/2] diff: add test for --no-index executed outside repo Junio C Hamano
2013-12-14 13:07 ` [PATCH v5 1/2] diff: move no-index detection to builtin/diff.c Thomas Gummerer
2013-12-14 13:07 ` [PATCH v5 2/2] diff: don't read index when --no-index is given Thomas Gummerer
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=87siu1n8g6.fsf@gmail.com \
--to=t.gummerer@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=bobbypowers@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=l.s.r@web.de \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
--cc=snaury@gmail.com \
--cc=tim.henigan@gmail.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.