sync task closing

This commit is contained in:
Dmitry Avdeev
2013-07-29 15:49:06 +04:00
parent 7672746ab0
commit 3957e337ca
5 changed files with 43 additions and 15 deletions
@@ -44,7 +44,7 @@ public abstract class VcsTaskHandler {
public abstract void switchToTask(TaskInfo taskInfo);
public abstract void closeTask(TaskInfo taskInfo);
public abstract void closeTask(TaskInfo taskInfo, TaskInfo original);
public abstract TaskInfo getActiveTask();
}
@@ -32,6 +32,8 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author Dmitry Avdeev
@@ -98,10 +100,25 @@ public class GitTaskHandler extends VcsTaskHandler {
}
@Override
public void closeTask(TaskInfo taskInfo) {
public void closeTask(final TaskInfo taskInfo, TaskInfo original) {
for (String branchName : taskInfo.branches.keySet()) {
myBrancher.merge(branchName, GitBrancher.DeleteOnMergeOption.DELETE, getRepositories(taskInfo.branches.get(branchName)));
Set<String> branches = original.branches.keySet();
final AtomicInteger counter = new AtomicInteger(branches.size());
for (final String originalBranch : branches) {
myBrancher.checkout(originalBranch, getRepositories(original.branches.get(originalBranch)), new Runnable() {
@Override
public void run() {
if (counter.decrementAndGet() == 0) {
merge(taskInfo);
}
}
});
}
}
private void merge(TaskInfo taskInfo) {
for (String featureBranch : taskInfo.branches.keySet()) {
myBrancher.merge(featureBranch, GitBrancher.DeleteOnMergeOption.DELETE, getRepositories(taskInfo.branches.get(featureBranch)));
}
}
@@ -146,7 +146,12 @@ class GitBrancherImpl implements GitBrancher {
execute(indicator);
if (myCallInAwtAfterExecution != null) {
Application application = ApplicationManager.getApplication();
application.invokeLater(myCallInAwtAfterExecution, application.getDefaultModalityState());
if (application.isUnitTestMode()) {
myCallInAwtAfterExecution.run();
}
else {
application.invokeLater(myCallInAwtAfterExecution, application.getDefaultModalityState());
}
}
}
@@ -411,8 +411,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
VcsTaskHandler[] handlers = VcsTaskHandler.getAllHandlers(myProject);
for (VcsTaskHandler handler : handlers) {
handler.switchToTask(original);
handler.closeTask(feature);
handler.closeTask(feature, original);
}
}
@@ -18,8 +18,10 @@ package com.intellij.tasks.vcs;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.VcsTaskHandler;
import com.intellij.tasks.LocalTask;
import com.intellij.tasks.TaskManagerTestCase;
import com.intellij.tasks.TaskManager;
import com.intellij.tasks.impl.LocalTaskImpl;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.testFramework.PlatformTestCase;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import git4idea.branch.GitBranchesCollection;
@@ -34,10 +36,11 @@ import java.util.List;
* Date: 18.07.13
*/
@SuppressWarnings("ConstantConditions")
public class TaskBranchesTest extends TaskManagerTestCase {
public class TaskBranchesTest extends PlatformTestCase {
// todo re-enable
public void _testGitTaskHandler() throws Exception {
private TaskManagerImpl myTaskManager;
public void testGitTaskHandler() throws Exception {
List<GitRepository> repositories = initRepositories("community", "idea");
GitRepository repository = repositories.get(0);
@@ -61,10 +64,8 @@ public class TaskBranchesTest extends TaskManagerTestCase {
assertEquals(3, repository.getBranches().getLocalBranches().size());
assertEquals(second, repository.getCurrentBranch().getName());
handler.switchToTask(firstInfo);
assertEquals(first, repository.getCurrentBranch().getName());
handler.closeTask(secondInfo);
handler.closeTask(secondInfo, firstInfo);
repository.update();
assertEquals(2, repository.getBranches().getLocalBranches().size());
}
@@ -113,4 +114,10 @@ public class TaskBranchesTest extends TaskManagerTestCase {
assertEquals(1, branches.getLocalBranches().size());
return repository;
}
@Override
protected void setUp() throws Exception {
super.setUp();
myTaskManager = (TaskManagerImpl)TaskManager.getManager(getProject());
}
}