mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-135768 Show remote branches in creating task dialog
This commit is contained in:
@@ -58,7 +58,7 @@ public abstract class DvcsTaskHandler<R extends Repository> extends VcsTaskHandl
|
||||
List<R> problems = ContainerUtil.filter(repositories, new Condition<R>() {
|
||||
@Override
|
||||
public boolean value(R repository) {
|
||||
return hasBranch(repository, taskName);
|
||||
return hasBranch(repository, new TaskInfo(taskName, Collections.emptyList()));
|
||||
}
|
||||
});
|
||||
List<R> map = new ArrayList<R>();
|
||||
@@ -95,7 +95,7 @@ public abstract class DvcsTaskHandler<R extends Repository> extends VcsTaskHandl
|
||||
List<R> notFound = ContainerUtil.filter(repositories, new Condition<R>() {
|
||||
@Override
|
||||
public boolean value(R repository) {
|
||||
return !hasBranch(repository, branchName);
|
||||
return !hasBranch(repository, taskInfo);
|
||||
}
|
||||
});
|
||||
if (!notFound.isEmpty()) {
|
||||
@@ -122,6 +122,7 @@ public abstract class DvcsTaskHandler<R extends Repository> extends VcsTaskHandl
|
||||
return myRepositoryManager.isSyncEnabled();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TaskInfo[] getCurrentTasks() {
|
||||
List<R> repositories = myRepositoryManager.getRepositories();
|
||||
@@ -201,5 +202,5 @@ public abstract class DvcsTaskHandler<R extends Repository> extends VcsTaskHandl
|
||||
|
||||
protected abstract void mergeAndClose(@NotNull String branch, @NotNull List<R> repositories);
|
||||
|
||||
protected abstract boolean hasBranch(@NotNull R repository, @NotNull String name);
|
||||
protected abstract boolean hasBranch(@NotNull R repository, @NotNull TaskInfo name);
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ public abstract class VcsTaskHandler {
|
||||
/**
|
||||
* @return currently active (checked out) tasks (branches)
|
||||
*/
|
||||
@NotNull
|
||||
public abstract TaskInfo[] getCurrentTasks();
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import git4idea.branch.GitBrancher;
|
||||
import git4idea.branch.GitBranchesCollection;
|
||||
import git4idea.repo.GitRepository;
|
||||
import git4idea.repo.GitRepositoryManager;
|
||||
import git4idea.validators.GitRefNameValidator;
|
||||
@@ -65,20 +66,24 @@ public class GitTaskHandler extends DvcsTaskHandler<GitRepository> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean hasBranch(@NotNull GitRepository repository, @NotNull String name) {
|
||||
return repository.getBranches().findLocalBranch(name) != null;
|
||||
protected boolean hasBranch(@NotNull GitRepository repository, @NotNull TaskInfo info) {
|
||||
GitBranchesCollection branches = repository.getBranches();
|
||||
return info.isRemote() ?
|
||||
branches.getRemoteBranches().stream().anyMatch(branch -> info.getName().equals(branch.getName())) :
|
||||
branches.findLocalBranch(info.getName()) != null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected Iterable<TaskInfo> getAllBranches(@NotNull GitRepository repository) {
|
||||
List<TaskInfo> list = ContainerUtil.map(repository.getBranches().getLocalBranches(), new Function<GitBranch, TaskInfo>() {
|
||||
GitBranchesCollection branches = repository.getBranches();
|
||||
List<TaskInfo> list = ContainerUtil.map(branches.getLocalBranches(), new Function<GitBranch, TaskInfo>() {
|
||||
@Override
|
||||
public TaskInfo fun(GitBranch branch) {
|
||||
return new TaskInfo(branch.getName(), Collections.singleton(repository.getPresentableUrl()));
|
||||
}
|
||||
});
|
||||
list.addAll(ContainerUtil.map(repository.getBranches().getLocalBranches(), new Function<GitBranch, TaskInfo>() {
|
||||
list.addAll(ContainerUtil.map(branches.getRemoteBranches(), new Function<GitBranch, TaskInfo>() {
|
||||
@Override
|
||||
public TaskInfo fun(GitBranch branch) {
|
||||
return new TaskInfo(branch.getName(), Collections.singleton(repository.getPresentableUrl())) {
|
||||
|
||||
@@ -112,8 +112,8 @@ public class HgTaskHandler extends DvcsTaskHandler<HgRepository> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean hasBranch(@NotNull HgRepository repository, @NotNull String name) {
|
||||
return HgUtil.getNamesWithoutHashes(repository.getBookmarks()).contains(name) || repository.getOpenedBranches().contains(name);
|
||||
protected boolean hasBranch(@NotNull HgRepository repository, @NotNull TaskInfo name) {
|
||||
return HgUtil.getNamesWithoutHashes(repository.getBookmarks()).contains(name.getName()) || repository.getOpenedBranches().contains(name.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -159,15 +159,15 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
|
||||
myTaskManager.createChangeList(localTask, myChangelistName.getText());
|
||||
}
|
||||
if (myCreateBranch.isSelected()) {
|
||||
VcsTaskHandler.TaskInfo branchFrom = (VcsTaskHandler.TaskInfo)myBranchFrom.getSelectedItem();
|
||||
Runnable createBranch = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myTaskManager.createBranch(localTask, myPreviousTask, myBranchName.getText());
|
||||
myTaskManager.createBranch(localTask, myPreviousTask, myBranchName.getText(), branchFrom);
|
||||
}
|
||||
};
|
||||
VcsTaskHandler.TaskInfo item = (VcsTaskHandler.TaskInfo)myBranchFrom.getSelectedItem();
|
||||
if (item != null) {
|
||||
myVcsTaskHandler.switchToTask(item, createBranch);
|
||||
if (branchFrom != null) {
|
||||
myVcsTaskHandler.switchToTask(branchFrom, createBranch);
|
||||
}
|
||||
else {
|
||||
createBranch.run();
|
||||
|
||||
@@ -451,6 +451,10 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
}
|
||||
|
||||
public void createBranch(LocalTask task, LocalTask previousActive, String name) {
|
||||
createBranch(task, previousActive, name, null);
|
||||
}
|
||||
|
||||
public void createBranch(LocalTask task, LocalTask previousActive, String name, @Nullable VcsTaskHandler.TaskInfo branchFrom) {
|
||||
VcsTaskHandler[] handlers = VcsTaskHandler.getAllHandlers(myProject);
|
||||
for (VcsTaskHandler handler : handlers) {
|
||||
VcsTaskHandler.TaskInfo[] info = handler.getCurrentTasks();
|
||||
@@ -458,6 +462,9 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
|
||||
addBranches(previousActive, info, false);
|
||||
}
|
||||
addBranches(task, info, true);
|
||||
if (info.length == 0 && branchFrom != null) {
|
||||
addBranches(task, new VcsTaskHandler.TaskInfo[] { branchFrom }, true);
|
||||
}
|
||||
addBranches(task, new VcsTaskHandler.TaskInfo[] { handler.startNewTask(name) }, false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user