Skip to content

Commit 3697caf

Browse files
jrngitster
authored andcommitted
config: let feature.experimental imply protocol.version=2
Git 2.26 used protocol v2 as its default protocol, but soon after release, users noticed that the protocol v2 negotiation code was prone to fail when fetching from some remotes that are far ahead of others (such as linux-next.git versus Linus's linux.git). That has been fixed by 0b07eec (Merge branch 'jt/v2-fetch-nego-fix', 2020-05-01), but to be cautious, we are using protocol v0 as the default in 2.27 to buy some time for any other unanticipated issues to surface. To that end, let's ensure that users requesting the bleeding edge using the feature.experimental flag *do* get protocol v2. This way, we can gain experience with a wider audience for the new protocol version and be more confident when it is time to enable it by default for all users in some future Git version. Implementation note: this isn't with the rest of the feature.experimental options in repo-settings.c because those are tied to a repository object, whereas this code path is used for operations like "git ls-remote" that do not require a repository. Signed-off-by: Jonathan Nieder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 87680d3 commit 3697caf

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

‎Documentation/config/feature.txt‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ existing commit-graph file(s). Occasionally, these files will merge and the
2222
write may take longer. Having an updated commit-graph file helps performance
2323
of many Git commands, including `git merge-base`, `git push -f`, and
2424
`git log --graph`.
25+
+
26+
* `protocol.version=2` speeds up fetches from repositories with many refs by
27+
allowing the client to specify which refs to list before the server lists
28+
them.
2529

2630
feature.manyFiles::
2731
Enable config options that optimize for repos with many files in the

‎Documentation/config/protocol.txt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ protocol.version::
4848
If set, clients will attempt to communicate with a server
4949
using the specified protocol version. If the server does
5050
not support it, communication falls back to version 0.
51-
If unset, the default is `0`.
51+
If unset, the default is `0`, unless `feature.experimental`
52+
is enabled, in which case the default is `2`.
5253
Supported versions:
5354
+
5455
--

‎protocol.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ static enum protocol_version parse_protocol_version(const char *value)
1717
enum protocol_version get_protocol_version_config(void)
1818
{
1919
const char *value;
20+
int val;
2021
const char *git_test_k = "GIT_TEST_PROTOCOL_VERSION";
2122
const char *git_test_v;
2223

@@ -30,6 +31,9 @@ enum protocol_version get_protocol_version_config(void)
3031
return version;
3132
}
3233

34+
if (!git_config_get_bool("feature.experimental", &val) && val)
35+
return protocol_v2;
36+
3337
git_test_v = getenv(git_test_k);
3438
if (git_test_v && *git_test_v) {
3539
enum protocol_version env = parse_protocol_version(git_test_v);

0 commit comments

Comments
 (0)