IDEA-173186 Commit message lost after cancelling commit dialog with Add commit message from Task server enabled

This commit is contained in:
Dmitry Avdeev
2018-12-13 16:19:54 +03:00
parent c896a6ecd9
commit 0a7db7eaf0
4 changed files with 40 additions and 58 deletions
@@ -144,7 +144,6 @@
<annotator language="JQL" implementationClass="com.intellij.tasks.jira.jql.codeinsight.JqlAnnotator"/>
<checkinHandlerFactory implementation="com.intellij.tasks.impl.TaskCheckinHandlerFactory"/>
<vcs.commitMessageProvider implementation="com.intellij.tasks.impl.TaskCommitMessageProvider"/>
<!-- YouTrack support -->
<!--<annotator language="TEXT" implementationClass="com.intellij.tasks.youtrack.lang.YouTrackHighlightingAnnotator"/>-->
<lang.parserDefinition language="YouTrack" implementationClass="com.intellij.tasks.youtrack.lang.YouTrackParserDefinition"/>
@@ -21,11 +21,13 @@ import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.vcs.VcsTaskHandler;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.tasks.LocalTask;
import com.intellij.tasks.Task;
import com.intellij.tasks.TaskManager;
import com.intellij.tasks.config.TaskSettings;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.tasks.impl.TaskUtil;
import com.intellij.tasks.ui.TaskDialogPanel;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.components.JBCheckBox;
@@ -59,11 +61,13 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
private VcsTaskHandler myVcsTaskHandler;
private static final String START_FROM_BRANCH = "start.from.branch";
private final TaskManagerImpl myTaskManager;
private final Project myProject;
private final LocalTask myPreviousTask;
public VcsOpenTaskPanel(Project project, Task task) {
myTaskManager = (TaskManagerImpl)TaskManager.getManager(project);
myProject = project;
myPreviousTask = myTaskManager.getActiveTask();
ActionListener listener = new ActionListener() {
@Override
@@ -199,6 +203,11 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
if (myCreateChangelist.isSelected()) {
myTaskManager.createChangeList(localTask, myChangelistName.getText());
}
else {
ChangeListManager changeListManager = ChangeListManager.getInstance(myProject);
String comment = TaskUtil.getChangeListComment(localTask);
changeListManager.editComment(changeListManager.getDefaultListName(), comment);
}
if (myCreateBranch.isSelected()) {
VcsTaskHandler.TaskInfo branchFrom = (VcsTaskHandler.TaskInfo)myBranchFrom.getSelectedItem();
Runnable createBranch = () -> myTaskManager.createBranch(localTask, myPreviousTask, myBranchName.getText(), branchFrom);
@@ -1,37 +0,0 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.tasks.impl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.changes.LocalChangeList;
import com.intellij.openapi.vcs.changes.ui.CommitMessageProvider;
import com.intellij.tasks.LocalTask;
import com.intellij.tasks.TaskManager;
import org.jetbrains.annotations.Nullable;
/**
* @author Dmitry Avdeev
*/
public class TaskCommitMessageProvider implements CommitMessageProvider {
@Nullable
@Override
public String getCommitMessage(LocalChangeList forChangelist, Project project) {
LocalTask task = TaskManager.getManager(project).getAssociatedTask(forChangelist);
if (task == null) return null;
return TaskUtil.getChangeListComment(task, true);
}
}
@@ -34,7 +34,10 @@ import com.intellij.openapi.vcs.impl.projectlevelman.AllVcses;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.tasks.*;
import com.intellij.tasks.actions.OpenTaskDialog;
import com.intellij.tasks.impl.*;
import com.intellij.tasks.impl.LocalTaskImpl;
import com.intellij.tasks.impl.TaskChangelistSupport;
import com.intellij.tasks.impl.TaskCheckinHandlerFactory;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
@@ -449,36 +452,44 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase {
myTaskManager.getState().shelveChanges = true;
LocalTaskImpl task = new LocalTaskImpl("id", "summary");
OpenTaskDialog dialog = new OpenTaskDialog(getProject(), task);
try {
dialog.createTask();
assertEquals(dumpChangeListManager(), activeTask.getSummary(), activeTask.getShelfName());
runOpenTaskDialog(task);
List<ShelvedChangeList> lists = ShelveChangesManager.getInstance(getProject()).getShelvedChangeLists();
assertTrue(lists.stream().anyMatch(list -> list.DESCRIPTION.equals(activeTask.getShelfName())));
assertEquals(dumpChangeListManager(), activeTask.getSummary(), activeTask.getShelfName());
assertEmpty(myChangeListManager.getDefaultChangeList().getChanges());
myTaskManager.activateTask(activeTask, true);
Collection<Change> changes = myChangeListManager.getDefaultChangeList().getChanges();
assertNotEmpty(changes);
}
finally {
dialog.close(DialogWrapper.OK_EXIT_CODE);
}
UIUtil.dispatchAllInvocationEvents();
List<ShelvedChangeList> lists = ShelveChangesManager.getInstance(getProject()).getShelvedChangeLists();
assertTrue(lists.stream().anyMatch(list -> list.DESCRIPTION.equals(activeTask.getShelfName())));
assertEmpty(myChangeListManager.getDefaultChangeList().getChanges());
myTaskManager.activateTask(activeTask, true);
Collection<Change> changes = myChangeListManager.getDefaultChangeList().getChanges();
assertNotEmpty(changes);
}
public void testAssociatedChangelist() {
ChangeListManager changeListManager = ChangeListManager.getInstance(getProject());
LocalChangeList changeList = changeListManager.getDefaultChangeList();
LocalChangeList changeList = myChangeListManager.getDefaultChangeList();
assertNotNull(changeList);
assertEquals(myTaskManager.getActiveTask(), myTaskManager.getAssociatedTask(changeList));
LocalTaskImpl bond = new LocalTaskImpl("007", "Bond");
TestRepository repository = new TestRepository();
repository.setShouldFormatCommitMessage(true);
bond.setRepository(repository);
myTaskManager.activateTask(bond, false);
assertEquals("007 Bond", new TaskCommitMessageProvider().getCommitMessage(changeList, getProject()));
myTaskManager.getState().createChangelist = false;
runOpenTaskDialog(bond);
assertEquals(1, bond.getChangeLists().size());
assertEquals(changeList.getId(), bond.getChangeLists().get(0).id);
assertEquals("007 Bond", myChangeListManager.getDefaultChangeList().getComment());
}
private void runOpenTaskDialog(LocalTaskImpl task) {
OpenTaskDialog dialog = new OpenTaskDialog(getProject(), task);
try {
dialog.createTask();
}
finally {
dialog.close(DialogWrapper.OK_EXIT_CODE);
}
UIUtil.dispatchAllInvocationEvents();
}
@Override