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:
commit
4e38e9b1d0
@ -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.",
|
||||
|
Loading…
Reference in New Issue
Block a user