| #!/bin/sh |
| |
| test_description='Clone repositories with path case variations' |
| |
| . ./lib-git-p4.sh |
| |
| test_expect_success 'start p4d with case folding enabled' ' |
| start_p4d -C1 |
| ' |
| |
| test_expect_success 'Create a repo with path case variations' ' |
| client_view "//depot/... //client/..." && |
| ( |
| cd "$cli" && |
| |
| mkdir -p Path/to && |
| >Path/to/File2.txt && |
| p4 add Path/to/File2.txt && |
| p4 submit -d "Add file2" && |
| rm -rf Path && |
| |
| mkdir -p path/TO && |
| >path/TO/file1.txt && |
| p4 add path/TO/file1.txt && |
| p4 submit -d "Add file1" && |
| rm -rf path && |
| |
| mkdir -p path/to && |
| >path/to/file3.txt && |
| p4 add path/to/file3.txt && |
| p4 submit -d "Add file3" && |
| rm -rf path && |
| |
| mkdir -p x-outside-spec && |
| >x-outside-spec/file4.txt && |
| p4 add x-outside-spec/file4.txt && |
| p4 submit -d "Add file4" && |
| rm -rf x-outside-spec |
| ) |
| ' |
| |
| test_expect_success 'Clone root' ' |
| client_view "//depot/... //client/..." && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase false && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| # This method is used instead of "test -f" to ensure the case is |
| # checked even if the test is executed on case-insensitive file systems. |
| # All files are there as expected although the path cases look random. |
| cat >expect <<-\EOF && |
| Path/to/File2.txt |
| path/TO/file1.txt |
| path/to/file3.txt |
| x-outside-spec/file4.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_expect_success 'Clone root (ignorecase)' ' |
| client_view "//depot/... //client/..." && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase true && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| # This method is used instead of "test -f" to ensure the case is |
| # checked even if the test is executed on case-insensitive file systems. |
| # All files are there as expected although the path cases look random. |
| cat >expect <<-\EOF && |
| path/TO/File2.txt |
| path/TO/file1.txt |
| path/TO/file3.txt |
| x-outside-spec/file4.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_expect_success 'Clone root and ignore one file' ' |
| client_view \ |
| "//depot/... //client/..." \ |
| "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase false && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| # We ignore one file in the client spec and all path cases change from |
| # "TO" to "to"! |
| cat >expect <<-\EOF && |
| Path/to/File2.txt |
| path/to/file3.txt |
| x-outside-spec/file4.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_expect_success 'Clone root and ignore one file (ignorecase)' ' |
| client_view \ |
| "//depot/... //client/..." \ |
| "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase true && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| # We ignore one file in the client spec and all path cases change from |
| # "TO" to "to"! |
| cat >expect <<-\EOF && |
| Path/to/File2.txt |
| Path/to/file3.txt |
| x-outside-spec/file4.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_expect_success 'Clone path' ' |
| client_view "//depot/Path/... //client/..." && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase false && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| cat >expect <<-\EOF && |
| to/File2.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_expect_success 'Clone path (ignorecase)' ' |
| client_view "//depot/Path/... //client/..." && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase true && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| cat >expect <<-\EOF && |
| TO/File2.txt |
| TO/file1.txt |
| TO/file3.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| # It looks like P4 determines the path case based on the first file in |
| # lexicographical order. Please note the lower case "to" directory for all |
| # files triggered through the addition of "File0.txt". |
| test_expect_success 'Add a new file and clone path with new file (ignorecase)' ' |
| client_view "//depot/... //client/..." && |
| ( |
| cd "$cli" && |
| mkdir -p Path/to && |
| >Path/to/File0.txt && |
| p4 add Path/to/File0.txt && |
| p4 submit -d "Add file" && |
| rm -rf Path |
| ) && |
| |
| client_view "//depot/Path/... //client/..." && |
| test_when_finished cleanup_git && |
| ( |
| cd "$git" && |
| git init . && |
| git config core.ignorecase true && |
| git p4 clone --use-client-spec --destination="$git" //depot && |
| cat >expect <<-\EOF && |
| to/File0.txt |
| to/File2.txt |
| to/file1.txt |
| to/file3.txt |
| EOF |
| git ls-files >actual && |
| test_cmp expect actual |
| ) |
| ' |
| |
| test_done |