diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileSystemListener.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileSystemListener.java index 25b51df836cb..b0e0d3251a18 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileSystemListener.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileSystemListener.java @@ -249,9 +249,16 @@ public class SvnFileSystemListener extends CommandAdapter implements LocalFileOp SVNStatus srcStatus = getFileStatus(src); final File toDir = dst.getParentFile(); SVNStatus dstStatus = getFileStatus(toDir); - if ((srcStatus == null || SvnVcs.svnStatusIsUnversioned(srcStatus)) && (dstStatus == null || SvnVcs.svnStatusIsUnversioned(dstStatus))) { + final boolean srcUnversioned = srcStatus == null || SvnVcs.svnStatusIsUnversioned(srcStatus); + if (srcUnversioned && (dstStatus == null || SvnVcs.svnStatusIsUnversioned(dstStatus))) { return false; } + if (srcUnversioned) { + SVNStatus dstWasStatus = getFileStatus(dst); + if (dstWasStatus == null || SvnVcs.svnStatusIsUnversioned(dstWasStatus)) { + return false; + } + } if (for17move(vcs, src, dst, isUndo, srcStatus)) return false; } else { if (for16move(vcs, src, dst, isUndo)) return false; diff --git a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnRenameTest.java b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnRenameTest.java index 00efb0ca1356..dadfebd25bed 100644 --- a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnRenameTest.java +++ b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnRenameTest.java @@ -398,6 +398,34 @@ public class SvnRenameTest extends Svn17TestCase { verifySorted(runSvn("status"), "? unversioned"); } + @Test + public void testUndoMoveUnversionedToUnversioned() throws Exception { + enableSilentOperation(VcsConfiguration.StandardConfirmation.ADD); + + disableSilentOperation(VcsConfiguration.StandardConfirmation.ADD); + final VirtualFile file = createFileInCommand(myWorkingCopyDir, "a.txt", "A"); + verifySorted(runSvn("status"), "? a.txt"); + final VirtualFile unversioned = createDirInCommand(myWorkingCopyDir, "unversioned"); + moveFileInCommand(file, unversioned); + verifySorted(runSvn("status"), "? unversioned"); + undo(); + verifySorted(runSvn("status"), "? a.txt", "? unversioned"); + } + + @Test + public void testUndoMoveAddedToUnversioned() throws Exception { + enableSilentOperation(VcsConfiguration.StandardConfirmation.ADD); + + final VirtualFile file = createFileInCommand(myWorkingCopyDir, "a.txt", "A"); + verifySorted(runSvn("status"), "A a.txt"); + disableSilentOperation(VcsConfiguration.StandardConfirmation.ADD); + final VirtualFile unversioned = createDirInCommand(myWorkingCopyDir, "unversioned"); + moveFileInCommand(file, unversioned); + verifySorted(runSvn("status"), "? unversioned"); + undo(); + verifySorted(runSvn("status"), "? a.txt", "? unversioned"); + } + @Test public void testUndoMoveToUnversionedCommitted() throws Exception { enableSilentOperation(VcsConfiguration.StandardConfirmation.ADD);