threads / discuss / 50258

[PATCHv3 0/2] git-p4: shelved change update with move/copy

Subject: [PATCHv3 0/2] git-p4: shelved change update with move/copy

## tl;dr

5 messages between Jan 18, 2019 and Jan 22, 2019.

replies: 4people: 3as markdown or json

Luke Diamand· Jan 18, 2019, 09:36 UTC · lore
This updates the patchset to support copy, as suggested by Andrey.
Luke Diamand (2):
  git-p4: add failing test for shelved CL update involving move/copy
  git-p4: handle update of moved/copied files when updating a shelve
 git-p4.py                |  2 ++
 t/t9807-git-p4-submit.sh | 57 +++++++++++++++++++++++++++++++++++++---
 2 files changed, 56 insertions(+), 3 deletions(-)
-- 
2.20.1.100.g9ee79a14a8
Luke Diamand· Jan 18, 2019, 09:36 UTC · re: Luke Diamand · lore

[PATCHv3 1/2] git-p4: add failing test for shelved CL update involving move/copy

Updating a shelved P4 changelist where one or more files have been moved or copied does not work. Add a test for this.

The problem is that P4 requires a complete list of the files being changed, and move/copy only includes the _source_ in the case of updating a shelved changelist. This results in errors from Perforce such as:

  //depot/src - needs tofile //depot/dst
  Submit aborted -- fix problems then use 'p4 submit -c 1234'
Signed-off-by: Luke Diamand <luke@diamand.org>
Acked-by: Andrey Mazo <amazo@checkvideo.com>
---
 t/t9807-git-p4-submit.sh | 57 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 3 deletions(-)
diff --git a/t/t9807-git-p4-submit.sh b/t/t9807-git-p4-submit.sh
index 2325599ee6..2ad3d801cc 100755
--- a/t/t9807-git-p4-submit.sh
+++ b/t/t9807-git-p4-submit.sh
@@ -500,6 +500,10 @@ test_expect_success 'submit --shelve' '
 	)
 '
 
+last_shelve() {
+	p4 -G changes -s shelved -m 1 //depot/... | marshal_dump change
+}
+
 make_shelved_cl() {
 	test_commit "$1" >/dev/null &&
 	git p4 submit --origin HEAD^ --shelve >/dev/null &&
@@ -533,12 +537,59 @@ test_expect_success 'submit --update-shelve' '
 	) &&
 	(
 		cd "$cli" &&
-		change=$(p4 -G changes -s shelved -m 1 //depot/... | \
-			 marshal_dump change) &&
+		change=$(last_shelve) &&
 		p4 unshelve -c $change -s $change &&
 		grep -q updated-line shelf.t &&
 		p4 describe -S $change | grep added-file.t &&
-		test_path_is_missing shelved-change-1.t
+		test_path_is_missing shelved-change-1.t &&
+		p4 revert ...
+	)
+'
+
+test_expect_failure 'update a shelve involving moved and copied files' '
+	test_when_finished cleanup_git &&
+	(
+		cd "$cli" &&
+		: >file_to_move &&
+		p4 add file_to_move &&
+		p4 submit -d "change1" &&
+		p4 edit file_to_move &&
+		echo change >>file_to_move &&
+		p4 submit -d "change2" &&
+		p4 opened
+	) &&
+	git p4 clone --dest="$git" //depot &&
+	(
+		cd "$git" &&
+		git config git-p4.detectCopies true &&
+		git config git-p4.detectRenames true &&
+		git config git-p4.skipSubmitEdit true &&
+		mkdir moved &&
+		cp file_to_move copy_of_file &&
+		git add copy_of_file &&
+		git mv file_to_move moved/ &&
+		git commit -m "rename a file" &&
+		git p4 submit -M --shelve --origin HEAD^ &&
+		: >new_file &&
+		git add new_file &&
+		git commit --amend &&
+		git show --stat HEAD &&
+		change=$(last_shelve) &&
+		git p4 submit -M --update-shelve $change --commit HEAD
+	) &&
+	(
+		cd "$cli" &&
+		change=$(last_shelve) &&
+		echo change=$change &&
+		p4 unshelve -s $change &&
+		p4 submit -d "Testing update-shelve" &&
+		test_path_is_file copy_of_file &&
+		test_path_is_file moved/file_to_move &&
+		test_path_is_missing file_to_move &&
+		test_path_is_file new_file &&
+		echo "unshelved and submitted change $change" &&
+		p4 changes moved/file_to_move | grep "Testing update-shelve" &&
+		p4 changes copy_of_file | grep "Testing update-shelve"
 	)
 '
 
