commit, cherry-pick -s: remove broken support for multiline rfc2822 fields
[gitweb.git] / t / t9815-git-p4-submit-fail.sh
index e73d6ab6b2b7abd77d9cc17d61e0d1a024d637ab..d2b7b3d98d77a18657f536af54b159230a1ea057 100755 (executable)
@@ -108,6 +108,69 @@ test_expect_success 'conflict on first of two commits, quit' '
        )
 '
 
+test_expect_success 'conflict cli and config options' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               git p4 submit --conflict=ask &&
+               git p4 submit --conflict=skip &&
+               git p4 submit --conflict=quit &&
+               test_expect_code 2 git p4 submit --conflict=foo &&
+               test_expect_code 2 git p4 submit --conflict &&
+               git config git-p4.conflict foo &&
+               test_expect_code 1 git p4 submit &&
+               git config --unset git-p4.conflict &&
+               git p4 submit
+       )
+'
+
+test_expect_success 'conflict on first of two commits, --conflict=skip' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$cli" &&
+               p4 open file1 &&
+               echo line9 >>file1 &&
+               p4 submit -d "line9 in file1"
+       ) &&
+       (
+               cd "$git" &&
+               git config git-p4.skipSubmitEdit true &&
+               # this submit should cause a conflict
+               echo line10 >>file1 &&
+               git add file1 &&
+               git commit -m "line10 in file1 will conflict" &&
+               # but this commit is okay
+               test_commit "okay_commit_after_auto_skip" &&
+               test_expect_code 1 git p4 submit --conflict=skip >out &&
+               test_i18ngrep "Applied only the commits" out
+       )
+'
+
+test_expect_success 'conflict on first of two commits, --conflict=quit' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$cli" &&
+               p4 open file1 &&
+               echo line11 >>file1 &&
+               p4 submit -d "line11 in file1"
+       ) &&
+       (
+               cd "$git" &&
+               git config git-p4.skipSubmitEdit true &&
+               # this submit should cause a conflict
+               echo line12 >>file1 &&
+               git add file1 &&
+               git commit -m "line12 in file1 will conflict" &&
+               # but this commit is okay
+               test_commit "okay_commit_after_auto_quit" &&
+               test_expect_code 1 git p4 submit --conflict=quit >out &&
+               test_i18ngrep "No commits applied" out
+       )
+'
+
 #
 # Cleanup after submit fail, all cases.  Some modifications happen
 # before trying to apply the patch.  Make sure these are unwound
@@ -240,6 +303,125 @@ test_expect_success 'cleanup rename after submit fail' '
        )
 '
 
+#
+# Cleanup after deciding not to submit during editTemplate.  This
+# involves unwinding more work, because files have been added, deleted
+# and chmod-ed now.  Same approach as above.
+#
+
+test_expect_success 'cleanup edit after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               echo line >>text &&
+               git add text &&
+               git commit -m text &&
+               echo n | test_expect_code 1 git p4 submit &&
+               git reset --hard HEAD^
+       ) &&
+       (
+               cd "$cli" &&
+               ! p4 fstat -T action text &&
+               test_cmp "$git"/text text
+       )
+'
+
+test_expect_success 'cleanup add after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               echo line >textnew &&
+               git add textnew &&
+               git commit -m textnew &&
+               echo n | test_expect_code 1 git p4 submit
+       ) &&
+       (
+               cd "$cli" &&
+               test_path_is_missing textnew &&
+               p4 fstat -T action textnew 2>&1 | grep "no such file"
+       )
+'
+
+test_expect_success 'cleanup delete after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               git rm text &&
+               git commit -m "rm text" &&
+               echo n | test_expect_code 1 git p4 submit
+       ) &&
+       (
+               cd "$cli" &&
+               test_path_is_file text &&
+               ! p4 fstat -T action text
+       )
+'
+
+test_expect_success 'cleanup copy after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               cp text text2 &&
+               git add text2 &&
+               git commit -m text2 &&
+               git config git-p4.detectCopies true &&
+               git config git-p4.detectCopiesHarder true &&
+               git diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&
+               echo n | test_expect_code 1 git p4 submit
+       ) &&
+       (
+               cd "$cli" &&
+               test_path_is_missing text2 &&
+               p4 fstat -T action text2 2>&1 | grep "no such file"
+       )
+'
+
+test_expect_success 'cleanup rename after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               git mv text text2 &&
+               git commit -m text2 &&
+               git config git-p4.detectRenames true &&
+               git diff-tree -r -M HEAD | grep text2 | grep R100 &&
+               echo n | test_expect_code 1 git p4 submit
+       ) &&
+       (
+               cd "$cli" &&
+               test_path_is_missing text2 &&
+               p4 fstat -T action text2 2>&1 | grep "no such file"
+               test_path_is_file text &&
+               ! p4 fstat -T action text
+       )
+'
+
+test_expect_success 'cleanup chmod after submit cancel' '
+       test_when_finished cleanup_git &&
+       git p4 clone --dest="$git" //depot &&
+       (
+               cd "$git" &&
+               chmod u+x text &&
+               chmod u-x text+x &&
+               git add text text+x &&
+               git commit -m "chmod texts" &&
+               echo n | test_expect_code 1 git p4 submit
+       ) &&
+       (
+               cd "$cli" &&
+               test_path_is_file text &&
+               ! p4 fstat -T action text &&
+               stat --format=%A text | egrep ^-r-- &&
+               test_path_is_file text+x &&
+               ! p4 fstat -T action text+x &&
+               stat --format=%A text+x | egrep ^-r-x
+       )
+'
+
 test_expect_success 'kill p4d' '
        kill_p4d
 '