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:
Junio C Hamano 2013-06-02 15:48:28 -07:00
commit dbbc93b221
2 changed files with 16 additions and 8 deletions

View File

@ -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;

View File

@ -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) {