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
This commit is contained in:
Junio C Hamano
2020-06-02 13:35:01 -07:00
3 changed files with 10 additions and 1 deletions

View File

@ -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 write may take longer. Having an updated commit-graph file helps performance
of many Git commands, including `git merge-base`, `git push -f`, and of many Git commands, including `git merge-base`, `git push -f`, and
`git log --graph`. `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:: feature.manyFiles::
Enable config options that optimize for repos with many files in the Enable config options that optimize for repos with many files in the

View File

@ -48,7 +48,8 @@ protocol.version::
If set, clients will attempt to communicate with a server If set, clients will attempt to communicate with a server
using the specified protocol version. If the server does using the specified protocol version. If the server does
not support it, communication falls back to version 0. 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: Supported versions:
+ +
-- --

View File

@ -17,6 +17,7 @@ static enum protocol_version parse_protocol_version(const char *value)
enum protocol_version get_protocol_version_config(void) enum protocol_version get_protocol_version_config(void)
{ {
const char *value; const char *value;
int val;
const char *git_test_k = "GIT_TEST_PROTOCOL_VERSION"; const char *git_test_k = "GIT_TEST_PROTOCOL_VERSION";
const char *git_test_v; const char *git_test_v;
@ -30,6 +31,9 @@ enum protocol_version get_protocol_version_config(void)
return version; return version;
} }
if (!git_config_get_bool("feature.experimental", &val) && val)
return protocol_v2;
git_test_v = getenv(git_test_k); git_test_v = getenv(git_test_k);
if (git_test_v && *git_test_v) { if (git_test_v && *git_test_v) {
enum protocol_version env = parse_protocol_version(git_test_v); enum protocol_version env = parse_protocol_version(git_test_v);