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
{