#!/bin/sh
test_description='test functionality common to smart fetch & push'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success 'setup' '
test_commit --no-tag initial
'
test_expect_success 'git upload-pack --http-backend-info-refs and --advertise-refs are aliased' '
git upload-pack --http-backend-info-refs . >expected 2>err.expected &&
git upload-pack --advertise-refs . >actual 2>err.actual &&
test_cmp err.expected err.actual &&
test_cmp expected actual
'
test_expect_success 'git receive-pack --http-backend-info-refs and --advertise-refs are aliased' '
git receive-pack --http-backend-info-refs . >expected 2>err.expected &&
git receive-pack --advertise-refs . >actual 2>err.actual &&
test_cmp err.expected err.actual &&
test_cmp expected actual
'
test_expect_success 'git upload-pack --advertise-refs' '
cat >expect <<-EOF &&
$(git rev-parse HEAD) HEAD
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
# We only care about GIT_PROTOCOL, not GIT_TEST_PROTOCOL_VERSION
sane_unset GIT_PROTOCOL &&
GIT_TEST_PROTOCOL_VERSION=2 \
git upload-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect &&
# The --advertise-refs alias works
git upload-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git upload-pack --advertise-refs: v0' '
# With no specified protocol
cat >expect <<-EOF &&
$(git rev-parse HEAD) HEAD
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
git upload-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect &&
# With explicit v0
GIT_PROTOCOL=version=0 \
git upload-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual 2>err &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git receive-pack --advertise-refs: v0' '
# With no specified protocol
cat >expect <<-EOF &&
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
git receive-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect &&
# With explicit v0
GIT_PROTOCOL=version=0 \
git receive-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual 2>err &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git upload-pack --advertise-refs: v1' '
# With no specified protocol
cat >expect <<-EOF &&
version 1
$(git rev-parse HEAD) HEAD
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
GIT_PROTOCOL=version=1 \
git upload-pack --advertise-refs . >out &&
test-tool pkt-line unpack <out >actual 2>err &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git receive-pack --advertise-refs: v1' '
# With no specified protocol
cat >expect <<-EOF &&
version 1
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
GIT_PROTOCOL=version=1 \
git receive-pack --advertise-refs . >out &&
test-tool pkt-line unpack <out >actual 2>err &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git upload-pack --advertise-refs: v2' '
cat >expect <<-EOF &&
version 2
agent=FAKE
ls-refs=unborn
fetch=shallow wait-for-done
server-option
object-format=$(test_oid algo)
0000
EOF
GIT_PROTOCOL=version=2 \
GIT_USER_AGENT=FAKE \
git upload-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect
'
test_expect_success 'git receive-pack --advertise-refs: v2' '
# There is no v2 yet for receive-pack, implicit v0
cat >expect <<-EOF &&
$(git rev-parse HEAD) $(git symbolic-ref HEAD)
0000
EOF
GIT_PROTOCOL=version=2 \
git receive-pack --advertise-refs . >out 2>err &&
test-tool pkt-line unpack <out >actual &&
test_must_be_empty err &&
test_cmp actual expect
'
test_done