| #!/bin/sh | |
| test_description='refspec parsing' | |
| . ./test-lib.sh | |
| test_refspec () { | |
| kind=$1 refspec=$2 expect=$3 | |
| git config remote.frotz.url "." && | |
| git config --remove-section remote.frotz && | |
| git config remote.frotz.url "." && | |
| git config "remote.frotz.$kind" "$refspec" && | |
| if test "$expect" != invalid | |
| then | |
| title="$kind $refspec" | |
| test='git ls-remote frotz' | |
| else | |
| title="$kind $refspec (invalid)" | |
| test='test_must_fail git ls-remote frotz' | |
| fi | |
| test_expect_success "$title" "$test" | |
| } | |
| test_refspec push '' invalid | |
| test_refspec push ':' | |
| test_refspec push '::' invalid | |
| test_refspec push '+:' | |
| test_refspec fetch '' | |
| test_refspec fetch ':' | |
| test_refspec fetch '::' invalid | |
| test_refspec push 'refs/heads/*:refs/remotes/frotz/*' | |
| test_refspec push 'refs/heads/*:refs/remotes/frotz' invalid | |
| test_refspec push 'refs/heads:refs/remotes/frotz/*' invalid | |
| test_refspec push 'refs/heads/main:refs/remotes/frotz/xyzzy' | |
| # These have invalid LHS, but we do not have a formal "valid sha-1 | |
| # expression syntax checker" so they are not checked with the current | |
| # code. They will be caught downstream anyway, but we may want to | |
| # have tighter check later... | |
| : test_refspec push 'refs/heads/main::refs/remotes/frotz/xyzzy' invalid | |
| : test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid | |
| test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*' | |
| test_refspec fetch 'refs/heads/*:refs/remotes/frotz' invalid | |
| test_refspec fetch 'refs/heads:refs/remotes/frotz/*' invalid | |
| test_refspec fetch 'refs/heads/main:refs/remotes/frotz/xyzzy' | |
| test_refspec fetch 'refs/heads/main::refs/remotes/frotz/xyzzy' invalid | |
| test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid | |
| test_refspec push 'main~1:refs/remotes/frotz/backup' | |
| test_refspec fetch 'main~1:refs/remotes/frotz/backup' invalid | |
| test_refspec push 'HEAD~4:refs/remotes/frotz/new' | |
| test_refspec fetch 'HEAD~4:refs/remotes/frotz/new' invalid | |
| test_refspec push 'HEAD' | |
| test_refspec fetch 'HEAD' | |
| test_refspec push '@' | |
| test_refspec fetch '@' | |
| test_refspec push 'refs/heads/ nitfol' invalid | |
| test_refspec fetch 'refs/heads/ nitfol' invalid | |
| test_refspec push 'HEAD:' invalid | |
| test_refspec fetch 'HEAD:' | |
| test_refspec push 'refs/heads/ nitfol:' invalid | |
| test_refspec fetch 'refs/heads/ nitfol:' invalid | |
| test_refspec push ':refs/remotes/frotz/deleteme' | |
| test_refspec fetch ':refs/remotes/frotz/HEAD-to-me' | |
| test_refspec push ':refs/remotes/frotz/delete me' invalid | |
| test_refspec fetch ':refs/remotes/frotz/HEAD to me' invalid | |
| test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*-blah' | |
| test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*-blah' | |
| test_refspec fetch 'refs/heads*/for-linus:refs/remotes/mine/*' | |
| test_refspec push 'refs/heads*/for-linus:refs/remotes/mine/*' | |
| test_refspec fetch 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid | |
| test_refspec push 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid | |
| test_refspec fetch 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid | |
| test_refspec push 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid | |
| test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*' | |
| test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*' | |
| good=$(printf '\303\204') | |
| test_refspec fetch "refs/heads/${good}" | |
| bad=$(printf '\011tab') | |
| test_refspec fetch "refs/heads/${bad}" invalid | |
| test_done |