Skip to content

Commit

Permalink
git-upload-pack: More efficient usage of the has_sha1 array
Browse files Browse the repository at this point in the history
This patch is based on Junio's proposal. It marks parents of common revs
so that they do not clutter up the has_sha1 array.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Oct 29, 2005
1 parent eebda31 commit f0243f2
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions upload-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
#include "pkt-line.h"
#include "tag.h"
#include "object.h"
#include "commit.h"

static const char upload_pack_usage[] = "git-upload-pack [--strict] [--timeout=nn] <dir>";

#define THEY_HAVE (1U << 0)
#define OUR_REF (1U << 1)
#define WANTED (1U << 2)
#define MAX_HAS 256
Expand Down Expand Up @@ -89,15 +91,27 @@ static void create_pack_file(void)

static int got_sha1(char *hex, unsigned char *sha1)
{
int nr;
if (get_sha1_hex(hex, sha1))
die("git-upload-pack: expected SHA1 object, got '%s'", hex);
if (!has_sha1_file(sha1))
return 0;
nr = nr_has;
if (nr < MAX_HAS) {
memcpy(has_sha1[nr], sha1, 20);
nr_has = nr+1;
if (nr_has < MAX_HAS) {
struct object *o = lookup_object(sha1);
if (!(o && o->parsed))
o = parse_object(sha1);
if (!o)
die("oops (%s)", sha1_to_hex(sha1));
if (o->type == commit_type) {
struct commit_list *parents;
if (o->flags & THEY_HAVE)
return 0;
o->flags |= THEY_HAVE;
for (parents = ((struct commit*)o)->parents;
parents;
parents = parents->next)
parents->item->object.flags |= THEY_HAVE;
}
memcpy(has_sha1[nr_has++], sha1, 20);
}
return 1;
}
Expand All @@ -108,6 +122,9 @@ static int get_common_commits(void)
unsigned char sha1[20];
int len;

track_object_refs = 0;
save_commit_buffer = 0;

for(;;) {
len = packet_read_line(0, line, sizeof(line));
reset_timeout();
Expand Down

0 comments on commit f0243f2

Please sign in to comment.