Felipe Contreras <felipe.contreras@xxxxxxxxx> writes: > We don't care about blobs, or any object other than commits, but in > order to find the type of object, we are parsing the whole thing, which > is slow, specially in big repositories with lots of big files. > > There's no need for that, we can query the object information with > sha1_object_info(); > > Before this, loading the objects of a fresh emacs import, with 260598 > blobs took 14 minutes, after this patch, it takes 3 seconds. OK. > > This is the way fast-import does it. Also die if the object is not > found (like fast-import). > > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > --- > builtin/fast-export.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/builtin/fast-export.c b/builtin/fast-export.c > index a4dee14..a5b8da8 100644 > --- a/builtin/fast-export.c > +++ b/builtin/fast-export.c > @@ -613,6 +613,7 @@ static void import_marks(char *input_file) > char *line_end, *mark_end; > unsigned char sha1[20]; > struct object *object; > + enum object_type type; > > line_end = strchr(line, '\n'); > if (line[0] != ':' || !line_end) > @@ -627,17 +628,19 @@ static void import_marks(char *input_file) > if (last_idnum < mark) > last_idnum = mark; > > - object = parse_object(sha1); > - if (!object) > + type = sha1_object_info(sha1, NULL); > + if (type < 0) > + die("object not found: %s", sha1_to_hex(sha1)); > + > + if (type != OBJ_COMMIT) > + /* only commits */ > continue; > > + object = parse_object(sha1); > + > if (object->flags & SHOWN) > error("Object %s already has a mark", sha1_to_hex(sha1)); > > - if (object->type != OBJ_COMMIT) > - /* only commits */ > - continue; > - > mark_object(object, mark); > > object->flags |= SHOWN; -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html