aboutsummaryrefslogtreecommitdiffstats
path: root/t/t5702-protocol-v2.sh
diff options
context:
space:
mode:
authorXing Xin <xingxin.xx@bytedance.com>2024-10-08 03:38:18 +0000
committerJunio C Hamano <gitster@pobox.com>2024-10-08 10:22:09 -0700
commit148bc7bf4b482edd7919e3071542abeb5d7ea4af (patch)
tree666d120a8db4717eeef89a648bfb7efd93b27dfd /t/t5702-protocol-v2.sh
parenttransport.c::handshake: make use of server options from remote (diff)
downloadgit-148bc7bf4b482edd7919e3071542abeb5d7ea4af.tar.gz
git-148bc7bf4b482edd7919e3071542abeb5d7ea4af.zip
fetch: respect --server-option when fetching multiple remotes
Fix an issue where server options specified via the command line (`--server-option` or `-o`) were not sent when fetching from multiple remotes using Git protocol v2. To reproduce the issue with a repository containing multiple remotes: GIT_TRACE_PACKET=1 git -c protocol.version=2 fetch --server-option=demo --all Observe that no server options are sent to any remote. The root cause was identified in `builtin/fetch.c:fetch_multiple`, which is invoked when fetching from more than one remote. This function forks a `git-fetch` subprocess for each remote but did not include the specified server options in the subprocess arguments. This commit ensures that command-line specified server options are properly passed to each subprocess. Relevant tests have been added. Signed-off-by: Xing Xin <xingxin.xx@bytedance.com> Reviewed-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to '')
-rwxr-xr-xt/t5702-protocol-v2.sh10
1 files changed, 10 insertions, 0 deletions
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index 5cec2061d2..d3df81e785 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -418,6 +418,16 @@ test_expect_success 'server-options are sent when fetching' '
grep "server-option=world" log
'
+test_expect_success 'server-options are sent when fetch multiple remotes' '
+ test_when_finished "rm -f log server_options_sent" &&
+ git clone "file://$(pwd)/file_parent" child_multi_remotes &&
+ git -C child_multi_remotes remote add another "file://$(pwd)/file_parent" &&
+ GIT_TRACE_PACKET="$(pwd)/log" git -C child_multi_remotes -c protocol.version=2 \
+ fetch -o hello --all &&
+ grep "fetch> server-option=hello" log >server_options_sent &&
+ test_line_count = 2 server_options_sent
+'
+
test_expect_success 'server-options from configuration are used by git-fetch' '
test_when_finished "rm -rf log myclone" &&
git clone "file://$(pwd)/file_parent" myclone &&