Merge branch 'jc/diff-I-status-fix'
[git] / t / t5511-refspec.sh
1 #!/bin/sh
2
3 test_description='refspec parsing'
4
5 . ./test-lib.sh
6
7 test_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
24 test_refspec push ''                                            invalid
25 test_refspec push ':'
26 test_refspec push '::'                                          invalid
27 test_refspec push '+:'
28
29 test_refspec fetch ''
30 test_refspec fetch ':'
31 test_refspec fetch '::'                                         invalid
32
33 test_refspec push 'refs/heads/*:refs/remotes/frotz/*'
34 test_refspec push 'refs/heads/*:refs/remotes/frotz'             invalid
35 test_refspec push 'refs/heads:refs/remotes/frotz/*'             invalid
36 test_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
47 test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*'
48 test_refspec fetch 'refs/heads/*:refs/remotes/frotz'            invalid
49 test_refspec fetch 'refs/heads:refs/remotes/frotz/*'            invalid
50 test_refspec fetch 'refs/heads/master:refs/remotes/frotz/xyzzy'
51 test_refspec fetch 'refs/heads/master::refs/remotes/frotz/xyzzy'        invalid
52 test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid
53
54 test_refspec push 'master~1:refs/remotes/frotz/backup'
55 test_refspec fetch 'master~1:refs/remotes/frotz/backup'         invalid
56 test_refspec push 'HEAD~4:refs/remotes/frotz/new'
57 test_refspec fetch 'HEAD~4:refs/remotes/frotz/new'              invalid
58
59 test_refspec push 'HEAD'
60 test_refspec fetch 'HEAD'
61 test_refspec push '@'
62 test_refspec fetch '@'
63 test_refspec push 'refs/heads/ nitfol'                          invalid
64 test_refspec fetch 'refs/heads/ nitfol'                         invalid
65
66 test_refspec push 'HEAD:'                                       invalid
67 test_refspec fetch 'HEAD:'
68 test_refspec push 'refs/heads/ nitfol:'                         invalid
69 test_refspec fetch 'refs/heads/ nitfol:'                        invalid
70
71 test_refspec push ':refs/remotes/frotz/deleteme'
72 test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
73 test_refspec push ':refs/remotes/frotz/delete me'               invalid
74 test_refspec fetch ':refs/remotes/frotz/HEAD to me'             invalid
75
76 test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
77 test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
78
79 test_refspec fetch 'refs/heads*/for-linus:refs/remotes/mine/*'
80 test_refspec push 'refs/heads*/for-linus:refs/remotes/mine/*'
81
82 test_refspec fetch 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
83 test_refspec push 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
84
85 test_refspec fetch 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
86 test_refspec push 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
87
88 test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*'
89 test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*'
90
91 good=$(printf '\303\204')
92 test_refspec fetch "refs/heads/${good}"
93 bad=$(printf '\011tab')
94 test_refspec fetch "refs/heads/${bad}"                          invalid
95
96 test_done