From: Jakub Narebski <jnareb@gmail.com>
To: Nanako Shiraishi <nanako3@lavabit.com>
Cc: git@vger.kernel.org, Luben Tuikov <ltuikov@yahoo.com>
Subject: Re: [PATCH 2/3] gitweb: Cache $parent_commit info in git_blame()
Date: Wed, 10 Dec 2008 14:39:17 +0100 [thread overview]
Message-ID: <200812101439.18526.jnareb@gmail.com> (raw)
In-Reply-To: <20081210124901.6117@nanako3.lavabit.com>
On Wed, 10 Dec 2008, Nanako Shiraishi wrote:
> Quoting Jakub Narebski <jnareb@gmail.com>:
>
> > Unfortunately the implementation in 244a70e used one call for
> > git-rev-parse to find parent revision per line in file, instead of
> > using long lived "git cat-file --batch-check" (which might not existed
> > then), or changing validate_refname to validate_revision and made it
> > accept <rev>^, <rev>^^, <rev>^^^ etc. syntax.
>
> Could you substantiate why this is "Unfortunate"?
Because it calls git-rev-parse once for _each line_, even if for lines
in the group of neighbour lines blamed by same commit $parent_commit
is the same, and even if you need to calculate $parent_commit only once
per unique individual commit present in blame output.
> Is the new implementation faster? By how much?
File | L[1] | C[2] || Time0[3] | Before[4] | After[4]
====================================================================
blob.h | 18 | 4 || 0m1.727s | 0m2.545s | 0m2.474s
GIT-VERSION-GEN | 42 | 13 || 0m2.165s | 0m2.448s | 0m2.071s
README | 46 | 6 || 0m1.593s | 0m2.727s | 0m2.242s
revision.c | 1923 | 121 || 0m2.357s | 0m30.365s | 0m7.028s
gitweb/gitweb.perl | 6291 | 428 || 0m8.080s | 1m37.244s | 0m20.627s
File | L/C | Before/After
=========================================
blob.h | 4.5 | 1.03
GIT-VERSION-GEN | 3.2 | 1.18
README | 7.7 | 1.22
revision.c | 15.9 | 4.32
gitweb/gitweb.perl | 14.7 | 4.71
As you can see the greater ratio of lines in file to unique commits
in blame output, the greater gain from the new implementation.
Footnotes:
~~~~~~~~~~
[1] Lines:
$ wc -l <file>
[2] Individual commits in blame output:
$ git blame -p <file> | grep author-time | wc -l
[3] Time for running "git blame -p" (user time, single run):
$ time git blame -p <file> >/dev/null
[4] Time to run gitweb as Perl script from command line:
$ gitweb-run.sh "p=git.git;a=blame;f=<file>" > /dev/null 2>&1
Appendix A:
~~~~~~~~~~~
#!/bin/bash
export GATEWAY_INTERFACE="CGI/1.1"
export HTTP_ACCEPT="*/*"
export REQUEST_METHOD="GET"
export QUERY_STRING=""$1""
export PATH_INFO=""$2""
export GITWEB_CONFIG="/home/jnareb/git/gitweb/gitweb_config.perl"
perl -- /home/jnareb/git/gitweb/gitweb.perl
# end of gitweb-run.sh
> When "previous" commit information is available in the output from
> "git blame", can you make use of it?
Yes, I could; but I don't think it got implemented.
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-12-10 13:40 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-09 22:43 [PATCH 0/3] gitweb: Improve git_blame in preparation for incremental blame Jakub Narebski
2008-12-09 22:46 ` [PATCH 1/3] gitweb: Move 'lineno' id from link to row element in git_blame Jakub Narebski
2008-12-10 5:55 ` Luben Tuikov
2008-12-17 8:13 ` Petr Baudis
2008-12-09 22:48 ` [PATCH 2/3] gitweb: Cache $parent_commit info in git_blame() Jakub Narebski
2008-12-10 3:49 ` Nanako Shiraishi
2008-12-10 13:39 ` Jakub Narebski [this message]
2008-12-10 20:27 ` Junio C Hamano
2008-12-11 0:33 ` [PATCH 2/3 (edit v2)] " Jakub Narebski
2008-12-11 4:08 ` Luben Tuikov
2008-12-11 4:18 ` Junio C Hamano
2008-12-12 3:05 ` Junio C Hamano
2008-12-12 17:20 ` Jakub Narebski
2008-12-17 8:19 ` Petr Baudis
2008-12-17 8:34 ` Junio C Hamano
2008-12-10 6:20 ` [PATCH 2/3] " Luben Tuikov
2008-12-10 15:15 ` Jakub Narebski
2008-12-10 20:05 ` Luben Tuikov
2008-12-10 21:03 ` Jakub Narebski
2008-12-10 21:15 ` Luben Tuikov
2008-12-09 22:48 ` [PATCH 3/3] gitweb: A bit of code cleanup " Jakub Narebski
2008-12-10 2:13 ` Jakub Narebski
2008-12-10 8:35 ` Junio C Hamano
2008-12-10 6:24 ` Luben Tuikov
2008-12-10 20:11 ` [RFC/PATCH 4/3] gitweb: Incremental blame (proof of concept) Jakub Narebski
2008-12-11 0:47 ` Junio C Hamano
2008-12-11 1:22 ` Jakub Narebski
2008-12-11 17:28 ` Jakub Narebski
2008-12-11 22:34 ` Jakub Narebski
2008-12-14 0:17 ` [RFC/PATCH v2] " Jakub Narebski
2008-12-14 16:11 ` [RFC] gitweb: Incremental blame - suggestions for improvements Jakub Narebski
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=200812101439.18526.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=ltuikov@yahoo.com \
--cc=nanako3@lavabit.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 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).