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 <sunshine@sunshineco.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Derrick Stolee committed Aug 29, 2018 at 05:49 UTC 859fdc0c3cf9ad8cdd5eacaa24aee481bc1e7bc1
8 files changed +22 -12
builtin/commit.c
+4
@@ -33,6 +33,7 @@
33 #include "sequencer.h"
34 #include "mailmap.h"
35 #include "help.h"
36 +#include "commit-graph.h"
37
38 static const char * const builtin_commit_usage[] = {
39 N_("git commit [<options>] [--] <pathspec>..."),
@@ -1651,6 +1652,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
1652 "new_index file. Check that disk is not full and quota is\n"
1653 "not exceeded, and then \"git reset HEAD\" to recover."));
1654
1655 + if (git_env_bool(GIT_TEST_COMMIT_GRAPH, 0))
1656 + write_commit_graph_reachable(get_object_directory(), 0);
1657 +
1658 rerere(0);
1659 run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
1660 run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
commit-graph.c
+3 -2
@@ -213,8 +213,9 @@ static int prepare_commit_graph(struct repository *r)
213 return !!r->objects->commit_graph;
214 r->objects->commit_graph_attempted = 1;
215
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))
219 /*
220 * This repository is not configured to use commit graphs, so
221 * do not load one. (But report commit_graph_attempted anyway
commit-graph.h
+2
@@ -6,6 +6,8 @@
6 #include "string-list.h"
7 #include "cache.h"
8
9 +#define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH"
10 +
11 struct commit;
12
13 char *get_commit_graph_filename(const char *obj_dir);
t/README
+4
@@ -319,6 +319,10 @@ GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code
319 path where deltas larger than this limit require extra memory
320 allocation for bookkeeping.
321
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 +
326 Naming Tests
327 ------------
328
t/t0410-partial-clone.sh
+1 -1
@@ -181,7 +181,7 @@ test_expect_success 'rev-list stops traversal at missing and promised commit' '
181
182 git -C repo config core.repositoryformatversion 1 &&
183 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 &&
185 grep $(git -C repo rev-parse bar) out &&
186 ! grep $FOO out
187 '
t/t5307-pack-missing-commit.sh
+2 -2
@@ -24,11 +24,11 @@ test_expect_success 'check corruption' '
24 '
25
26 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
28 '
29
30 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
32 '
33
34 test_expect_success 'pack-objects notices corruption' '
t/t6011-rev-list-with-bad-commit.sh
+3 -4
@@ -41,10 +41,9 @@ test_expect_success 'corrupt second commit object' \
41 test_must_fail git fsck --full
42 '
43
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 +'
47
48 test_expect_success 'git repack _MUST_ fail' \
49 '
t/t6024-recursive-merge.sh
+3 -3
@@ -60,9 +60,9 @@ git update-index a1 &&
60 GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
61 '
62
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 +'
66
67 cat > expect << EOF
68 <<<<<<< HEAD