Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='Test ls-files recurse-submodules feature |
| 4 | |
| 5 | This test verifies the recurse-submodules feature correctly lists files from |
| 6 | submodules. |
| 7 | ' |
| 8 | |
| 9 | . ./test-lib.sh |
| 10 | |
| 11 | test_expect_success 'setup directory structure and submodules' ' |
| 12 | echo a >a && |
| 13 | mkdir b && |
| 14 | echo b >b/b && |
| 15 | git add a b && |
| 16 | git commit -m "add a and b" && |
| 17 | git init submodule && |
| 18 | echo c >submodule/c && |
| 19 | git -C submodule add c && |
| 20 | git -C submodule commit -m "add c" && |
| 21 | git submodule add ./submodule && |
| 22 | git commit -m "added submodule" |
| 23 | ' |
| 24 | |
| 25 | test_expect_success 'ls-files correctly outputs files in submodule' ' |
| 26 | cat >expect <<-\EOF && |
| 27 | .gitmodules |
| 28 | a |
| 29 | b/b |
| 30 | submodule/c |
| 31 | EOF |
| 32 | |
| 33 | git ls-files --recurse-submodules >actual && |
| 34 | test_cmp expect actual |
| 35 | ' |
| 36 | |
Brandon Williams | 07c01b9 | 2016-10-07 11:18:50 -0700 | [diff] [blame] | 37 | test_expect_success 'ls-files correctly outputs files in submodule with -z' ' |
| 38 | lf_to_nul >expect <<-\EOF && |
| 39 | .gitmodules |
| 40 | a |
| 41 | b/b |
| 42 | submodule/c |
| 43 | EOF |
| 44 | |
| 45 | git ls-files --recurse-submodules -z >actual && |
| 46 | test_cmp expect actual |
| 47 | ' |
| 48 | |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 49 | test_expect_success 'ls-files does not output files not added to a repo' ' |
| 50 | cat >expect <<-\EOF && |
| 51 | .gitmodules |
| 52 | a |
| 53 | b/b |
| 54 | submodule/c |
| 55 | EOF |
| 56 | |
| 57 | echo a >not_added && |
| 58 | echo b >b/not_added && |
| 59 | echo c >submodule/not_added && |
| 60 | git ls-files --recurse-submodules >actual && |
| 61 | test_cmp expect actual |
| 62 | ' |
| 63 | |
| 64 | test_expect_success 'ls-files recurses more than 1 level' ' |
| 65 | cat >expect <<-\EOF && |
| 66 | .gitmodules |
| 67 | a |
| 68 | b/b |
| 69 | submodule/.gitmodules |
| 70 | submodule/c |
| 71 | submodule/subsub/d |
| 72 | EOF |
| 73 | |
| 74 | git init submodule/subsub && |
| 75 | echo d >submodule/subsub/d && |
| 76 | git -C submodule/subsub add d && |
| 77 | git -C submodule/subsub commit -m "add d" && |
| 78 | git -C submodule submodule add ./subsub && |
| 79 | git -C submodule commit -m "added subsub" && |
Jacob Keller | 2e5d650 | 2017-04-13 10:12:23 -0700 | [diff] [blame] | 80 | git submodule absorbgitdirs && |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 81 | git ls-files --recurse-submodules >actual && |
| 82 | test_cmp expect actual |
| 83 | ' |
| 84 | |
Jacob Keller | 2cfe66a | 2017-04-13 10:12:24 -0700 | [diff] [blame] | 85 | test_expect_success 'ls-files works with GIT_DIR' ' |
| 86 | cat >expect <<-\EOF && |
| 87 | .gitmodules |
| 88 | c |
| 89 | subsub/d |
| 90 | EOF |
| 91 | |
| 92 | git --git-dir=submodule/.git ls-files --recurse-submodules >actual && |
| 93 | test_cmp expect actual |
| 94 | ' |
| 95 | |
Brandon Williams | 75a6315 | 2016-10-07 11:18:51 -0700 | [diff] [blame] | 96 | test_expect_success '--recurse-submodules and pathspecs setup' ' |
| 97 | echo e >submodule/subsub/e.txt && |
| 98 | git -C submodule/subsub add e.txt && |
| 99 | git -C submodule/subsub commit -m "adding e.txt" && |
| 100 | echo f >submodule/f.TXT && |
| 101 | echo g >submodule/g.txt && |
| 102 | git -C submodule add f.TXT g.txt && |
| 103 | git -C submodule commit -m "add f and g" && |
| 104 | echo h >h.txt && |
| 105 | mkdir sib && |
| 106 | echo sib >sib/file && |
| 107 | git add h.txt sib/file && |
| 108 | git commit -m "add h and sib/file" && |
| 109 | git init sub && |
| 110 | echo sub >sub/file && |
| 111 | git -C sub add file && |
| 112 | git -C sub commit -m "add file" && |
| 113 | git submodule add ./sub && |
| 114 | git commit -m "added sub" && |
| 115 | |
| 116 | cat >expect <<-\EOF && |
| 117 | .gitmodules |
| 118 | a |
| 119 | b/b |
| 120 | h.txt |
| 121 | sib/file |
| 122 | sub/file |
| 123 | submodule/.gitmodules |
| 124 | submodule/c |
| 125 | submodule/f.TXT |
| 126 | submodule/g.txt |
| 127 | submodule/subsub/d |
| 128 | submodule/subsub/e.txt |
| 129 | EOF |
| 130 | |
| 131 | git ls-files --recurse-submodules >actual && |
| 132 | test_cmp expect actual && |
| 133 | cat actual && |
| 134 | git ls-files --recurse-submodules "*" >actual && |
| 135 | test_cmp expect actual |
| 136 | ' |
| 137 | |
Brandon Williams | 188dce1 | 2017-06-22 11:43:48 -0700 | [diff] [blame] | 138 | test_expect_success 'inactive submodule' ' |
| 139 | test_when_finished "git config --bool submodule.submodule.active true" && |
| 140 | test_when_finished "git -C submodule config --bool submodule.subsub.active true" && |
| 141 | git config --bool submodule.submodule.active "false" && |
| 142 | |
| 143 | cat >expect <<-\EOF && |
| 144 | .gitmodules |
| 145 | a |
| 146 | b/b |
| 147 | h.txt |
| 148 | sib/file |
| 149 | sub/file |
| 150 | submodule |
| 151 | EOF |
| 152 | |
| 153 | git ls-files --recurse-submodules >actual && |
| 154 | test_cmp expect actual && |
| 155 | |
| 156 | git config --bool submodule.submodule.active "true" && |
| 157 | git -C submodule config --bool submodule.subsub.active "false" && |
| 158 | |
| 159 | cat >expect <<-\EOF && |
| 160 | .gitmodules |
| 161 | a |
| 162 | b/b |
| 163 | h.txt |
| 164 | sib/file |
| 165 | sub/file |
| 166 | submodule/.gitmodules |
| 167 | submodule/c |
| 168 | submodule/f.TXT |
| 169 | submodule/g.txt |
| 170 | submodule/subsub |
| 171 | EOF |
| 172 | |
| 173 | git ls-files --recurse-submodules >actual && |
| 174 | test_cmp expect actual |
| 175 | ' |
| 176 | |
Brandon Williams | 75a6315 | 2016-10-07 11:18:51 -0700 | [diff] [blame] | 177 | test_expect_success '--recurse-submodules and pathspecs' ' |
| 178 | cat >expect <<-\EOF && |
| 179 | h.txt |
| 180 | submodule/g.txt |
| 181 | submodule/subsub/e.txt |
| 182 | EOF |
| 183 | |
| 184 | git ls-files --recurse-submodules "*.txt" >actual && |
| 185 | test_cmp expect actual |
| 186 | ' |
| 187 | |
| 188 | test_expect_success '--recurse-submodules and pathspecs' ' |
| 189 | cat >expect <<-\EOF && |
| 190 | h.txt |
| 191 | submodule/f.TXT |
| 192 | submodule/g.txt |
| 193 | submodule/subsub/e.txt |
| 194 | EOF |
| 195 | |
| 196 | git ls-files --recurse-submodules ":(icase)*.txt" >actual && |
| 197 | test_cmp expect actual |
| 198 | ' |
| 199 | |
| 200 | test_expect_success '--recurse-submodules and pathspecs' ' |
| 201 | cat >expect <<-\EOF && |
| 202 | h.txt |
| 203 | submodule/f.TXT |
| 204 | submodule/g.txt |
| 205 | EOF |
| 206 | |
| 207 | git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual && |
| 208 | test_cmp expect actual |
| 209 | ' |
| 210 | |
| 211 | test_expect_success '--recurse-submodules and pathspecs' ' |
| 212 | cat >expect <<-\EOF && |
| 213 | sub/file |
| 214 | EOF |
| 215 | |
| 216 | git ls-files --recurse-submodules "sub" >actual && |
| 217 | test_cmp expect actual && |
| 218 | git ls-files --recurse-submodules "sub/" >actual && |
| 219 | test_cmp expect actual && |
| 220 | git ls-files --recurse-submodules "sub/file" >actual && |
| 221 | test_cmp expect actual && |
| 222 | git ls-files --recurse-submodules "su*/file" >actual && |
| 223 | test_cmp expect actual && |
| 224 | git ls-files --recurse-submodules "su?/file" >actual && |
| 225 | test_cmp expect actual |
| 226 | ' |
| 227 | |
| 228 | test_expect_success '--recurse-submodules and pathspecs' ' |
| 229 | cat >expect <<-\EOF && |
| 230 | sib/file |
| 231 | sub/file |
| 232 | EOF |
| 233 | |
| 234 | git ls-files --recurse-submodules "s??/file" >actual && |
| 235 | test_cmp expect actual && |
| 236 | git ls-files --recurse-submodules "s???file" >actual && |
| 237 | test_cmp expect actual && |
| 238 | git ls-files --recurse-submodules "s*file" >actual && |
| 239 | test_cmp expect actual |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 240 | ' |
| 241 | |
Brandon Williams | b2dfeb7 | 2017-03-17 10:22:57 -0700 | [diff] [blame] | 242 | test_expect_success '--recurse-submodules and relative paths' ' |
| 243 | # From subdir |
| 244 | cat >expect <<-\EOF && |
| 245 | b |
| 246 | EOF |
| 247 | git -C b ls-files --recurse-submodules >actual && |
| 248 | test_cmp expect actual && |
| 249 | |
| 250 | # Relative path to top |
| 251 | cat >expect <<-\EOF && |
| 252 | ../.gitmodules |
| 253 | ../a |
| 254 | b |
| 255 | ../h.txt |
| 256 | ../sib/file |
| 257 | ../sub/file |
| 258 | ../submodule/.gitmodules |
| 259 | ../submodule/c |
| 260 | ../submodule/f.TXT |
| 261 | ../submodule/g.txt |
| 262 | ../submodule/subsub/d |
| 263 | ../submodule/subsub/e.txt |
| 264 | EOF |
| 265 | git -C b ls-files --recurse-submodules -- .. >actual && |
| 266 | test_cmp expect actual && |
| 267 | |
| 268 | # Relative path to submodule |
| 269 | cat >expect <<-\EOF && |
| 270 | ../submodule/.gitmodules |
| 271 | ../submodule/c |
| 272 | ../submodule/f.TXT |
| 273 | ../submodule/g.txt |
| 274 | ../submodule/subsub/d |
| 275 | ../submodule/subsub/e.txt |
| 276 | EOF |
| 277 | git -C b ls-files --recurse-submodules -- ../submodule >actual && |
| 278 | test_cmp expect actual |
| 279 | ' |
| 280 | |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 281 | test_expect_success '--recurse-submodules does not support --error-unmatch' ' |
| 282 | test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual && |
| 283 | test_i18ngrep "does not support --error-unmatch" actual |
| 284 | ' |
| 285 | |
| 286 | test_incompatible_with_recurse_submodules () { |
| 287 | test_expect_success "--recurse-submodules and $1 are incompatible" " |
| 288 | test_must_fail git ls-files --recurse-submodules $1 2>actual && |
| 289 | test_i18ngrep 'unsupported mode' actual |
| 290 | " |
| 291 | } |
| 292 | |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 293 | test_incompatible_with_recurse_submodules --deleted |
| 294 | test_incompatible_with_recurse_submodules --modified |
| 295 | test_incompatible_with_recurse_submodules --others |
| 296 | test_incompatible_with_recurse_submodules --stage |
| 297 | test_incompatible_with_recurse_submodules --killed |
| 298 | test_incompatible_with_recurse_submodules --unmerged |
Brandon Williams | e77aa33 | 2016-10-07 11:18:49 -0700 | [diff] [blame] | 299 | |
| 300 | test_done |