summaryrefslogtreecommitdiff
path: root/protocol.c
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2020-05-21 02:15:33 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-05-21 16:31:42 (GMT)
commit3697caf4b962f65430fdcd6f0d41b7fe1f579e18 (patch)
tree32cde3fdf82684fc75c48442fd99ba2a3237d4f9 /protocol.c
parent87680d32efb6d14f162e54ad3bda4e3d6c908559 (diff)
downloadgit-3697caf4b962f65430fdcd6f0d41b7fe1f579e18.zip
git-3697caf4b962f65430fdcd6f0d41b7fe1f579e18.tar.gz
git-3697caf4b962f65430fdcd6f0d41b7fe1f579e18.tar.bz2
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 0b07eecf6ed (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 <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'protocol.c')
-rw-r--r--protocol.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/protocol.c b/protocol.c
index d390391..d1dd342 100644
--- a/protocol.c
+++ b/protocol.c
@@ -17,6 +17,7 @@ static enum protocol_version parse_protocol_version(const char *value)
enum protocol_version get_protocol_version_config(void)
{
const char *value;
+ int val;
const char *git_test_k = "GIT_TEST_PROTOCOL_VERSION";
const char *git_test_v;
@@ -30,6 +31,9 @@ enum protocol_version get_protocol_version_config(void)
return version;
}
+ if (!git_config_get_bool("feature.experimental", &val) && val)
+ return protocol_v2;
+
git_test_v = getenv(git_test_k);
if (git_test_v && *git_test_v) {
enum protocol_version env = parse_protocol_version(git_test_v);