> 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 > + ) > +'