Re: [PATCH 3/3] Teach "git clone" to pack refs
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
>
>