Browse Source

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>
maint
Derrick Stolee 4 years ago committed by Junio C Hamano
parent
commit
32f67888d8
  1. 3
      builtin/gc.c
  2. 8
      t/t7900-maintenance.sh

3
builtin/gc.c

@ -878,6 +878,9 @@ static int fetch_remote(struct remote *remote, void *cbdata) @@ -878,6 +878,9 @@ static int fetch_remote(struct remote *remote, void *cbdata)
struct maintenance_run_opts *opts = cbdata;
struct child_process child = CHILD_PROCESS_INIT;

if (remote->skip_default_update)
return 0;

child.git_cmd = 1;
strvec_pushl(&child.args, "fetch", remote->name,
"--prefetch", "--prune", "--no-tags",

8
t/t7900-maintenance.sh

@ -153,7 +153,13 @@ test_expect_success 'prefetch multiple remotes' ' @@ -153,7 +153,13 @@ test_expect_success 'prefetch multiple remotes' '

test_cmp_config refs/prefetch/ log.excludedecoration &&
git log --oneline --decorate --all >log &&
! grep "prefetch" log
! grep "prefetch" log &&

test_when_finished git config --unset remote.remote1.skipFetchAll &&
git config remote.remote1.skipFetchAll true &&
GIT_TRACE2_EVENT="$(pwd)/skip-remote1.txt" git maintenance run --task=prefetch 2>/dev/null &&
test_subcommand ! git fetch remote1 $fetchargs <skip-remote1.txt &&
test_subcommand git fetch remote2 $fetchargs <skip-remote1.txt
'

test_expect_success 'prefetch and existing log.excludeDecoration values' '

Loading…
Cancel
Save