repo-settings: rename the traditional default fetch.negotiationAlgorithm

Give the traditional default fetch.negotiationAlgorithm the name
'consecutive'.  Also allow a choice of 'default' to have Git decide
between the choices (currently, picking 'skipping' if
feature.experimental is true and 'consecutive' otherwise).  Update the
documentation accordingly.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren
2022-02-02 03:42:40 +00:00
committed by Junio C Hamano
parent a9a136c232
commit 714edc620c
5 changed files with 21 additions and 17 deletions

View File

@ -56,18 +56,19 @@ fetch.output::
OUTPUT in linkgit:git-fetch[1] for detail. OUTPUT in linkgit:git-fetch[1] for detail.
fetch.negotiationAlgorithm:: fetch.negotiationAlgorithm::
Control how information about the commits in the local repository is Control how information about the commits in the local repository
sent when negotiating the contents of the packfile to be sent by the is sent when negotiating the contents of the packfile to be sent by
server. Set to "skipping" to use an algorithm that skips commits in an the server. Set to "consecutive" to use an algorithm that walks
effort to converge faster, but may result in a larger-than-necessary over consecutive commits checking each one. Set to "skipping" to
packfile; or set to "noop" to not send any information at all, which use an algorithm that skips commits in an effort to converge
will almost certainly result in a larger-than-necessary packfile, but faster, but may result in a larger-than-necessary packfile; or set
will skip the negotiation step. to "noop" to not send any information at all, which will almost
The default is "default" which instructs Git to use the default algorithm certainly result in a larger-than-necessary packfile, but will skip
that never skips commits (unless the server has acknowledged it or one the negotiation step. Set to "default" to override settings made
of its descendants). If `feature.experimental` is enabled, then this previously and use the default behaviour. The default is normally
setting defaults to "skipping". "consecutive", but if `feature.experimental` is true, then the
Unknown values will cause 'git fetch' to error out. default is "skipping". Unknown values will cause 'git fetch' to
error out.
+ +
See also the `--negotiate-only` and `--negotiation-tip` options to See also the `--negotiate-only` and `--negotiation-tip` options to
linkgit:git-fetch[1]. linkgit:git-fetch[1].

View File

@ -18,7 +18,7 @@ void fetch_negotiator_init(struct repository *r,
noop_negotiator_init(negotiator); noop_negotiator_init(negotiator);
return; return;
case FETCH_NEGOTIATION_DEFAULT: case FETCH_NEGOTIATION_CONSECUTIVE:
default_negotiator_init(negotiator); default_negotiator_init(negotiator);
return; return;
} }

View File

@ -23,7 +23,7 @@ void prepare_repo_settings(struct repository *r)
/* Defaults */ /* Defaults */
r->settings.index_version = -1; r->settings.index_version = -1;
r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP; r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT; r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE;
/* Booleans config or default, cascades to other settings */ /* Booleans config or default, cascades to other settings */
repo_cfg_bool(r, "feature.manyfiles", &manyfiles, 0); repo_cfg_bool(r, "feature.manyfiles", &manyfiles, 0);
@ -78,12 +78,15 @@ void prepare_repo_settings(struct repository *r)
} }
if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) { if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) {
int fetch_default = r->settings.fetch_negotiation_algorithm;
if (!strcasecmp(strval, "skipping")) if (!strcasecmp(strval, "skipping"))
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING; r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
else if (!strcasecmp(strval, "noop")) else if (!strcasecmp(strval, "noop"))
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_NOOP; r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_NOOP;
else if (!strcasecmp(strval, "consecutive"))
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE;
else if (!strcasecmp(strval, "default")) else if (!strcasecmp(strval, "default"))
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT; r->settings.fetch_negotiation_algorithm = fetch_default;
else else
die("unknown fetch negotiation algorithm '%s'", strval); die("unknown fetch negotiation algorithm '%s'", strval);
} }

View File

@ -19,7 +19,7 @@ enum untracked_cache_setting {
}; };
enum fetch_negotiation_setting { enum fetch_negotiation_setting {
FETCH_NEGOTIATION_DEFAULT, FETCH_NEGOTIATION_CONSECUTIVE,
FETCH_NEGOTIATION_SKIPPING, FETCH_NEGOTIATION_SKIPPING,
FETCH_NEGOTIATION_NOOP, FETCH_NEGOTIATION_NOOP,
}; };

View File

@ -968,7 +968,7 @@ test_expect_success 'use ref advertisement to prune "have" lines sent' '
test_expect_success 'same as last but with config overrides' ' test_expect_success 'same as last but with config overrides' '
test_negotiation_algorithm_default \ test_negotiation_algorithm_default \
-c feature.experimental=true \ -c feature.experimental=true \
-c fetch.negotiationAlgorithm=default -c fetch.negotiationAlgorithm=consecutive
' '
test_expect_success 'ensure bogus fetch.negotiationAlgorithm yields error' ' test_expect_success 'ensure bogus fetch.negotiationAlgorithm yields error' '