1#!/bin/sh
2
3test_description='refspec parsing'
4
5. ./test-lib.sh
6
7test_refspec () {
8 kind=$1 refspec=$2 expect=$3
9 git config remote.frotz.url "." &&
10 git config --remove-section remote.frotz &&
11 git config remote.frotz.url "." &&
12 git config "remote.frotz.$kind" "$refspec" &&
13 if test "$expect" != invalid
14 then
15 title="$kind $refspec"
16 test='git ls-remote frotz'
17 else
18 title="$kind $refspec (invalid)"
19 test='test_must_fail git ls-remote frotz'
20 fi
21 test_expect_success "$title" "$test"
22}
23
24test_refspec push '' invalid
25test_refspec push ':'
26test_refspec push '::' invalid
27test_refspec push '+:'
28
29test_refspec fetch ''
30test_refspec fetch ':'
31test_refspec fetch '::' invalid
32
33test_refspec push 'refs/heads/*:refs/remotes/frotz/*'
34test_refspec push 'refs/heads/*:refs/remotes/frotz' invalid
35test_refspec push 'refs/heads:refs/remotes/frotz/*' invalid
36test_refspec push 'refs/heads/master:refs/remotes/frotz/xyzzy'
37
38
39# These have invalid LHS, but we do not have a formal "valid sha-1
40# expression syntax checker" so they are not checked with the current
41# code. They will be caught downstream anyway, but we may want to
42# have tighter check later...
43
44: test_refspec push 'refs/heads/master::refs/remotes/frotz/xyzzy' invalid
45: test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid
46
47test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*'
48test_refspec fetch 'refs/heads/*:refs/remotes/frotz' invalid
49test_refspec fetch 'refs/heads:refs/remotes/frotz/*' invalid
50test_refspec fetch 'refs/heads/master:refs/remotes/frotz/xyzzy'
51test_refspec fetch 'refs/heads/master::refs/remotes/frotz/xyzzy' invalid
52test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid
53
54test_refspec push 'master~1:refs/remotes/frotz/backup'
55test_refspec fetch 'master~1:refs/remotes/frotz/backup' invalid
56test_refspec push 'HEAD~4:refs/remotes/frotz/new'
57test_refspec fetch 'HEAD~4:refs/remotes/frotz/new' invalid
58
59test_refspec push 'HEAD'
60test_refspec fetch 'HEAD'
61test_refspec push 'refs/heads/ nitfol' invalid
62test_refspec fetch 'refs/heads/ nitfol' invalid
63
64test_refspec push 'HEAD:' invalid
65test_refspec fetch 'HEAD:'
66test_refspec push 'refs/heads/ nitfol:' invalid
67test_refspec fetch 'refs/heads/ nitfol:' invalid
68
69test_refspec push ':refs/remotes/frotz/deleteme'
70test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
71test_refspec push ':refs/remotes/frotz/delete me' invalid
72test_refspec fetch ':refs/remotes/frotz/HEAD to me' invalid
73
74test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
75test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
76
77test_refspec fetch 'refs/heads*/for-linus:refs/remotes/mine/*'
78test_refspec push 'refs/heads*/for-linus:refs/remotes/mine/*'
79
80test_refspec fetch 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
81test_refspec push 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
82
83test_refspec fetch 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
84test_refspec push 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
85
86test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*'
87test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*'
88
89good=$(printf '\303\204')
90test_refspec fetch "refs/heads/${good}"
91bad=$(printf '\011tab')
92test_refspec fetch "refs/heads/${bad}" invalid
93
94test_done