Merge branch 'fc/fast-export-persistent-marks'
Optimization for fast-export by avoiding unnecessarily resolving arbitrary object name and parsing object when only presence and type information is necessary, etc. * fc/fast-export-persistent-marks: fast-{import,export}: use get_sha1_hex() to read from marks file fast-export: don't parse commits while reading marks file fast-export: do not parse non-commit objects while reading marks file
This commit is contained in:
commit
dbbc93b221
@ -613,6 +613,8 @@ static void import_marks(char *input_file)
|
||||
char *line_end, *mark_end;
|
||||
unsigned char sha1[20];
|
||||
struct object *object;
|
||||
struct commit *commit;
|
||||
enum object_type type;
|
||||
|
||||
line_end = strchr(line, '\n');
|
||||
if (line[0] != ':' || !line_end)
|
||||
@ -621,23 +623,29 @@ static void import_marks(char *input_file)
|
||||
|
||||
mark = strtoumax(line + 1, &mark_end, 10);
|
||||
if (!mark || mark_end == line + 1
|
||||
|| *mark_end != ' ' || get_sha1(mark_end + 1, sha1))
|
||||
|| *mark_end != ' ' || get_sha1_hex(mark_end + 1, sha1))
|
||||
die("corrupt mark line: %s", line);
|
||||
|
||||
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;
|
||||
|
||||
commit = lookup_commit(sha1);
|
||||
if (!commit)
|
||||
die("not a commit? can't happen: %s", sha1_to_hex(sha1));
|
||||
|
||||
object = &commit->object;
|
||||
|
||||
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;
|
||||
|
@ -1822,7 +1822,7 @@ static void read_marks(void)
|
||||
*end = 0;
|
||||
mark = strtoumax(line + 1, &end, 10);
|
||||
if (!mark || end == line + 1
|
||||
|| *end != ' ' || get_sha1(end + 1, sha1))
|
||||
|| *end != ' ' || get_sha1_hex(end + 1, sha1))
|
||||
die("corrupt mark line: %s", line);
|
||||
e = find_object(sha1);
|
||||
if (!e) {
|
||||
|
Loading…
Reference in New Issue
Block a user