git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git-annotate efficiency
@ 2006-02-24 15:37 Morten Welinder
  2006-02-24 18:00 ` Morten Welinder
  0 siblings, 1 reply; 4+ messages in thread
From: Morten Welinder @ 2006-02-24 15:37 UTC (permalink / raw)
  To: GIT Mailing List

So I wanted to give git-annotate a spin and typed...

    git annotate Makefile

Bad idea.  It's been ten minutes and no output yet.  While the script only
appears to use ~20% of cpu according to top, an strace shows that it
spins off a huge number of very short-lived subprocesses.

Morten




...
rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_DFL}, 8) = 0
waitpid(1539, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 1539
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigaction(SIGHUP, {SIG_DFL}, NULL, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL}, NULL, 8) = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
clone(child_stack=0,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x401db708) = 1540
close(6)                                = 0
close(4)                                = 0
read(5, "", 4)                          = 0
close(5)                                = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfffc718) = -1 EINVAL
(Invalid argument)
_llseek(3, 0, 0xbfffc760, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
read(3, "diff --git a/Makefile b/Makefile"..., 4096) = 63
read(3, "--- a/Makefile\n+++ b/Makefile\n@@"..., 4096) = 203
--- SIGCHLD (Child exited) @ 0 (0) ---
read(3, "", 4096)                       = 0
close(3)                                = 0
rt_sigaction(SIGHUP, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {SIG_IGN}, {SIG_DFL}, 8) = 0
...

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git-annotate efficiency
  2006-02-24 15:37 git-annotate efficiency Morten Welinder
@ 2006-02-24 18:00 ` Morten Welinder
  2006-02-24 19:06   ` Randal L. Schwartz
  2006-02-24 19:42   ` Ryan Anderson
  0 siblings, 2 replies; 4+ messages in thread
From: Morten Welinder @ 2006-02-24 18:00 UTC (permalink / raw)
  To: GIT Mailing List

It looks like handle_rev is seeing the same revisions over and over again.
I don't know why that would be, but the following patch just skips dups.
I have no idea if it is right, though.

Morten


diff --git a/git-annotate.perl b/git-annotate.perl
index 3800c46..a5e2d86 100755
--- a/git-annotate.perl
+++ b/git-annotate.perl
@@ -117,7 +117,10 @@ sub init_claim {

 sub handle_rev {
        my $i = 0;
+       my %seen = ();
        while (my $rev = shift @revqueue) {
+               next if $seen{$rev};
+               $seen{$rev} = 1;

                my %revinfo = git_commit_info($rev);

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: git-annotate efficiency
  2006-02-24 18:00 ` Morten Welinder
@ 2006-02-24 19:06   ` Randal L. Schwartz
  2006-02-24 19:42   ` Ryan Anderson
  1 sibling, 0 replies; 4+ messages in thread
From: Randal L. Schwartz @ 2006-02-24 19:06 UTC (permalink / raw)
  To: Morten Welinder; +Cc: GIT Mailing List

>>>>> "Morten" == Morten Welinder <mwelinder@gmail.com> writes:

Morten> It looks like handle_rev is seeing the same revisions over and over again.
Morten> I don't know why that would be, but the following patch just skips dups.
Morten> I have no idea if it is right, though.

Morten> Morten


Morten> diff --git a/git-annotate.perl b/git-annotate.perl
Morten> index 3800c46..a5e2d86 100755
Morten> --- a/git-annotate.perl
Morten> +++ b/git-annotate.perl
Morten> @@ -117,7 +117,10 @@ sub init_claim {

Morten>  sub handle_rev {
Morten>         my $i = 0;
Morten> +       my %seen = ();
Morten>         while (my $rev = shift @revqueue) {
Morten> +               next if $seen{$rev};
Morten> +               $seen{$rev} = 1;

Morten>                 my %revinfo = git_commit_info($rev);

The traditional idiom for that is

        next if $seen{$rev}++;

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git-annotate efficiency
  2006-02-24 18:00 ` Morten Welinder
  2006-02-24 19:06   ` Randal L. Schwartz
@ 2006-02-24 19:42   ` Ryan Anderson
  1 sibling, 0 replies; 4+ messages in thread
From: Ryan Anderson @ 2006-02-24 19:42 UTC (permalink / raw)
  To: Morten Welinder; +Cc: GIT Mailing List

On Fri, Feb 24, 2006 at 01:00:24PM -0500, Morten Welinder wrote:
> It looks like handle_rev is seeing the same revisions over and over again.
> I don't know why that would be, but the following patch just skips dups.
> I have no idea if it is right, though.

Merges.

a--b--c--d--f
   \-g--h--/

It would do f,d,c,b,a + f,h,g,b,a

So yes, this fix is correct, and Junio, I'll be doing some changes this
weekend and send it along with a few other things.

(On a medium-sized test tree at work with 3500 commits in the tree, 37
on the main Makefile (6 merges), this cuts the annotate time from 10s to a little
over 2, so it's, umm, very worthwhile.)

> 
> Morten
> 
> 
> diff --git a/git-annotate.perl b/git-annotate.perl
> index 3800c46..a5e2d86 100755
> --- a/git-annotate.perl
> +++ b/git-annotate.perl
> @@ -117,7 +117,10 @@ sub init_claim {
> 
>  sub handle_rev {
>         my $i = 0;
> +       my %seen = ();
>         while (my $rev = shift @revqueue) {
> +               next if $seen{$rev};
> +               $seen{$rev} = 1;
> 
>                 my %revinfo = git_commit_info($rev);
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 

Ryan Anderson
  sometimes Pug Majere

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2006-02-24 19:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-24 15:37 git-annotate efficiency Morten Welinder
2006-02-24 18:00 ` Morten Welinder
2006-02-24 19:06   ` Randal L. Schwartz
2006-02-24 19:42   ` Ryan Anderson

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).