git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git fetch slow as molasses due to tag downloading
@ 2006-12-14 15:40 Han-Wen Nienhuys
  2006-12-14 16:05 ` Johannes Schindelin
  0 siblings, 1 reply; 5+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-14 15:40 UTC (permalink / raw)
  To: git


Hello,

just upgraded our autobuilder from 1.4.3 to 1.4.4.2.

Now, our standard download command comes to a complete halt.  Judging
from the "ps -ef" apparently, it does 

   git-show-ref --verify --quiet -- [TAG]

This is done for every one of the 1500 tags that are in my repository. 
At approx 20 tags per second this takes an awful lot of time. 

1. Is this necessary? 

2. Is this efficient?  Wouldn't doing all tags in a single git-show-ref
invocation be potentially quicker?


-- 
 Han-Wen Nienhuys - hanwen@xs4all.nl - http://www.xs4all.nl/~hanwen

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

* Re: git fetch slow as molasses due to tag downloading
  2006-12-14 15:40 git fetch slow as molasses due to tag downloading Han-Wen Nienhuys
@ 2006-12-14 16:05 ` Johannes Schindelin
  2006-12-15  9:58   ` Jakub Narebski
  2006-12-15 21:55   ` Junio C Hamano
  0 siblings, 2 replies; 5+ messages in thread
From: Johannes Schindelin @ 2006-12-14 16:05 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Hi,

On Thu, 14 Dec 2006, Han-Wen Nienhuys wrote:

> just upgraded our autobuilder from 1.4.3 to 1.4.4.2.
> 
> Now, our standard download command comes to a complete halt.  Judging
> >from the "ps -ef" apparently, it does 
> 
>    git-show-ref --verify --quiet -- [TAG]
> 
> This is done for every one of the 1500 tags that are in my repository. 
> At approx 20 tags per second this takes an awful lot of time. 
> 
> 1. Is this necessary? 

Yes. The purpose is to check which tags have not yet been fetched.

> 2. Is this efficient?  Wouldn't doing all tags in a single git-show-ref 
> invocation be potentially quicker?

It is not efficient. But it cannot be solved like you propose, since it is 
inside a loop, and a "continue" is executed when the tag exists already.

IMHO this should be solved as a filter: "git-show-ref --stdin 
--show-invalid". Thus, git does not have to traverse _every_ ref for 
_every_ incoming tag.

Ciao,
Dscho

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

* Re: git fetch slow as molasses due to tag downloading
  2006-12-14 16:05 ` Johannes Schindelin
@ 2006-12-15  9:58   ` Jakub Narebski
  2006-12-15 21:55   ` Junio C Hamano
  1 sibling, 0 replies; 5+ messages in thread
From: Jakub Narebski @ 2006-12-15  9:58 UTC (permalink / raw)
  To: git

Johannes Schindelin wrote:

> IMHO this should be solved as a filter: "git-show-ref --stdin 
> --show-invalid". Thus, git does not have to traverse _every_ ref for 
> _every_ incoming tag.

Can you make it so? TIA.
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git


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

* Re: git fetch slow as molasses due to tag downloading
  2006-12-14 16:05 ` Johannes Schindelin
  2006-12-15  9:58   ` Jakub Narebski
@ 2006-12-15 21:55   ` Junio C Hamano
  2006-12-15 22:27     ` Jakub Narebski
  1 sibling, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2006-12-15 21:55 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> IMHO this should be solved as a filter: "git-show-ref --stdin 
> --show-invalid". Thus, git does not have to traverse _every_ ref for 
> _every_ incoming tag.

That sounds like a too specialized hack to me.  We should first
speed up the general "--verify $ref" case; as you corrected me
earlier it still has a useless loop.

If it is still too slow (which I suspect it could be the case,
with fork+exec overhead), we should _also_ pursue the filter
approach, but even then I think "filter out the valid ones" is a
specialized hack, if you mean "show only the invalid one's
names" by --show-invalid.

It would make sense to do

        $ git show-ref --show-invalid v1.0.0 v2.6.18
        f665776185ad074b236c00751d666da7d1977dbe refs/tags/v1.0.0
        - refs/tags/v2.6.18

(and its equivalent to take refs from --stdin) though.


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

* Re: git fetch slow as molasses due to tag downloading
  2006-12-15 21:55   ` Junio C Hamano
@ 2006-12-15 22:27     ` Jakub Narebski
  0 siblings, 0 replies; 5+ messages in thread
From: Jakub Narebski @ 2006-12-15 22:27 UTC (permalink / raw)
  To: git

Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
>> IMHO this should be solved as a filter: "git-show-ref --stdin 
>> --show-invalid". Thus, git does not have to traverse _every_ ref for 
>> _every_ incoming tag.
> 
> That sounds like a too specialized hack to me.  We should first
> speed up the general "--verify $ref" case; as you corrected me
> earlier it still has a useless loop.
> 
> If it is still too slow (which I suspect it could be the case,
> with fork+exec overhead), we should _also_ pursue the filter
> approach, but even then I think "filter out the valid ones" is a
> specialized hack, if you mean "show only the invalid one's
> names" by --show-invalid.
> 
> It would make sense to do
> 
>         $ git show-ref --show-invalid v1.0.0 v2.6.18
>         f665776185ad074b236c00751d666da7d1977dbe refs/tags/v1.0.0
>         - refs/tags/v2.6.18
> 
> (and its equivalent to take refs from --stdin) though.

Nice idea. And having '-' is probably better than using
00000000000000000000000000000000000000000 as for non-existing objects.

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git


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

end of thread, other threads:[~2006-12-15 22:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-14 15:40 git fetch slow as molasses due to tag downloading Han-Wen Nienhuys
2006-12-14 16:05 ` Johannes Schindelin
2006-12-15  9:58   ` Jakub Narebski
2006-12-15 21:55   ` Junio C Hamano
2006-12-15 22:27     ` Jakub Narebski

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