From: Josiah Boning <jboning@gmail.com>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org
Subject: Re: git log with ordering option and --first-parent is unnecessarily slow
Date: Fri, 8 Apr 2016 22:42:15 -0700 [thread overview]
Message-ID: <CAKdicq_uNFcy0_SPephHX9KhEouYdk0ddj4g0y4nAiD90+eH3A@mail.gmail.com> (raw)
In-Reply-To: <20160409050116.GB25151@sigill.intra.peff.net>
On Fri, Apr 8, 2016 at 10:01 PM, Jeff King wrote:
> I do agree that --date-order on a linear parent walk cannot change the
> ordering (which guarantees child-before-parent), and is a noop. But
> note that not all first-parent invocations are strictly linear. For
> example:
>
> git log --first-parent --date-order master next
>
> which starts from two tips. We'd still want to order commits from the
> two lists according to --date-order.
Ah, indeed; multiple tips certainly count as a nonlinearity.
> I suppose we could catch the single-tip, first-parent case and ignore
> any ordering options which imply child-before-parent (which is currently
> all of them). But I did not think too hard if there are any other corner
> cases. This sounds like a case of "doctor, it hurts when I do this". Why
> do you want to add --date-order in such a case, when it is a noop?
It hurt when I did that, so I stopped. In my case, the git log command
was written when the repositories involved were much smaller, so the
delay was not so noticeable. Today I found and fixed the
invocation--but it still seems nice to fix at the git level, if that's
possible without adding much complexity.
> It's not the cost of sorting. It's the cost of accessing the commits (if
> you profile, you should see most time spent in zlib). So figuring out
> that the case is linear will require roughly the same expense.
I'm imagining that while traversing the commit graph, one could keep
an is_linear flag, which is set initially if starting from a single
tip, and becomes unset when a merge commit is encountered. If
is_linear is still true when the entire requested range or the desired
number of commit sare accumulated, then there's no need to sort.
This is, as a disclaimer, the guesswork of someone not familiar with
the codebase. I'll go read the source before imagining further :)
Josiah
prev parent reply other threads:[~2016-04-09 5:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-09 3:55 git log with ordering option and --first-parent is unnecessarily slow Josiah Boning
2016-04-09 5:01 ` Jeff King
2016-04-09 5:42 ` Josiah Boning [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=CAKdicq_uNFcy0_SPephHX9KhEouYdk0ddj4g0y4nAiD90+eH3A@mail.gmail.com \
--to=jboning@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/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).