-- 
2.20.1.100.g9ee79a14a8
Luke Diamand· Jan 18, 2019, 09:36 UTC · re: Luke Diamand · lore

[PATCHv3 2/2] git-p4: handle update of moved/copied files when updating a shelve

Perforce requires a complete list of files being operated on. If git is updating an existing shelved changelist, then any files which are moved or copied were not being added to this list.

Signed-off-by: Luke Diamand <luke@diamand.org>
Acked-by: Andrey Mazo <amazo@checkvideo.com>
---
 git-p4.py                | 2 ++
 t/t9807-git-p4-submit.sh | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/git-p4.py b/git-p4.py
index 1998c3e141..b1c262e13d 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1859,6 +1859,7 @@ def applyCommit(self, id):
                     filesToAdd.remove(path)
             elif modifier == "C":
                 src, dest = diff['src'], diff['dst']
+                all_files.append(dest)
                 p4_integrate(src, dest)
                 pureRenameCopy.add(dest)
                 if diff['src_sha1'] != diff['dst_sha1']:
@@ -1875,6 +1876,7 @@ def applyCommit(self, id):
                 editedFiles.add(dest)
             elif modifier == "R":
                 src, dest = diff['src'], diff['dst']
+                all_files.append(dest)
                 if self.p4HasMoveCommand:
                     p4_edit(src)        # src must be open before move
                     p4_move(src, dest)  # opens for (move/delete, move/add)
diff --git a/t/t9807-git-p4-submit.sh b/t/t9807-git-p4-submit.sh
index 2ad3d801cc..099e5e079d 100755
--- a/t/t9807-git-p4-submit.sh
+++ b/t/t9807-git-p4-submit.sh
@@ -546,7 +546,7 @@ test_expect_success 'submit --update-shelve' '
 	)
 '
 
-test_expect_failure 'update a shelve involving moved and copied files' '
+test_expect_success 'update a shelve involving moved and copied files' '
 	test_when_finished cleanup_git &&
 	(
 		cd "$cli" &&
-- 
2.20.1.100.g9ee79a14a8
Junio C Hamano· Jan 18, 2019, 17:46 UTC · re: Luke Diamand · lore

Re: [PATCHv3 0/2] git-p4: shelved change update with move/copy

Luke Diamand <luke@diamand.org> writes:
Show 9 quoted lines
> This updates the patchset to support copy, as suggested by Andrey.
>
> Luke Diamand (2):
>   git-p4: add failing test for shelved CL update involving move/copy
>   git-p4: handle update of moved/copied files when updating a shelve
>
>  git-p4.py                |  2 ++
>  t/t9807-git-p4-submit.sh | 57 +++++++++++++++++++++++++++++++++++++---
>  2 files changed, 56 insertions(+), 3 deletions(-)
Thanks.

This has been listed among those that have been planned to be merged down to 'next', which I wanted to do today. I'll replace it with this round and merge it in a few days.

Mazo, Andrey· Jan 22, 2019, 18:16 UTC · re: Luke Diamand · lore

Re: [PATCHv3 0/2] git-p4: shelved change update with move/copy

Show 9 quoted lines
> This updates the patchset to support copy, as suggested by Andrey.
> 
> Luke Diamand (2):
>   git-p4: add failing test for shelved CL update involving move/copy
>   git-p4: handle update of moved/copied files when updating a shelve
> 
>  git-p4.py                |  2 ++
>  t/t9807-git-p4-submit.sh | 57 +++++++++++++++++++++++++++++++++++++---
>  2 files changed, 56 insertions(+), 3 deletions(-)
Thank you for addressing my comments!
The updated patchset looks good to me:
Acked-by: Andrey Mazo <amazo@checkvideo.com>

Thank you, Andrey

← back to recent threads