git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv2 08/12] git p4: revert deleted files after submit cancel

From
PWPete Wyckoff <pw@padd.com>
Date
Sep 9, 2012, 20:16 UTC
Message-ID
<1347221773-12773-9-git-send-email-pw@padd.com>
In-Reply-To
<1347221773-12773-1-git-send-email-pw@padd.com>

The user can decide not to continue with a submission, by not saving the p4 submit template, then answering "no" to the "Submit anyway?" prompt. In this case, be sure to return the p4 client to its initial state.

Deleted files were not reverted; fix this and test all cases.
Signed-off-by: Pete Wyckoff <pw@padd.com>
---
 git-p4.py                     |   2 +
 t/t9815-git-p4-submit-fail.sh | 119 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 121 insertions(+)
diff --git a/git-p4.py b/git-p4.py
index ea14c1f..60012bc 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1304,6 +1304,8 @@ class P4Submit(Command, P4UserMap):
             for f in filesToAdd:
                 p4_revert(f)
                 os.remove(f)
+            for f in filesToDelete:
+                p4_revert(f)
 
         os.remove(fileName)
         return ret
diff --git a/t/t9815-git-p4-submit-fail.sh b/t/t9815-git-p4-submit-fail.sh
index e73d6ab..1823cff 100755
--- a/t/t9815-git-p4-submit-fail.sh
+++ b/t/t9815-git-p4-submit-fail.sh
@@ -240,6 +240,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
 '
-- 
1.7.12.rc2.111.g96f7c73
Previous: Pete WyckoffNext: Pete Wyckoff
Message 18 of 22 in “[PATCHv2 00/12] git p4: submit conflict handling”
  1. Pete WyckoffSep 9, 2012
  2. 01/12 git p4 test: remove bash-ism of combined export/assignmentPete Wyckoff, Sep 9, 2012
  3. Luke DiamandSep 15, 2012
  4. Junio C HamanoSep 16, 2012
  5. Luke DiamandSep 16, 2012
  6. Junio C HamanoSep 17, 2012
  7. Luke DiamandSep 17, 2012
  8. 02/12 git p4: gracefully fail if some commits could not be appliedPete Wyckoff, Sep 9, 2012
  9. Luke DiamandSep 15, 2012
  10. 03/12 git p4: remove submit failure options [a]pply and [w]ritePete Wyckoff, Sep 9, 2012
  11. Luke DiamandSep 15, 2012
  12. 04/12 git p4: move conflict prompt into run, add [q]uit inputPete Wyckoff, Sep 9, 2012
  13. Luke DiamandSep 15, 2012
  14. 05/12 git p4: standardize submit cancel due to unchanged templatePete Wyckoff, Sep 9, 2012
  15. Luke DiamandSep 15, 2012
  16. 06/12 git p4: test clean-up after failed submit, fix added filesPete Wyckoff, Sep 9, 2012
  17. 07/12 git p4: rearrange submit template constructionPete Wyckoff, Sep 9, 2012
  18. 08/12 git p4: revert deleted files after submit cancelPete Wyckoff, Sep 9, 2012
  19. 09/12 git p4: accept -v for --verbosePete Wyckoff, Sep 9, 2012
  20. 10/12 git p4: add submit --dry-run optionPete Wyckoff, Sep 9, 2012
  21. 11/12 git p4: add submit --prepare-p4-only optionPete Wyckoff, Sep 9, 2012
  22. 12/12 git-p4: add submit --conflict option and config varaiablePete Wyckoff, Sep 9, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.