Imported Upstream version 2.9.2
[platform/upstream/git.git] / t / t9801-git-p4-branch.sh
index 9730821..0aafd03 100755 (executable)
@@ -469,9 +469,11 @@ test_expect_success 'use-client-spec detect-branches skips branches setup' '
                View: //depot/usecs/b1/... //depot/usecs/b3/...
                EOF
 
-               echo b3/b3-file3 >b3/b3-file3 &&
-               p4 add b3/b3-file3 &&
-               p4 submit -d "b3/b3-file3"
+               echo b3/b3-file3_1 >b3/b3-file3_1 &&
+               echo b3/b3-file3_2 >b3/b3-file3_2 &&
+               p4 add b3/b3-file3_1 &&
+               p4 add b3/b3-file3_2 &&
+               p4 submit -d "b3/b3-file3_1 b3/b3-file3_2"
        )
 '
 
@@ -487,6 +489,127 @@ test_expect_success 'use-client-spec detect-branches skips branches' '
        )
 '
 
+test_expect_success 'use-client-spec detect-branches skips files in branches' '
+       client_view "//depot/usecs/... //client/..." \
+                   "-//depot/usecs/b3/b3-file3_1 //client/b3/b3-file3_1" &&
+       test_when_finished cleanup_git &&
+       test_create_repo "$git" &&
+       (
+               cd "$git" &&
+               git p4 sync --detect-branches --use-client-spec //depot/usecs@all &&
+               git checkout -b master p4/usecs/b3 &&
+               test_path_is_file b1-file1 &&
+               test_path_is_file b3-file3_2 &&
+               test_path_is_missing b3-file3_1
+       )
+'
+
+test_expect_success 'restart p4d' '
+       kill_p4d &&
+       start_p4d
+'
+
+#
+# 1: //depot/branch1/base/file1
+#    //depot/branch1/base/file2
+#    //depot/branch1/base/dir/sub_file1
+# 2: integrate //depot/branch1/base/... -> //depot/branch2/base/...
+# 3: //depot/branch1/base/file3
+# 4: //depot/branch1/base/file2 (edit)
+# 5: integrate //depot/branch1/base/... -> //depot/branch3/base/...
+#
+# Note: the client view removes the "base" folder from the workspace
+#       and moves sub_file1 one level up.
+test_expect_success 'add simple p4 branches with common base folder on each branch' '
+       (
+               cd "$cli" &&
+               client_view "//depot/branch1/base/... //client/branch1/..." \
+                           "//depot/branch1/base/dir/sub_file1 //client/branch1/sub_file1" \
+                           "//depot/branch2/base/... //client/branch2/..." \
+                           "//depot/branch3/base/... //client/branch3/..." &&
+               mkdir -p branch1 &&
+               cd branch1 &&
+               echo file1 >file1 &&
+               echo file2 >file2 &&
+               mkdir dir &&
+               echo sub_file1 >sub_file1 &&
+               p4 add file1 file2 sub_file1 &&
+               p4 submit -d "Create branch1" &&
+               p4 integrate //depot/branch1/base/... //depot/branch2/base/... &&
+               p4 submit -d "Integrate branch2 from branch1" &&
+               echo file3 >file3 &&
+               p4 add file3 &&
+               p4 submit -d "add file3 in branch1" &&
+               p4 open file2 &&
+               echo update >>file2 &&
+               p4 submit -d "update file2 in branch1" &&
+               p4 integrate //depot/branch1/base/... //depot/branch3/base/... &&
+               p4 submit -d "Integrate branch3 from branch1"
+       )
+'
+
+# Configure branches through git-config and clone them.
+# All files are tested to make sure branches were cloned correctly.
+# Finally, make an update to branch1 on P4 side to check if it is imported
+# correctly by git p4.
+# git p4 is expected to use the client view to also not include the common
+# "base" folder in the imported directory structure.
+test_expect_success 'git p4 clone simple branches with base folder on server side' '
+       test_create_repo "$git" &&
+       (
+               cd "$git" &&
+               git config git-p4.branchList branch1:branch2 &&
+               git config --add git-p4.branchList branch1:branch3 &&
+               git p4 clone --dest=. --use-client-spec  --detect-branches //depot@all &&
+               git log --all --graph --decorate --stat &&
+               git reset --hard p4/depot/branch1 &&
+               test -f file1 &&
+               test -f file2 &&
+               test -f file3 &&
+               test -f sub_file1 &&
+               grep update file2 &&
+               git reset --hard p4/depot/branch2 &&
+               test -f file1 &&
+               test -f file2 &&
+               test ! -f file3 &&
+               test -f sub_file1 &&
+               ! grep update file2 &&
+               git reset --hard p4/depot/branch3 &&
+               test -f file1 &&
+               test -f file2 &&
+               test -f file3 &&
+               test -f sub_file1 &&
+               grep update file2 &&
+               cd "$cli" &&
+               cd branch1 &&
+               p4 edit file2 &&
+               echo file2_ >>file2 &&
+               p4 submit -d "update file2 in branch1" &&
+               cd "$git" &&
+               git reset --hard p4/depot/branch1 &&
+               git p4 rebase &&
+               grep file2_ file2
+       )
+'
+
+# Now update a file in one of the branches in git and submit to P4
+test_expect_success 'Update a file in git side and submit to P4 using client view' '
+       test_when_finished cleanup_git &&
+       (
+               cd "$git" &&
+               git reset --hard p4/depot/branch1 &&
+               echo "client spec" >> file1 &&
+               git add -u . &&
+               git commit -m "update file1 in branch1" &&
+               git config git-p4.skipSubmitEdit true &&
+               git p4 submit --verbose &&
+               cd "$cli" &&
+               p4 sync ... &&
+               cd branch1 &&
+               grep "client spec" file1
+       )
+'
+
 test_expect_success 'kill p4d' '
        kill_p4d
 '