|  | #!/bin/sh | 
|  |  | 
|  | test_description='test fetching of oddly-named refs' | 
|  | . ./test-lib.sh | 
|  |  | 
|  | # afterwards we will have: | 
|  | #  HEAD - two | 
|  | #  refs/for/refs/heads/master - one | 
|  | #  refs/heads/master - three | 
|  | test_expect_success 'setup repo with odd suffix ref' ' | 
|  | echo content >file && | 
|  | git add . && | 
|  | git commit -m one && | 
|  | git update-ref refs/for/refs/heads/master HEAD && | 
|  | echo content >>file && | 
|  | git commit -a -m two && | 
|  | echo content >>file && | 
|  | git commit -a -m three && | 
|  | git checkout HEAD^ | 
|  | ' | 
|  |  | 
|  | test_expect_success 'suffix ref is ignored during fetch' ' | 
|  | git clone --bare file://"$PWD" suffix && | 
|  | echo three >expect && | 
|  | git --git-dir=suffix log -1 --format=%s refs/heads/master >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_expect_success 'try to create repo with absurdly long refname' ' | 
|  | ref240=$_z40/$_z40/$_z40/$_z40/$_z40/$_z40 && | 
|  | ref1440=$ref240/$ref240/$ref240/$ref240/$ref240/$ref240 && | 
|  | git init long && | 
|  | ( | 
|  | cd long && | 
|  | test_commit long && | 
|  | test_commit master | 
|  | ) && | 
|  | if git -C long update-ref refs/heads/$ref1440 long; then | 
|  | test_set_prereq LONG_REF | 
|  | else | 
|  | echo >&2 "long refs not supported" | 
|  | fi | 
|  | ' | 
|  |  | 
|  | test_expect_success LONG_REF 'fetch handles extremely long refname' ' | 
|  | git fetch long refs/heads/*:refs/remotes/long/* && | 
|  | cat >expect <<-\EOF && | 
|  | long | 
|  | master | 
|  | EOF | 
|  | git for-each-ref --format="%(subject)" refs/remotes/long >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_expect_success LONG_REF 'push handles extremely long refname' ' | 
|  | git push long :refs/heads/$ref1440 && | 
|  | git -C long for-each-ref --format="%(subject)" refs/heads >actual && | 
|  | echo master >expect && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_done |