summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/fetch.c5
-rwxr-xr-xt/t5702-protocol-v2.sh13
2 files changed, 15 insertions, 3 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 6ab101fa6d..c26866e674 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1782,11 +1782,10 @@ static int do_fetch(struct transport *transport,
"refs/tags/");
}
- if (uses_remote_tracking(transport, rs)) {
- must_list_refs = 1;
+ if (must_list_refs &&
+ uses_remote_tracking(transport, rs))
strvec_push(&transport_ls_refs_options.ref_prefixes,
"HEAD");
- }
if (must_list_refs) {
trace2_region_enter("fetch", "remote_refs", the_repository);
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index 626deb05f0..4d0cbe9872 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -708,6 +708,19 @@ test_expect_success 'exact oid fetch with tag following' '
git -C exact-oid-tags rev-parse --verify my-tag
'
+test_expect_success 'exact oid fetch avoids pointless HEAD request' '
+ git init exact-oid-head &&
+ git -C exact-oid-head remote add origin ../prefix-parent &&
+
+ commit=$(git -C prefix-parent rev-parse --verify HEAD) &&
+
+ test_when_finished "rm -f log" &&
+ GIT_TRACE_PACKET="$(pwd)/log" \
+ git -C exact-oid-head fetch --no-tags origin \
+ $commit:refs/heads/exact &&
+ test_grep ! command=ls-refs log
+'
+
test_expect_success 'fetch supports various ways of have lines' '
rm -rf server client trace &&
git init server &&