]> git.ipfire.org Git - thirdparty/git.git/commitdiff
tests: write commit-graph with Bloom filters
authorDerrick Stolee <dstolee@microsoft.com>
Thu, 16 Apr 2020 20:14:03 +0000 (20:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Apr 2020 22:38:04 +0000 (15:38 -0700)
The GIT_TEST_COMMIT_GRAPH environment variable updates the commit-
graph file whenever "git commit" is run, ensuring that we always
have an updated commit-graph throughout the test suite. The
GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS environment variable was
introduced to write the changed-path Bloom filters whenever "git
commit-graph write" is run. However, the GIT_TEST_COMMIT_GRAPH
trick doesn't launch a separate process and instead writes it
directly.

To expand the number of tests that have commits in the commit-graph
file, add a helper method that computes the commit-graph and place
that helper inside "git commit" and "git merge".

In the helper method, check GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS
to ensure we are writing changed-path Bloom filters whenever
possible.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/commit.c
builtin/merge.c
commit-graph.c
commit-graph.h

index d3e7781e658a67d79df781df44a7d716a5094b30..27d4ff6b79080666173969f671ae8bd78bba0e37 100644 (file)
@@ -1700,9 +1700,7 @@ 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 restore --staged :/\" to recover."));
 
-       if (git_env_bool(GIT_TEST_COMMIT_GRAPH, 0) &&
-           write_commit_graph_reachable(the_repository->objects->odb, 0, NULL))
-               return 1;
+       git_test_write_commit_graph_or_die();
 
        repo_rerere(the_repository, 0);
        run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
index d127d2225f897f111124fb55b12cd1aae7db7a8e..db11af5b1cd37203b1527ebb4cd1c03d49892f41 100644 (file)
@@ -40,6 +40,7 @@
 #include "branch.h"
 #include "commit-reach.h"
 #include "wt-status.h"
+#include "commit-graph.h"
 
 #define DEFAULT_TWOHEAD (1<<0)
 #define DEFAULT_OCTOPUS (1<<1)
@@ -1673,9 +1674,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                                   head_commit);
        }
 
-       if (squash)
+       if (squash) {
                finish(head_commit, remoteheads, NULL, NULL);
-       else
+
+               git_test_write_commit_graph_or_die();
+       } else
                write_merge_state(remoteheads);
 
        if (merge_was_ok)
index 77668629e27dbbae783cfd2364fee78d41bf446d..196e817a84c04259d6d6a07b06e0be5abe232298 100644 (file)
 #include "bloom.h"
 #include "commit-slab.h"
 
+void git_test_write_commit_graph_or_die(void)
+{
+       int flags = 0;
+       if (!git_env_bool(GIT_TEST_COMMIT_GRAPH, 0))
+               return;
+
+       if (git_env_bool(GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS, 0))
+               flags = COMMIT_GRAPH_WRITE_BLOOM_FILTERS;
+
+       if (write_commit_graph_reachable(the_repository->objects->odb,
+                                        flags, NULL))
+               die("failed to write commit-graph under GIT_TEST_COMMIT_GRAPH");
+}
+
 #define GRAPH_SIGNATURE 0x43475048 /* "CGPH" */
 #define GRAPH_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
 #define GRAPH_CHUNKID_OIDLOOKUP 0x4f49444c /* "OIDL" */
index 8655d064c14496a9bfa210fa55b9ca5ae59ae3d4..39484482cc1704d11317b009d401f5f6719632bd 100644 (file)
 #define GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD "GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD"
 #define GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS "GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS"
 
+/*
+ * This method is only used to enhance coverage of the commit-graph
+ * feature in the test suite with the GIT_TEST_COMMIT_GRAPH and
+ * GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS environment variables. Do not
+ * call this method oustide of a builtin, and only if you know what
+ * you are doing!
+ */
+void git_test_write_commit_graph_or_die(void);
+
 struct commit;
 struct bloom_filter_settings;