a dedicated test case for p4 move/rename
authorpeter <peter@jetbrains.com>
Tue, 10 Jan 2012 15:20:58 +0000 (16:20 +0100)
committerpeter <peter@jetbrains.com>
Tue, 10 Jan 2012 17:00:23 +0000 (18:00 +0100)
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UpdateRequestsQueue.java

index 6fbb19bce66449a11d877845fb1905bd70fadea3..a9f775283f5c01e6ead5fcdf31f52485c4b0c2c1 100644 (file)
@@ -55,6 +55,7 @@ import org.jdom.Element;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.TestOnly;
 
 import java.io.File;
 import java.util.*;
@@ -1292,6 +1293,11 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec
     });
   }
 
+  @TestOnly
+  public void waitUntilRefreshed() {
+    myUpdater.waitUntilRefreshed();
+  }
+
   /**
    * Can be called only from not AWT thread; to do smthg after ChangeListManager refresh, call invokeAfterUpdate
    */
index 9d146c6626f89266c3bb167900b44286a90b3d81..8719e2966b010402c64d9e64911c1551541135dc 100644 (file)
@@ -25,7 +25,9 @@ import com.intellij.openapi.startup.StartupManager;
 import com.intellij.openapi.util.Getter;
 import com.intellij.openapi.vcs.ProjectLevelVcsManager;
 import com.intellij.util.Consumer;
+import com.intellij.util.concurrency.Semaphore;
 import com.intellij.util.io.storage.HeavyProcessLatch;
+import org.jetbrains.annotations.TestOnly;
 
 import javax.swing.*;
 import java.util.ArrayList;
@@ -136,6 +138,28 @@ public class UpdateRequestsQueue {
     LOG.debug("Stop finished for project: " + myProject.getName());
   }
 
+  @TestOnly
+  public void waitUntilRefreshed() {
+    final Semaphore semaphore = new Semaphore();
+    semaphore.down();
+    synchronized (myLock) {
+      final Runnable runnable = new Runnable() {
+        @Override
+        public void run() {
+          semaphore.up();
+        }
+      };
+      if (myRequestSubmitted && !myStopped) {
+        myWaitingUpdateCompletionQueue.add(runnable);
+      } else {
+        runnable.run();
+      }
+    }
+    if (!semaphore.waitFor(10000)) {
+      LOG.error("Too long VCS update");
+    }
+  }
+
   public void invokeAfterUpdate(final Runnable afterUpdate, final InvokeAfterUpdateMode mode, final String title,
                                 final Consumer<VcsDirtyScopeManager> dirtyScopeManagerFiller, final ModalityState state) {
     LOG.debug("invokeAfterUpdate for project: " + myProject.getName());