Git fork
at reftables-rust 196 lines 4.9 kB view raw
1#!/bin/sh 2 3test_description='Clone repositories with path case variations' 4 5. ./lib-git-p4.sh 6 7test_expect_success 'start p4d with case folding enabled' ' 8 start_p4d -C1 9' 10 11test_expect_success 'Create a repo with path case variations' ' 12 client_view "//depot/... //client/..." && 13 ( 14 cd "$cli" && 15 16 mkdir -p Path/to && 17 >Path/to/File2.txt && 18 p4 add Path/to/File2.txt && 19 p4 submit -d "Add file2" && 20 rm -rf Path && 21 22 mkdir -p path/TO && 23 >path/TO/file1.txt && 24 p4 add path/TO/file1.txt && 25 p4 submit -d "Add file1" && 26 rm -rf path && 27 28 mkdir -p path/to && 29 >path/to/file3.txt && 30 p4 add path/to/file3.txt && 31 p4 submit -d "Add file3" && 32 rm -rf path && 33 34 mkdir -p x-outside-spec && 35 >x-outside-spec/file4.txt && 36 p4 add x-outside-spec/file4.txt && 37 p4 submit -d "Add file4" && 38 rm -rf x-outside-spec 39 ) 40' 41 42test_expect_success 'Clone root' ' 43 client_view "//depot/... //client/..." && 44 test_when_finished cleanup_git && 45 ( 46 cd "$git" && 47 git init . && 48 git config core.ignorecase false && 49 git p4 clone --use-client-spec --destination="$git" //depot && 50 # This method is used instead of "test -f" to ensure the case is 51 # checked even if the test is executed on case-insensitive file systems. 52 # All files are there as expected although the path cases look random. 53 cat >expect <<-\EOF && 54 Path/to/File2.txt 55 path/TO/file1.txt 56 path/to/file3.txt 57 x-outside-spec/file4.txt 58 EOF 59 git ls-files >actual && 60 test_cmp expect actual 61 ) 62' 63 64test_expect_success 'Clone root (ignorecase)' ' 65 client_view "//depot/... //client/..." && 66 test_when_finished cleanup_git && 67 ( 68 cd "$git" && 69 git init . && 70 git config core.ignorecase true && 71 git p4 clone --use-client-spec --destination="$git" //depot && 72 # This method is used instead of "test -f" to ensure the case is 73 # checked even if the test is executed on case-insensitive file systems. 74 # All files are there as expected although the path cases look random. 75 cat >expect <<-\EOF && 76 path/TO/File2.txt 77 path/TO/file1.txt 78 path/TO/file3.txt 79 x-outside-spec/file4.txt 80 EOF 81 git ls-files >actual && 82 test_cmp expect actual 83 ) 84' 85 86test_expect_success 'Clone root and ignore one file' ' 87 client_view \ 88 "//depot/... //client/..." \ 89 "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" && 90 test_when_finished cleanup_git && 91 ( 92 cd "$git" && 93 git init . && 94 git config core.ignorecase false && 95 git p4 clone --use-client-spec --destination="$git" //depot && 96 # We ignore one file in the client spec and all path cases change from 97 # "TO" to "to"! 98 cat >expect <<-\EOF && 99 Path/to/File2.txt 100 path/to/file3.txt 101 x-outside-spec/file4.txt 102 EOF 103 git ls-files >actual && 104 test_cmp expect actual 105 ) 106' 107 108test_expect_success 'Clone root and ignore one file (ignorecase)' ' 109 client_view \ 110 "//depot/... //client/..." \ 111 "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" && 112 test_when_finished cleanup_git && 113 ( 114 cd "$git" && 115 git init . && 116 git config core.ignorecase true && 117 git p4 clone --use-client-spec --destination="$git" //depot && 118 # We ignore one file in the client spec and all path cases change from 119 # "TO" to "to"! 120 cat >expect <<-\EOF && 121 Path/to/File2.txt 122 Path/to/file3.txt 123 x-outside-spec/file4.txt 124 EOF 125 git ls-files >actual && 126 test_cmp expect actual 127 ) 128' 129 130test_expect_success 'Clone path' ' 131 client_view "//depot/Path/... //client/..." && 132 test_when_finished cleanup_git && 133 ( 134 cd "$git" && 135 git init . && 136 git config core.ignorecase false && 137 git p4 clone --use-client-spec --destination="$git" //depot && 138 cat >expect <<-\EOF && 139 to/File2.txt 140 EOF 141 git ls-files >actual && 142 test_cmp expect actual 143 ) 144' 145 146test_expect_success 'Clone path (ignorecase)' ' 147 client_view "//depot/Path/... //client/..." && 148 test_when_finished cleanup_git && 149 ( 150 cd "$git" && 151 git init . && 152 git config core.ignorecase true && 153 git p4 clone --use-client-spec --destination="$git" //depot && 154 cat >expect <<-\EOF && 155 TO/File2.txt 156 TO/file1.txt 157 TO/file3.txt 158 EOF 159 git ls-files >actual && 160 test_cmp expect actual 161 ) 162' 163 164# It looks like P4 determines the path case based on the first file in 165# lexicographical order. Please note the lower case "to" directory for all 166# files triggered through the addition of "File0.txt". 167test_expect_success 'Add a new file and clone path with new file (ignorecase)' ' 168 client_view "//depot/... //client/..." && 169 ( 170 cd "$cli" && 171 mkdir -p Path/to && 172 >Path/to/File0.txt && 173 p4 add Path/to/File0.txt && 174 p4 submit -d "Add file" && 175 rm -rf Path 176 ) && 177 178 client_view "//depot/Path/... //client/..." && 179 test_when_finished cleanup_git && 180 ( 181 cd "$git" && 182 git init . && 183 git config core.ignorecase true && 184 git p4 clone --use-client-spec --destination="$git" //depot && 185 cat >expect <<-\EOF && 186 to/File0.txt 187 to/File2.txt 188 to/file1.txt 189 to/file3.txt 190 EOF 191 git ls-files >actual && 192 test_cmp expect actual 193 ) 194' 195 196test_done