Skip to content

Commit 859fdc0

Browse files
derrickstoleegitster
authored andcommitted
commit-graph: define GIT_TEST_COMMIT_GRAPH
The commit-graph feature is tested in isolation by t5318-commit-graph.sh and t6600-test-reach.sh, but there are many more interesting scenarios involving commit walks. Many of these scenarios are covered by the existing test suite, but we need to maintain coverage when the optional commit-graph structure is not present. To allow running the full test suite with the commit-graph present, add a new test environment variable, GIT_TEST_COMMIT_GRAPH. Similar to GIT_TEST_SPLIT_INDEX, this variable makes every Git command try to load the commit-graph when parsing commits, and writes the commit-graph file after every 'git commit' command. There are a few tests that rely on commits not existing in pack-files to trigger important events, so manually set GIT_TEST_COMMIT_GRAPH to false for the necessary commands. There is one test in t6024-recursive-merge.sh that relies on the merge-base algorithm picking one of two ambiguous merge-bases, and the commit-graph feature changes which merge-base is picked. Helped-by: Eric Sunshine <[email protected]> Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2f74393 commit 859fdc0

8 files changed

+22
-12
lines changed

builtin/commit.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "sequencer.h"
3434
#include "mailmap.h"
3535
#include "help.h"
36+
#include "commit-graph.h"
3637

3738
static const char * const builtin_commit_usage[] = {
3839
N_("git commit [<options>] [--] <pathspec>..."),
@@ -1651,6 +1652,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
16511652
"new_index file. Check that disk is not full and quota is\n"
16521653
"not exceeded, and then \"git reset HEAD\" to recover."));
16531654

1655+
if (git_env_bool(GIT_TEST_COMMIT_GRAPH, 0))
1656+
write_commit_graph_reachable(get_object_directory(), 0);
1657+
16541658
rerere(0);
16551659
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
16561660
run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);

commit-graph.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,9 @@ static int prepare_commit_graph(struct repository *r)
213213
return !!r->objects->commit_graph;
214214
r->objects->commit_graph_attempted = 1;
215215

216-
if (repo_config_get_bool(r, "core.commitgraph", &config_value) ||
217-
!config_value)
216+
if (!git_env_bool(GIT_TEST_COMMIT_GRAPH, 0) &&
217+
(repo_config_get_bool(r, "core.commitgraph", &config_value) ||
218+
!config_value))
218219
/*
219220
* This repository is not configured to use commit graphs, so
220221
* do not load one. (But report commit_graph_attempted anyway

commit-graph.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "string-list.h"
77
#include "cache.h"
88

9+
#define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH"
10+
911
struct commit;
1012

1113
char *get_commit_graph_filename(const char *obj_dir);

t/README

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,10 @@ GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code
319319
path where deltas larger than this limit require extra memory
320320
allocation for bookkeeping.
321321

322+
GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to
323+
be written after every 'git commit' command, and overrides the
324+
'core.commitGraph' setting to true.
325+
322326
Naming Tests
323327
------------
324328

t/t0410-partial-clone.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ test_expect_success 'rev-list stops traversal at missing and promised commit' '
181181
182182
git -C repo config core.repositoryformatversion 1 &&
183183
git -C repo config extensions.partialclone "arbitrary string" &&
184-
git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
184+
GIT_TEST_COMMIT_GRAPH=0 git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
185185
grep $(git -C repo rev-parse bar) out &&
186186
! grep $FOO out
187187
'

t/t5307-pack-missing-commit.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ test_expect_success 'check corruption' '
2424
'
2525

2626
test_expect_success 'rev-list notices corruption (1)' '
27-
test_must_fail git rev-list HEAD
27+
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list HEAD
2828
'
2929

3030
test_expect_success 'rev-list notices corruption (2)' '
31-
test_must_fail git rev-list --objects HEAD
31+
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --objects HEAD
3232
'
3333

3434
test_expect_success 'pack-objects notices corruption' '

t/t6011-rev-list-with-bad-commit.sh

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,9 @@ test_expect_success 'corrupt second commit object' \
4141
test_must_fail git fsck --full
4242
'
4343

44-
test_expect_success 'rev-list should fail' \
45-
'
46-
test_must_fail git rev-list --all > /dev/null
47-
'
44+
test_expect_success 'rev-list should fail' '
45+
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --all > /dev/null
46+
'
4847

4948
test_expect_success 'git repack _MUST_ fail' \
5049
'

t/t6024-recursive-merge.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ git update-index a1 &&
6060
GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
6161
'
6262

63-
test_expect_success "combined merge conflicts" "
64-
test_must_fail git merge -m final G
65-
"
63+
test_expect_success 'combined merge conflicts' '
64+
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git merge -m final G
65+
'
6666

6767
cat > expect << EOF
6868
<<<<<<< HEAD

0 commit comments

Comments
 (0)