summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2020-06-02 13:35:01 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2020-06-02 13:35:01 -0700
commit51b47088112d4d4521d6f07c51f70c3ab4e07b63 (patch)
treea7b9028288987d465188f4652b0875abc29e57b2
parentMerge branch 'bk/p4-prepare-p4-only-fix' (diff)
parentconfig: let feature.experimental imply protocol.version=2 (diff)
downloadtgif-51b47088112d4d4521d6f07c51f70c3ab4e07b63.tar.xz
Merge branch 'jn/experimental-opts-into-proto-v2'
"feature.experimental" configuration variable is to let volunteers easily opt into a set of newer features, which use of the v2 transport protocol is now a part of. * jn/experimental-opts-into-proto-v2: config: let feature.experimental imply protocol.version=2
-rw-r--r--Documentation/config/feature.txt4
-rw-r--r--Documentation/config/protocol.txt3
-rw-r--r--protocol.c4
3 files changed, 10 insertions, 1 deletions
diff --git a/Documentation/config/feature.txt b/Documentation/config/feature.txt
index 4e3a5c0ceb..28c33602d5 100644
--- a/Documentation/config/feature.txt
+++ b/Documentation/config/feature.txt
@@ -22,6 +22,10 @@ existing commit-graph file(s). Occasionally, these files will merge and the
write may take longer. Having an updated commit-graph file helps performance
of many Git commands, including `git merge-base`, `git push -f`, and
`git log --graph`.
++
+* `protocol.version=2` speeds up fetches from repositories with many refs by
+allowing the client to specify which refs to list before the server lists
+them.
feature.manyFiles::
Enable config options that optimize for repos with many files in the
diff --git a/Documentation/config/protocol.txt b/Documentation/config/protocol.txt
index 0b40141613..c46e9b3d00 100644
--- a/Documentation/config/protocol.txt
+++ b/Documentation/config/protocol.txt
@@ -48,7 +48,8 @@ protocol.version::
If set, clients will attempt to communicate with a server
using the specified protocol version. If the server does
not support it, communication falls back to version 0.
- If unset, the default is `0`.
+ If unset, the default is `0`, unless `feature.experimental`
+ is enabled, in which case the default is `2`.
Supported versions:
+
--
diff --git a/protocol.c b/protocol.c
index d390391eba..d1dd3424bb 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);