Git fork
at reftables-rust 238 lines 5.8 kB view raw
1#!/bin/sh 2 3test_description='test refspec written by clone-command' 4GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 5export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 6 7. ./test-lib.sh 8 9test_expect_success 'setup' ' 10 # Make two branches, "main" and "side" 11 echo one >file && 12 git add file && 13 git commit -m one && 14 echo two >file && 15 git commit -a -m two && 16 git tag two && 17 echo three >file && 18 git commit -a -m three && 19 git checkout -b side && 20 echo four >file && 21 git commit -a -m four && 22 git checkout main && 23 git tag five && 24 25 # default clone 26 git clone . dir_all && 27 28 # default clone --no-tags 29 git clone --no-tags . dir_all_no_tags && 30 31 # default --single that follows HEAD=main 32 git clone --single-branch . dir_main && 33 34 # default --single that follows HEAD=main with no tags 35 git clone --single-branch --no-tags . dir_main_no_tags && 36 37 # default --single that follows HEAD=side 38 git checkout side && 39 git clone --single-branch . dir_side && 40 41 # explicit --single that follows side 42 git checkout main && 43 git clone --single-branch --branch side . dir_side2 && 44 45 # default --single with --mirror 46 git clone --single-branch --mirror . dir_mirror && 47 48 # default --single with --branch and --mirror 49 git clone --single-branch --mirror --branch side . dir_mirror_side && 50 51 # --single that does not know what branch to follow 52 git checkout two^ && 53 git clone --single-branch . dir_detached && 54 55 # explicit --single with tag 56 git clone --single-branch --branch two . dir_tag && 57 58 # explicit --single with tag and --no-tags 59 git clone --single-branch --no-tags --branch two . dir_tag_no_tags && 60 61 # advance both "main" and "side" branches 62 git checkout side && 63 echo five >file && 64 git commit -a -m five && 65 git checkout main && 66 echo six >file && 67 git commit -a -m six && 68 69 # update tag 70 git tag -d two && git tag two 71' 72 73test_expect_success 'by default all branches will be kept updated' ' 74 ( 75 cd dir_all && 76 git fetch && 77 git for-each-ref refs/remotes/origin >refs && 78 sed -e "/HEAD$/d" \ 79 -e "s|/remotes/origin/|/heads/|" refs >../actual 80 ) && 81 # follow both main and side 82 git for-each-ref refs/heads >expect && 83 test_cmp expect actual 84' 85 86test_expect_success 'by default no tags will be kept updated' ' 87 ( 88 cd dir_all && 89 git fetch && 90 git for-each-ref refs/tags >../actual 91 ) && 92 git for-each-ref refs/tags >expect && 93 ! test_cmp expect actual && 94 test_line_count = 2 actual 95' 96 97test_expect_success 'clone with --no-tags' ' 98 ( 99 cd dir_all_no_tags && 100 grep tagOpt .git/config && 101 git fetch && 102 git for-each-ref refs/tags >../actual 103 ) && 104 test_must_be_empty actual 105' 106 107test_expect_success '--single-branch while HEAD pointing at main' ' 108 ( 109 cd dir_main && 110 git fetch --force && 111 git for-each-ref refs/remotes/origin >refs && 112 sed -e "/HEAD$/d" \ 113 -e "s|/remotes/origin/|/heads/|" refs >../actual 114 ) && 115 # only follow main 116 git for-each-ref refs/heads/main >expect && 117 # get & check latest tags 118 test_cmp expect actual && 119 ( 120 cd dir_main && 121 git fetch --tags --force && 122 git for-each-ref refs/tags >../actual 123 ) && 124 git for-each-ref refs/tags >expect && 125 test_cmp expect actual && 126 test_line_count = 2 actual 127' 128 129test_expect_success '--single-branch while HEAD pointing at main and --no-tags' ' 130 ( 131 cd dir_main_no_tags && 132 git fetch && 133 git for-each-ref refs/remotes/origin >refs && 134 sed -e "/HEAD$/d" \ 135 -e "s|/remotes/origin/|/heads/|" refs >../actual 136 ) && 137 # only follow main 138 git for-each-ref refs/heads/main >expect && 139 test_cmp expect actual && 140 # get tags (noop) 141 ( 142 cd dir_main_no_tags && 143 git fetch && 144 git for-each-ref refs/tags >../actual 145 ) && 146 test_must_be_empty actual && 147 test_line_count = 0 actual && 148 # get tags with --tags overrides tagOpt 149 ( 150 cd dir_main_no_tags && 151 git fetch --tags && 152 git for-each-ref refs/tags >../actual 153 ) && 154 git for-each-ref refs/tags >expect && 155 test_cmp expect actual && 156 test_line_count = 2 actual 157' 158 159test_expect_success '--single-branch while HEAD pointing at side' ' 160 ( 161 cd dir_side && 162 git fetch && 163 git for-each-ref refs/remotes/origin >refs && 164 sed -e "/HEAD$/d" \ 165 -e "s|/remotes/origin/|/heads/|" refs >../actual 166 ) && 167 # only follow side 168 git for-each-ref refs/heads/side >expect && 169 test_cmp expect actual 170' 171 172test_expect_success '--single-branch with explicit --branch side' ' 173 ( 174 cd dir_side2 && 175 git fetch && 176 git for-each-ref refs/remotes/origin >refs && 177 sed -e "/HEAD$/d" \ 178 -e "s|/remotes/origin/|/heads/|" refs >../actual 179 ) && 180 # only follow side 181 git for-each-ref refs/heads/side >expect && 182 test_cmp expect actual 183' 184 185test_expect_success '--single-branch with explicit --branch with tag fetches updated tag' ' 186 ( 187 cd dir_tag && 188 git fetch && 189 git for-each-ref refs/tags >../actual 190 ) && 191 git for-each-ref refs/tags >expect && 192 test_cmp expect actual 193' 194 195test_expect_success '--single-branch with explicit --branch with tag fetches updated tag despite --no-tags' ' 196 ( 197 cd dir_tag_no_tags && 198 git fetch && 199 git for-each-ref refs/tags >../actual 200 ) && 201 git for-each-ref refs/tags/two >expect && 202 test_cmp expect actual && 203 test_line_count = 1 actual 204' 205 206test_expect_success '--single-branch with --mirror' ' 207 ( 208 cd dir_mirror && 209 git fetch && 210 git for-each-ref refs > ../actual 211 ) && 212 git for-each-ref refs >expect && 213 test_cmp expect actual 214' 215 216test_expect_success '--single-branch with explicit --branch and --mirror' ' 217 ( 218 cd dir_mirror_side && 219 git fetch && 220 git for-each-ref refs > ../actual 221 ) && 222 git for-each-ref refs >expect && 223 test_cmp expect actual 224' 225 226test_expect_success '--single-branch with detached' ' 227 ( 228 cd dir_detached && 229 git fetch && 230 git for-each-ref refs/remotes/origin >refs && 231 sed -e "/HEAD$/d" \ 232 -e "s|/remotes/origin/|/heads/|" refs >../actual 233 ) && 234 # nothing 235 test_must_be_empty actual 236' 237 238test_done