summaryrefslogtreecommitdiff
path: root/builtin-clone.c
diff options
context:
space:
mode:
authorJohan Herland <johan@herland.net>2008-06-15 14:06:16 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-06-19 22:53:13 (GMT)
commit3e8aded20329bef35470eb469281f6b275d19dea (patch)
treecbb3d3d54236053acfba16d3ed1f9d16cf1d7a49 /builtin-clone.c
parentd0d12b476822bb8686ee883bd44b799563069a48 (diff)
downloadgit-3e8aded20329bef35470eb469281f6b275d19dea.zip
git-3e8aded20329bef35470eb469281f6b275d19dea.tar.gz
git-3e8aded20329bef35470eb469281f6b275d19dea.tar.bz2
Teach "git clone" to pack refs
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. Signed-off-by: Johan Herland <johan@herland.net> Acked-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-clone.c')
-rw-r--r--builtin-clone.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/builtin-clone.c b/builtin-clone.c
index 7190952..5c5acb4 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:
@@ -321,8 +322,11 @@ static struct ref *write_remote_refs(const struct ref *refs,
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);
+
+ pack_refs(PACK_REFS_ALL);
+ clear_extra_refs();
+
return local_refs;
}