commit: force commit to parse from object database

In anticipation of verifying commit-graph file contents against the object database, create parse_commit_internal() to allow side-stepping the commit-graph file and parse directly from the object database. Due to the use of generation numbers, this method should not be called unless the intention is explicit in avoiding commits from the commit-graph file. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Derrick Stolee committed Jun 27, 2018 at 09:24 UTC 9b19adac6f160c55427bd3d74293a94670487d83
2 files changed +9 -2
commit.c
+8 -2
@@ -418,7 +418,7 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s
418 return 0;
419 }
420
421 -int parse_commit_gently(struct commit *item, int quiet_on_missing)
421 +int parse_commit_internal(struct commit *item, int quiet_on_missing, int use_commit_graph)
422 {
423 enum object_type type;
424 void *buffer;
@@ -429,7 +429,7 @@ int parse_commit_gently(struct commit *item, int quiet_on_missing)
429 return -1;
430 if (item->object.parsed)
431 return 0;
432 - if (parse_commit_in_graph(item))
432 + if (use_commit_graph && parse_commit_in_graph(item))
433 return 0;
434 buffer = read_object_file(&item->object.oid, &type, &size);
435 if (!buffer)
@@ -441,6 +441,7 @@ int parse_commit_gently(struct commit *item, int quiet_on_missing)
441 return error("Object %s not a commit",
442 oid_to_hex(&item->object.oid));
443 }
444 +
445 ret = parse_commit_buffer(item, buffer, size, 0);
446 if (save_commit_buffer && !ret) {
447 set_commit_buffer(item, buffer, size);
@@ -450,6 +451,11 @@ int parse_commit_gently(struct commit *item, int quiet_on_missing)
451 return ret;
452 }
453
454 +int parse_commit_gently(struct commit *item, int quiet_on_missing)
455 +{
456 + return parse_commit_internal(item, quiet_on_missing, 1);
457 +}
458 +
459 void parse_commit_or_die(struct commit *item)
460 {
461 if (parse_commit(item))
commit.h
+1
@@ -77,6 +77,7 @@ struct commit *lookup_commit_reference_by_name(const char *name);
77 struct commit *lookup_commit_or_die(const struct object_id *oid, const char *ref_name);
78
79 int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long size, int check_graph);
80 +int parse_commit_internal(struct commit *item, int quiet_on_missing, int use_commit_graph);
81 int parse_commit_gently(struct commit *item, int quiet_on_missing);
82 static inline int parse_commit(struct commit *item)
83 {