ls-refs: introduce ls-refs server command
Introduce the ls-refs server command. In protocol v2, the ls-refs command is used to request the ref advertisement from the server. Since it is a command which can be requested (as opposed to mandatory in v1), a client can sent a number of parameters in its request to limit the ref advertisement based on provided ref-prefixes. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
ed10cb952d
commit
72d0ea0056
@ -8,6 +8,7 @@ test_expect_success 'test capability advertisement' '
|
||||
cat >expect <<-EOF &&
|
||||
version 2
|
||||
agent=git/$(git version | cut -d" " -f3)
|
||||
ls-refs
|
||||
0000
|
||||
EOF
|
||||
|
||||
@ -57,4 +58,118 @@ test_expect_success 'request invalid command' '
|
||||
test_i18ngrep "invalid command" err
|
||||
'
|
||||
|
||||
# Test the basics of ls-refs
|
||||
#
|
||||
test_expect_success 'setup some refs and tags' '
|
||||
test_commit one &&
|
||||
git branch dev master &&
|
||||
test_commit two &&
|
||||
git symbolic-ref refs/heads/release refs/heads/master &&
|
||||
git tag -a -m "annotated tag" annotated-tag
|
||||
'
|
||||
|
||||
test_expect_success 'basics of ls-refs' '
|
||||
test-pkt-line pack >in <<-EOF &&
|
||||
command=ls-refs
|
||||
0000
|
||||
EOF
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
$(git rev-parse HEAD) HEAD
|
||||
$(git rev-parse refs/heads/dev) refs/heads/dev
|
||||
$(git rev-parse refs/heads/master) refs/heads/master
|
||||
$(git rev-parse refs/heads/release) refs/heads/release
|
||||
$(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag
|
||||
$(git rev-parse refs/tags/one) refs/tags/one
|
||||
$(git rev-parse refs/tags/two) refs/tags/two
|
||||
0000
|
||||
EOF
|
||||
|
||||
git serve --stateless-rpc <in >out &&
|
||||
test-pkt-line unpack <out >actual &&
|
||||
test_cmp actual expect
|
||||
'
|
||||
|
||||
test_expect_success 'basic ref-prefixes' '
|
||||
test-pkt-line pack >in <<-EOF &&
|
||||
command=ls-refs
|
||||
0001
|
||||
ref-prefix refs/heads/master
|
||||
ref-prefix refs/tags/one
|
||||
0000
|
||||
EOF
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
$(git rev-parse refs/heads/master) refs/heads/master
|
||||
$(git rev-parse refs/tags/one) refs/tags/one
|
||||
0000
|
||||
EOF
|
||||
|
||||
git serve --stateless-rpc <in >out &&
|
||||
test-pkt-line unpack <out >actual &&
|
||||
test_cmp actual expect
|
||||
'
|
||||
|
||||
test_expect_success 'refs/heads prefix' '
|
||||
test-pkt-line pack >in <<-EOF &&
|
||||
command=ls-refs
|
||||
0001
|
||||
ref-prefix refs/heads/
|
||||
0000
|
||||
EOF
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
$(git rev-parse refs/heads/dev) refs/heads/dev
|
||||
$(git rev-parse refs/heads/master) refs/heads/master
|
||||
$(git rev-parse refs/heads/release) refs/heads/release
|
||||
0000
|
||||
EOF
|
||||
|
||||
git serve --stateless-rpc <in >out &&
|
||||
test-pkt-line unpack <out >actual &&
|
||||
test_cmp actual expect
|
||||
'
|
||||
|
||||
test_expect_success 'peel parameter' '
|
||||
test-pkt-line pack >in <<-EOF &&
|
||||
command=ls-refs
|
||||
0001
|
||||
peel
|
||||
ref-prefix refs/tags/
|
||||
0000
|
||||
EOF
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
$(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag peeled:$(git rev-parse refs/tags/annotated-tag^{})
|
||||
$(git rev-parse refs/tags/one) refs/tags/one
|
||||
$(git rev-parse refs/tags/two) refs/tags/two
|
||||
0000
|
||||
EOF
|
||||
|
||||
git serve --stateless-rpc <in >out &&
|
||||
test-pkt-line unpack <out >actual &&
|
||||
test_cmp actual expect
|
||||
'
|
||||
|
||||
test_expect_success 'symrefs parameter' '
|
||||
test-pkt-line pack >in <<-EOF &&
|
||||
command=ls-refs
|
||||
0001
|
||||
symrefs
|
||||
ref-prefix refs/heads/
|
||||
0000
|
||||
EOF
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
$(git rev-parse refs/heads/dev) refs/heads/dev
|
||||
$(git rev-parse refs/heads/master) refs/heads/master
|
||||
$(git rev-parse refs/heads/release) refs/heads/release symref-target:refs/heads/master
|
||||
0000
|
||||
EOF
|
||||
|
||||
git serve --stateless-rpc <in >out &&
|
||||
test-pkt-line unpack <out >actual &&
|
||||
test_cmp actual expect
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user