| #!/bin/sh |
| |
| test_description='test fetching of oddly-named refs' |
| GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
| export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| |
| . ./test-lib.sh |
| |
| # afterwards we will have: |
| # HEAD - two |
| # refs/for/refs/heads/main - one |
| # refs/heads/main - 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/main 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/main >actual && |
| test_cmp expect actual |
| ' |
| |
| test_expect_success 'try to create repo with absurdly long refname' ' |
| ref240=$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID && |
| ref1440=$ref240/$ref240/$ref240/$ref240/$ref240/$ref240 && |
| git init long && |
| ( |
| cd long && |
| test_commit long && |
| test_commit main |
| ) && |
| 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 |
| main |
| 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 main >expect && |
| test_cmp expect actual |
| ' |
| |
| test_done |