git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: local clone performance

From
Jon Smirl <jonsmirl@gmail.com>
Date
Jul 27, 2006, 18:36 UTC
Message-ID
<9e4733910607271136n55545959y3dbff97b1e5efe31@mail.gmail.com>
In-Reply-To
<20060727181554.GD13776@pasky.or.cz>
On 7/27/06, Petr Baudis <pasky@suse.cz> wrote:
Show 20 quoted lines
> Dear diary, on Thu, Jul 27, 2006 at 01:38:00AM CEST, I got a letter
> where Jon Smirl <jonsmirl@gmail.com> said that...
> > Comparing git-clone to cg-clone
> >
> > [jonsmirl@jonsmirl apps]$ time git-clone git foo
> > ......
> > real    0m5.755s
> > user    0m4.548s
> > sys     0m0.512s
> >
> > [jonsmirl@jonsmirl apps]$ time cg-clone git foo
> > ....
> > real    0m18.970s
> > user    0m10.737s
> > sys     0m1.392s
> >
> > Why does it take cg clone so long to set up the missing tags?
> > git-clone is over 3x faster.
>
>   How many tags do you have?
I am cloning the git source tree. It looks to have about 40 tags.
Show 13 quoted lines
>   It's true that cg-clone does not scale very well with big amounts of
> tags, because it won't fetch tagged objects you wouldn't get otherwise
> (so if you tagged some random huge blob or a history line which is not
> part of any branch you have, cg-clone won't grab it all). This
> unfortunately costs us one special fetch invocation per tag; I will look
> into hacking git-local-fetch to accept multiple commit ids at once, that
> should speed it up considerably.
>
>   That said, with cg-clone -a I will be able to cut that difference
> entirely and blindly take everything from the other repository.
>
>   Could you please try the patch below and check if it has at least
> any measurable impact on the performance at all? Thanks.

New timings real 0m11.259s user 0m9.977s sys 0m1.280s

That's a 40% improvement.
Show 54 quoted lines
> diff --git a/cg-fetch b/cg-fetch
> index a6e6959..23e0e77 100755
> --- a/cg-fetch
> +++ b/cg-fetch
> @@ -54,7 +54,6 @@ _git_wc_unneeded=1
>
>  fetch_progress()
>  {
> -       [ $verbose -ge 2 ] && exec cat
>         if [ -t 1 ]; then
>                 exec "${COGITO_LIB}"cg-Xfetchprogress "$_git_objects"
>         else
> @@ -166,7 +165,11 @@ fetch_http()
>  {
>         whead=
>         [ "$3" ] && whead="-w $3"
> -       (git-http-fetch -a -v $whead $recovery "$1" "$2/" 2>&1 /dev/null) | fetch_progress
> +       if [ $verbose -ge 2 ]; then
> +               git-http-fetch -a -v $whead $recovery "$1" "$2/"
> +       else
> +               (git-http-fetch -a -v $whead $recovery "$1" "$2/" 2>&1 /dev/null) | fetch_progress
> +       fi
>         return ${PIPESTATUS[0]}
>  }
>
> @@ -197,7 +200,11 @@ fetch_local()
>  {
>         whead=
>         [ "$3" ] && whead="-w $3"
> -       (git-local-fetch -a -l -v $whead $recovery "$1" "$2" 2>&1 /dev/null) | fetch_progress
> +       if [ $verbose -ge 2 ]; then
> +               git-local-fetch -a -l -v $whead $recovery "$1" "$2"
> +       else
> +               (git-local-fetch -a -l -v $whead $recovery "$1" "$2" 2>&1 /dev/null) | fetch_progress
> +       fi
>         return ${PIPESTATUS[0]}
>  }
>
> @@ -230,6 +237,7 @@ fetch_tags()
>                         # if so, fetch the tag -- which should be
>                         # a cheap operation -- to complete the chain.
>                         echo -n "Missing tag ${tagname#tags/}... "
> +                       local verbose=2
>                         if $fetch "$tagname" "$uri" "$tagname" 2>/dev/null >&2; then
>                                 echo "retrieved"
>                         else
>
>
> --
>                                 Petr "Pasky" Baudis
> Stuff: http://pasky.or.cz/
> Snow falling on Perl. White noise covering line noise.
> Hides all the bugs too. -- J. Putnam
>
-- 
Jon Smirl
jonsmirl@gmail.com
Previous: Petr Baudis
Message 3 of 3 in “local clone performance”
  1. Jon SmirlJul 26, 2006
  2. Petr BaudisJul 27, 2006
  3. Jon SmirlJul 27, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.