Re: [PATCHv4 1/1] git-p4: add unshelve command
From: SZEDER Gábor <hidden>
Date: 2018-05-21 21:39:37
quoted hunk ↗ jump to hunk
diff --git a/t/t9832-unshelve.sh b/t/t9832-unshelve.sh new file mode 100755 index 0000000000..cca2dec536 --- /dev/null +++ b/t/t9832-unshelve.sh@@ -0,0 +1,153 @@ +#!/bin/sh + +last_shelved_change() { + p4 changes -s shelved -m1 | cut -d " " -f 2 +} + +test_description='git p4 unshelve' + +. ./lib-git-p4.sh + +test_expect_success 'start p4d' ' + start_p4d +' + +test_expect_success 'init depot' ' + ( + cd "$cli" && + echo file1 >file1 && + p4 add file1 && + p4 submit -d "change 1" + : >file_to_delete && + p4 add file_to_delete && + p4 submit -d "file to delete" + ) +' + +test_expect_success 'initial clone' ' + git p4 clone --dest="$git" //depot/@all +' + +test_expect_success 'create shelved changelist' ' + ( + cd "$cli" && + p4 edit file1 && + echo "a change" >>file1 && + echo "new file" >file2 && + p4 add file2 && + p4 delete file_to_delete && + p4 opened && + p4 shelve -i <<EOF +Change: new +Description: + Test commit + + Further description +Files: + //depot/file1 + //depot/file2 + //depot/file_to_delete +EOF + + ) && + ( + cd "$git" && + change=$(last_shelved_change) && + git p4 unshelve $change && + git show refs/remotes/p4/unshelved/$change | grep -q "Further description" && + git cherry-pick refs/remotes/p4/unshelved/$change && + test_path_is_file file2 && + test_cmp file1 "$cli"/file1 && + test_cmp file2 "$cli"/file2 && + test_path_is_missing file_to_delete + ) +'
This test fails on my box and on Travis CI (in all four standard Linux
and OSX build jobs) with:
+ cd /home/szeder/src/git/t/trash directory.t9832-unshelve/cli
+ p4 edit file1
//depot/file1#1 - opened for edit
+ echo a change
+ echo new file
+ p4 add file2
//depot/file2#1 - opened for add
+ p4 delete file_to_delete
//depot/file_to_delete#1 - opened for delete
+ p4 opened
//depot/file1#1 - edit default change (text)
//depot/file2#1 - add default change (text)
//depot/file_to_delete#1 - delete default change (text)
+ p4 shelve -i
Change 3 created with 3 open file(s).
Shelving files for change 3.
edit //depot/file1#1
add //depot/file2#1
delete //depot/file_to_delete#1
Change 3 files shelved.
+ cd /home/szeder/src/git/t/trash directory.t9832-unshelve/git
+ last_shelved_change
+ p4 changes -s shelved -m1
+ cut -d -f 2
+ change=3
+ git p4 unshelve 3
Traceback (most recent call last):
File "/home/szeder/src/git/git-p4", line 3975, in <module>
main()
File "/home/szeder/src/git/git-p4", line 3969, in main
if not cmd.run(args):
File "/home/szeder/src/git/git-p4", line 3851, in run
sync.importChanges(changes, shelved=True,
origin_revision=origin_revision)
File "/home/szeder/src/git/git-p4", line 3296, in importChanges
files = self.extractFilesFromCommit(description, shelved, change,
origin_revision)
File "/home/szeder/src/git/git-p4", line 2496, in
extractFilesFromCommit
not self.cmp_shelved(path, file["rev"], origin_revision):
File "/home/szeder/src/git/git-p4", line 2467, in cmp_shelved
return ret["status"] == "identical"
KeyError: 'status'
error: last command exited with $?=1
not ok 4 - create shelved changelist
The next test fails with the same backtrace, too, so I won't include
it.
+ +test_expect_success 'update shelved changelist and re-unshelve' ' + test_when_finished cleanup_git && + ( + cd "$cli" && + change=$(last_shelved_change) && + echo "file3" >file3 && + p4 add -c $change file3 && + p4 shelve -i -r <<EOF && +Change: $change +Description: + Test commit + + Further description +Files: + //depot/file1 + //depot/file2 + //depot/file3 + //depot/file_to_delete +EOF + p4 describe $change + ) && + ( + cd "$git" && + change=$(last_shelved_change) && + git p4 unshelve $change && + git diff refs/remotes/p4/unshelved/$change.0 refs/remotes/p4/unshelved/$change | grep -q file3 + ) +'