maintenance: respect remote.*.skipFetchAll

If a remote has the skipFetchAll setting enabled, then that remote is not intended for frequent fetching. It makes sense to not fetch that data during the 'prefetch' maintenance task. Skip that remote in the iteration without error. The skip_default_update member is initialized in remote.c:handle_config() as part of initializing the 'struct remote'. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Derrick Stolee committed Apr 16, 2021 at 12:49 UTC 32f67888d85bd0af30b857a29ca25a55999b6d01
2 files changed +10 -1
builtin/gc.c
+3
@@ -878,6 +878,9 @@ static int fetch_remote(struct remote *remote, void *cbdata)
878 struct maintenance_run_opts *opts = cbdata;
879 struct child_process child = CHILD_PROCESS_INIT;
880
881 + if (remote->skip_default_update)
882 + return 0;
883 +
884 child.git_cmd = 1;
885 strvec_pushl(&child.args, "fetch", remote->name,
886 "--prefetch", "--prune", "--no-tags",
t/t7900-maintenance.sh
+7 -1
@@ -153,7 +153,13 @@ test_expect_success 'prefetch multiple remotes' '
153
154 test_cmp_config refs/prefetch/ log.excludedecoration &&
155 git log --oneline --decorate --all >log &&
156 - ! grep "prefetch" log
156 + ! grep "prefetch" log &&
157 +
158 + test_when_finished git config --unset remote.remote1.skipFetchAll &&
159 + git config remote.remote1.skipFetchAll true &&
160 + GIT_TRACE2_EVENT="$(pwd)/skip-remote1.txt" git maintenance run --task=prefetch 2>/dev/null &&
161 + test_subcommand ! git fetch remote1 $fetchargs <skip-remote1.txt &&
162 + test_subcommand git fetch remote2 $fetchargs <skip-remote1.txt
163 '
164
165 test_expect_success 'prefetch and existing log.excludeDecoration values' '