]> git.ipfire.org Git - thirdparty/git.git/blob - t/t5527-fetch-odd-refs.sh
0de8eb5b6f885565047f78c9573fa075dad59547
[thirdparty/git.git] / t / t5527-fetch-odd-refs.sh
1 #!/bin/sh
2
3 test_description='test fetching of oddly-named refs'
4 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
5 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
6
7 . ./test-lib.sh
8
9 # afterwards we will have:
10 # HEAD - two
11 # refs/for/refs/heads/main - one
12 # refs/heads/main - three
13 test_expect_success 'setup repo with odd suffix ref' '
14 echo content >file &&
15 git add . &&
16 git commit -m one &&
17 git update-ref refs/for/refs/heads/main HEAD &&
18 echo content >>file &&
19 git commit -a -m two &&
20 echo content >>file &&
21 git commit -a -m three &&
22 git checkout HEAD^
23 '
24
25 test_expect_success 'suffix ref is ignored during fetch' '
26 git clone --bare file://"$PWD" suffix &&
27 echo three >expect &&
28 git --git-dir=suffix log -1 --format=%s refs/heads/main >actual &&
29 test_cmp expect actual
30 '
31
32 test_expect_success 'try to create repo with absurdly long refname' '
33 ref240=$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID &&
34 ref1440=$ref240/$ref240/$ref240/$ref240/$ref240/$ref240 &&
35 git init long &&
36 (
37 cd long &&
38 test_commit long &&
39 test_commit main
40 ) &&
41 if git -C long update-ref refs/heads/$ref1440 long; then
42 test_set_prereq LONG_REF
43 else
44 echo >&2 "long refs not supported"
45 fi
46 '
47
48 test_expect_success LONG_REF 'fetch handles extremely long refname' '
49 git fetch long refs/heads/*:refs/remotes/long/* &&
50 cat >expect <<-\EOF &&
51 long
52 main
53 EOF
54 git for-each-ref --format="%(subject)" refs/remotes/long \
55 --exclude=refs/remotes/long/HEAD >actual &&
56 test_cmp expect actual
57 '
58
59 test_expect_success LONG_REF 'push handles extremely long refname' '
60 git push long :refs/heads/$ref1440 &&
61 git -C long for-each-ref --format="%(subject)" refs/heads >actual &&
62 echo main >expect &&
63 test_cmp expect actual
64 '
65
66 test_done