Commit 859fdc0c authored by Derrick Stolee's avatar Derrick Stolee Committed by Junio C Hamano

commit-graph: define GIT_TEST_COMMIT_GRAPH

The commit-graph feature is tested in isolation by and, 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

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 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's avatarEric Sunshine <>
Signed-off-by: 's avatarDerrick Stolee <>
Signed-off-by: 's avatarJunio C Hamano <>
parent 2f743933
......@@ -33,6 +33,7 @@
#include "sequencer.h"
#include "mailmap.h"
#include "help.h"
#include "commit-graph.h"
static const char * const builtin_commit_usage[] = {
N_("git commit [<options>] [--] <pathspec>..."),
......@@ -1651,6 +1652,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
"new_index file. Check that disk is not full and quota is\n"
"not exceeded, and then \"git reset HEAD\" to recover."));
if (git_env_bool(GIT_TEST_COMMIT_GRAPH, 0))
write_commit_graph_reachable(get_object_directory(), 0);
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
......@@ -213,8 +213,9 @@ static int prepare_commit_graph(struct repository *r)
return !!r->objects->commit_graph;
r->objects->commit_graph_attempted = 1;
if (repo_config_get_bool(r, "core.commitgraph", &config_value) ||
if (!git_env_bool(GIT_TEST_COMMIT_GRAPH, 0) &&
(repo_config_get_bool(r, "core.commitgraph", &config_value) ||
* This repository is not configured to use commit graphs, so
* do not load one. (But report commit_graph_attempted anyway
......@@ -6,6 +6,8 @@
#include "string-list.h"
#include "cache.h"
struct commit;
char *get_commit_graph_filename(const char *obj_dir);
......@@ -319,6 +319,10 @@ GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code
path where deltas larger than this limit require extra memory
allocation for bookkeeping.
GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to
be written after every 'git commit' command, and overrides the
'core.commitGraph' setting to true.
Naming Tests
......@@ -181,7 +181,7 @@ test_expect_success 'rev-list stops traversal at missing and promised commit' '
git -C repo config core.repositoryformatversion 1 &&
git -C repo config extensions.partialclone "arbitrary string" &&
git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
GIT_TEST_COMMIT_GRAPH=0 git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
grep $(git -C repo rev-parse bar) out &&
! grep $FOO out
......@@ -24,11 +24,11 @@ test_expect_success 'check corruption' '
test_expect_success 'rev-list notices corruption (1)' '
test_must_fail git rev-list HEAD
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list HEAD
test_expect_success 'rev-list notices corruption (2)' '
test_must_fail git rev-list --objects HEAD
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --objects HEAD
test_expect_success 'pack-objects notices corruption' '
......@@ -41,10 +41,9 @@ test_expect_success 'corrupt second commit object' \
test_must_fail git fsck --full
test_expect_success 'rev-list should fail' \
test_must_fail git rev-list --all > /dev/null
test_expect_success 'rev-list should fail' '
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --all > /dev/null
test_expect_success 'git repack _MUST_ fail' \
......@@ -60,9 +60,9 @@ git update-index a1 &&
GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
test_expect_success "combined merge conflicts" "
test_must_fail git merge -m final G
test_expect_success 'combined merge conflicts' '
test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git merge -m final G
cat > expect << EOF
<<<<<<< HEAD
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment