Merge branch 'ds/commit-graph-on-fetch'
A configuration variable tells "git fetch" to write the commit graph after finishing. * ds/commit-graph-on-fetch: fetch: add fetch.writeCommitGraph config setting
This commit is contained in:
commit
5a5350940b
@ -17,6 +17,14 @@ which can improve `git push` performance in repos with many files.
|
|||||||
+
|
+
|
||||||
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
|
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
|
||||||
skipping more commits at a time, reducing the number of round trips.
|
skipping more commits at a time, reducing the number of round trips.
|
||||||
|
+
|
||||||
|
* `fetch.writeCommitGraph=true` writes a commit-graph after every `git fetch`
|
||||||
|
command that downloads a pack-file from a remote. Using the `--split` option,
|
||||||
|
most executions will create a very small commit-graph file on top of the
|
||||||
|
existing commit-graph file(s). Occasionally, these files will merge and the
|
||||||
|
write may take longer. Having an updated commit-graph file helps performance
|
||||||
|
of many Git commands, including `git merge-base`, `git push -f`, and
|
||||||
|
`git log --graph`.
|
||||||
|
|
||||||
feature.manyFiles::
|
feature.manyFiles::
|
||||||
Enable config options that optimize for repos with many files in the
|
Enable config options that optimize for repos with many files in the
|
||||||
|
@ -69,3 +69,13 @@ fetch.showForcedUpdates::
|
|||||||
Set to false to enable `--no-show-forced-updates` in
|
Set to false to enable `--no-show-forced-updates` in
|
||||||
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
|
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
|
||||||
Defaults to true.
|
Defaults to true.
|
||||||
|
|
||||||
|
fetch.writeCommitGraph::
|
||||||
|
Set to true to write a commit-graph after every `git fetch` command
|
||||||
|
that downloads a pack-file from a remote. Using the `--split` option,
|
||||||
|
most executions will create a very small commit-graph file on top of
|
||||||
|
the existing commit-graph file(s). Occasionally, these files will
|
||||||
|
merge and the write may take longer. Having an updated commit-graph
|
||||||
|
file helps performance of many Git commands, including `git merge-base`,
|
||||||
|
`git push -f`, and `git log --graph`. Defaults to false, unless
|
||||||
|
`feature.experimental` is true.
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "commit-reach.h"
|
#include "commit-reach.h"
|
||||||
#include "branch.h"
|
#include "branch.h"
|
||||||
#include "promisor-remote.h"
|
#include "promisor-remote.h"
|
||||||
|
#include "commit-graph.h"
|
||||||
|
|
||||||
#define FORCED_UPDATES_DELAY_WARNING_IN_MS (10 * 1000)
|
#define FORCED_UPDATES_DELAY_WARNING_IN_MS (10 * 1000)
|
||||||
|
|
||||||
@ -1759,6 +1760,20 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
string_list_clear(&list, 0);
|
string_list_clear(&list, 0);
|
||||||
|
|
||||||
|
prepare_repo_settings(the_repository);
|
||||||
|
if (the_repository->settings.fetch_write_commit_graph) {
|
||||||
|
int commit_graph_flags = COMMIT_GRAPH_WRITE_SPLIT;
|
||||||
|
struct split_commit_graph_opts split_opts;
|
||||||
|
memset(&split_opts, 0, sizeof(struct split_commit_graph_opts));
|
||||||
|
|
||||||
|
if (progress)
|
||||||
|
commit_graph_flags |= COMMIT_GRAPH_WRITE_PROGRESS;
|
||||||
|
|
||||||
|
write_commit_graph_reachable(get_object_directory(),
|
||||||
|
commit_graph_flags,
|
||||||
|
&split_opts);
|
||||||
|
}
|
||||||
|
|
||||||
close_object_store(the_repository->objects);
|
close_object_store(the_repository->objects);
|
||||||
|
|
||||||
if (enable_auto_gc) {
|
if (enable_auto_gc) {
|
||||||
|
@ -49,10 +49,14 @@ void prepare_repo_settings(struct repository *r)
|
|||||||
UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
|
UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
|
||||||
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
|
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
|
||||||
}
|
}
|
||||||
|
if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
|
||||||
|
r->settings.fetch_write_commit_graph = value;
|
||||||
if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
|
if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
|
||||||
UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
|
UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
|
||||||
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
|
||||||
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 1);
|
||||||
}
|
}
|
||||||
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 0);
|
||||||
|
|
||||||
/* Hack for test programs like test-dump-untracked-cache */
|
/* Hack for test programs like test-dump-untracked-cache */
|
||||||
if (ignore_untracked_cache_config)
|
if (ignore_untracked_cache_config)
|
||||||
|
@ -30,6 +30,7 @@ struct repo_settings {
|
|||||||
|
|
||||||
int core_commit_graph;
|
int core_commit_graph;
|
||||||
int gc_write_commit_graph;
|
int gc_write_commit_graph;
|
||||||
|
int fetch_write_commit_graph;
|
||||||
|
|
||||||
int index_version;
|
int index_version;
|
||||||
enum untracked_cache_setting core_untracked_cache;
|
enum untracked_cache_setting core_untracked_cache;
|
||||||
|
@ -570,6 +570,19 @@ test_expect_success 'LHS of refspec follows ref disambiguation rules' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fetch.writeCommitGraph' '
|
||||||
|
git clone three write &&
|
||||||
|
(
|
||||||
|
cd three &&
|
||||||
|
test_commit new
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd write &&
|
||||||
|
git -c fetch.writeCommitGraph fetch origin &&
|
||||||
|
test_path_is_file .git/objects/info/commit-graphs/commit-graph-chain
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
# configured prune tests
|
# configured prune tests
|
||||||
|
|
||||||
set_config_tristate () {
|
set_config_tristate () {
|
||||||
|
Loading…
Reference in New Issue
Block a user