Merge branch 'jk/fast-export-object-lookup'

* jk/fast-export-object-lookup:
  fast-export: do not load blob objects twice
  fast-export: rename handle_object function
This commit is contained in:
Junio C Hamano 2013-03-25 14:01:05 -07:00
commit 4e38e9b1d0

View File

@ -113,12 +113,13 @@ 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;
@ -126,16 +127,18 @@ static void handle_object(const unsigned char *sha1)
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);
@ -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_)
@ -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))
@ -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.",