3 test_description='refspec parsing'
 
   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
 
  15                 title="$kind $refspec"
 
  16                 test='git ls-remote frotz'
 
  18                 title="$kind $refspec (invalid)"
 
  19                 test='test_must_fail git ls-remote frotz'
 
  21         test_expect_success "$title" "$test"
 
  24 test_refspec push ''                                            invalid
 
  26 test_refspec push '::'                                          invalid
 
  27 test_refspec push '+:'
 
  30 test_refspec fetch ':'
 
  31 test_refspec fetch '::'                                         invalid
 
  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'
 
  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...
 
  44 : test_refspec push 'refs/heads/master::refs/remotes/frotz/xyzzy'       invalid
 
  45 : test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy'        invalid
 
  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
 
  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
 
  59 test_refspec push 'HEAD'
 
  60 test_refspec fetch 'HEAD'
 
  61 test_refspec push 'refs/heads/ nitfol'                          invalid
 
  62 test_refspec fetch 'refs/heads/ nitfol'                         invalid
 
  64 test_refspec push 'HEAD:'                                       invalid
 
  65 test_refspec fetch 'HEAD:'
 
  66 test_refspec push 'refs/heads/ nitfol:'                         invalid
 
  67 test_refspec fetch 'refs/heads/ nitfol:'                        invalid
 
  69 test_refspec push ':refs/remotes/frotz/deleteme'
 
  70 test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
 
  71 test_refspec push ':refs/remotes/frotz/delete me'               invalid
 
  72 test_refspec fetch ':refs/remotes/frotz/HEAD to me'             invalid
 
  74 test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
 
  75 test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
 
  77 test_refspec fetch 'refs/heads*/for-linus:refs/remotes/mine/*'
 
  78 test_refspec push 'refs/heads*/for-linus:refs/remotes/mine/*'
 
  80 test_refspec fetch 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
 
  81 test_refspec push 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
 
  83 test_refspec fetch 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
 
  84 test_refspec push 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
 
  86 test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*'
 
  87 test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*'
 
  89 good=$(printf '\303\204')
 
  90 test_refspec fetch "refs/heads/${good}"
 
  91 bad=$(printf '\011tab')
 
  92 test_refspec fetch "refs/heads/${bad}"                          invalid