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

Re: [PATCH 3/3] Teach "git clone" to pack refs

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Mar 22, 2008, 01:31 UTC
Message-ID
<alpine.LNX.1.00.0803212123490.19665@iabervon.org>
In-Reply-To
<200803220213.54923.johan@herland.net>
On Sat, 22 Mar 2008, Johan Herland wrote:
Show 8 quoted lines
> In repos with many refs, it is unlikely that most refs will ever change.
> This fact is already exploited by "git gc" by executing "git pack-refs"
> to consolidate all refs into a single file.
> 
> When cloning a repo with many refs, it does not make sense to create the
> loose refs in the first place, just to have the next "git gc" consolidate
> them into one file. Instead, make "git clone" create the packed refs file
> immediately, and forego the loose refs completely.
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Show 24 quoted lines
> Signed-off-by: Johan Herland <johan@herland.net>
> ---
>  builtin-clone.c |    8 ++++++--
>  1 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/builtin-clone.c b/builtin-clone.c
> index 0a9c873..01c595e 100644
> --- a/builtin-clone.c
> +++ b/builtin-clone.c
> @@ -18,6 +18,7 @@
>  #include "transport.h"
>  #include "strbuf.h"
>  #include "dir.h"
> +#include "pack-refs.h"
>  
>  /*
>   * Overall FIXMEs:
> @@ -313,8 +314,11 @@ static struct ref *write_remote_refs(const struct ref *refs, struct refspec *ref
>  	get_fetch_map(refs, tag_refspec, &tail, 0);
>  
>  	for (r = local_refs; r; r = r->next)
> -		update_ref(reflog,
> -			   r->peer_ref->name, r->old_sha1, NULL, 0, DIE_ON_ERR);
> +		add_extra_ref(r->peer_ref->name, r->old_sha1, 0);
Wow, clever. Yes, this should work perfectly.
Show 11 quoted lines
> +
> +	pack_refs(PACK_REFS_ALL);
> +	clear_extra_refs();
> +
>  	return local_refs;
>  }
>  
> -- 
> 1.5.5.rc0.117.ga5237
> 
> 
Previous: Johan HerlandNext: Junio C Hamano
Message 11 of 13 in “Teach builtin-clone to pack refs”
  1. 0/3 Teach builtin-clone to pack refsJohan Herland, Mar 22, 2008
  2. 1/3 Move pack_refs() and friends into libgitJohan Herland, Mar 22, 2008
  3. 2/3 Prepare testsuite for a "git clone" that packs refsJohan Herland, Mar 22, 2008
  4. Daniel BarkalowApr 14, 2008
  5. Johan HerlandApr 14, 2008
  6. 1/4 Incorporate fetched packs in future object traversalJohan Herland, Apr 14, 2008
  7. 2/4 Move pack_refs() and friends into libgitJohan Herland, Apr 14, 2008
  8. 3/4 Prepare testsuite for a "git clone" that packs refsJohan Herland, Apr 14, 2008
  9. 4/4 Teach "git clone" to pack refsJohan Herland, Apr 14, 2008
  10. 3/3 Teach "git clone" to pack refsJohan Herland, Mar 22, 2008
  11. Daniel BarkalowMar 22, 2008
  12. Junio C HamanoMar 23, 2008
  13. Johan HerlandMar 23, 2008

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.