diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackWorker.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackWorker.java index 629f62c48c38..e6c36c0f337c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackWorker.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackWorker.java @@ -30,6 +30,7 @@ import com.intellij.openapi.vcs.rollback.RollbackEnvironment; import com.intellij.openapi.vcs.update.RefreshVFsSynchronously; import com.intellij.util.WaitForProgressToShow; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.ArrayList; @@ -40,16 +41,16 @@ public class RollbackWorker { private final Project myProject; private final List myExceptions; - private ProgressIndicator myIndicator; - - public RollbackWorker(final Project project, final boolean synchronous) { + public RollbackWorker(final Project project, final boolean synchronous/*todo[irengrig] and what?*/) { myProject = project; myExceptions = new ArrayList(0); } - public void doRollback(final Collection changes, final boolean deleteLocallyAddedFiles, final Runnable afterVcsRefreshInAwt, - final String localHistoryActionName) { - final ChangeListManager changeListManager = ChangeListManagerImpl.getInstance(myProject); + public void doRollback(final Collection changes, + final boolean deleteLocallyAddedFiles, + @Nullable final Runnable afterVcsRefreshInAwt, + @Nullable final String localHistoryActionName) { + final ChangeListManager changeListManager = ChangeListManager.getInstance(myProject); final Runnable notifier = changeListManager.prepareForChangeDeletion(changes); final Runnable afterRefresh = new Runnable() { public void run() { @@ -93,6 +94,7 @@ public class RollbackWorker { private final boolean myDeleteLocallyAddedFiles; private final Runnable myAfterRefresh; private final String myLocalHistoryActionName; + private ProgressIndicator myIndicator; private MyRollbackRunnable(final Collection changes, final boolean deleteLocallyAddedFiles, @@ -170,17 +172,20 @@ public class RollbackWorker { actionName : myLocalHistoryActionName, -1); final VcsDirtyScopeManager manager = PeriodicalTasksCloser.getInstance().safeGetComponent(project, VcsDirtyScopeManager.class); for (Change change : changesToRefresh) { - if ((! change.isIsReplaced()) && Comparing.equal(change.getBeforeRevision(), change.getAfterRevision())) { - manager.fileDirty(change.getBeforeRevision().getFile()); - } else { - if (change.getBeforeRevision() != null) { - final FilePath parent = change.getBeforeRevision().getFile().getParentPath(); + final ContentRevision beforeRevision = change.getBeforeRevision(); + final ContentRevision afterRevision = change.getAfterRevision(); + if ((!change.isIsReplaced()) && beforeRevision != null && Comparing.equal(beforeRevision, afterRevision)) { + manager.fileDirty(beforeRevision.getFile()); + } + else { + if (beforeRevision != null) { + final FilePath parent = beforeRevision.getFile().getParentPath(); if (parent != null) { manager.dirDirtyRecursively(parent); } } - if (change.getAfterRevision() != null) { - final FilePath parent = change.getAfterRevision().getFile().getParentPath(); + if (afterRevision != null) { + final FilePath parent = afterRevision.getFile().getParentPath(); if (parent != null) { manager.dirDirtyRecursively(parent); } @@ -221,5 +226,4 @@ public class RollbackWorker { } } } - } diff --git a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java index 35a800716dd0..47f50a28ecb9 100644 --- a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java +++ b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java @@ -60,32 +60,25 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { } } - private void sleep1000() { + private static void sleep300() { try { Thread.sleep(300); } - catch (InterruptedException e) { - // - } + catch (InterruptedException ignore) { } } @Test public void testModificationAndAfterRevert() throws Throwable { final SubTree subTree = new SubTree(myWorkingCopyDir); checkin(); - try { - Thread.sleep(300); - } - catch (InterruptedException e) { - // - } + sleep300(); editFileInCommand(myProject, subTree.myS1File, "new"); final CharSequence text1 = LoadTextUtil.loadText(subTree.myS1File); Assert.assertEquals("new", text1.toString()); - sleep1000(); + sleep300(); LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(subTree.myS1File.getPath())); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); @@ -120,7 +113,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { assertVF(subTree.mySourceDir, newName); - sleep1000(); + sleep300(); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.myS1File}, clManager.getDefaultListName(), clManager); @@ -145,7 +138,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { assertVF(subTree.myTargetDir, "s1.txt"); - sleep1000(); + sleep300(); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.myS1File}, clManager.getDefaultListName(), clManager); @@ -173,7 +166,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { assertVF(subTree.mySourceDir, "s1.txt"); assertVF(subTree.mySourceDir, "s2.txt"); - sleep1000(); + sleep300(); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.mySourceDir, subTree.myS1File, subTree.myS2File}, @@ -206,7 +199,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { final CharSequence text1 = LoadTextUtil.loadText(subTree.myS1File); Assert.assertEquals("new", text1.toString()); - sleep1000(); + sleep300(); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(new VirtualFile[] {subTree.mySourceDir, subTree.myS1File, subTree.myS2File}, @@ -269,7 +262,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { checkin(); deleteFileInCommand(subTree.myRootDir); - sleep1000(); + sleep300(); VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false);