Skip to content

Commit

Permalink
Merge branch 'jk/fast-export-object-lookup'
Browse files Browse the repository at this point in the history
* jk/fast-export-object-lookup:
  fast-export: do not load blob objects twice
  fast-export: rename handle_object function
  • Loading branch information
gitster committed Mar 25, 2013
2 parents 62bd0c0 + 30b939c commit 4e38e9b
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions builtin/fast-export.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,29 +113,32 @@ static void show_progress(void)
printf("progress %d objects\n", counter);
}

static void handle_object(const unsigned char *sha1)
static void export_blob(const unsigned char *sha1)
{
unsigned long size;
enum object_type type;
char *buf;
struct object *object;
int eaten;

if (no_data)
return;

if (is_null_sha1(sha1))
return;

object = parse_object(sha1);
if (!object)
die ("Could not read blob %s", sha1_to_hex(sha1));

if (object->flags & SHOWN)
object = lookup_object(sha1);
if (object && object->flags & SHOWN)
return;

buf = read_sha1_file(sha1, &type, &size);
if (!buf)
die ("Could not read blob %s", sha1_to_hex(sha1));
if (check_sha1_signature(sha1, buf, size, typename(type)) < 0)
die("sha1 mismatch in blob %s", sha1_to_hex(sha1));
object = parse_object_buffer(sha1, type, size, buf, &eaten);
if (!object)
die("Could not read blob %s", sha1_to_hex(sha1));

mark_next_object(object);

Expand All @@ -147,7 +150,8 @@ static void handle_object(const unsigned char *sha1)
show_progress();

object->flags |= SHOWN;
free(buf);
if (!eaten)
free(buf);
}

static int depth_first(const void *a_, const void *b_)
Expand Down Expand Up @@ -312,7 +316,7 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
/* Export the referenced blobs, and remember the marks. */
for (i = 0; i < diff_queued_diff.nr; i++)
if (!S_ISGITLINK(diff_queued_diff.queue[i]->two->mode))
handle_object(diff_queued_diff.queue[i]->two->sha1);
export_blob(diff_queued_diff.queue[i]->two->sha1);

mark_next_object(&commit->object);
if (!is_encoding_utf8(encoding))
Expand Down Expand Up @@ -512,7 +516,7 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info,
commit = (struct commit *)tag;
break;
case OBJ_BLOB:
handle_object(tag->object.sha1);
export_blob(tag->object.sha1);
continue;
default: /* OBJ_TAG (nested tags) is already handled */
warning("Tag points to object of unexpected type %s, skipping.",
Expand Down

0 comments on commit 4e38e9b

Please sign in to comment.