diff --git a/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java b/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java index af617bb932dc..05c46130ffa4 100644 --- a/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -974,12 +974,17 @@ public final class TaskManagerImpl extends TaskManager implements PersistentStat } @NotNull - public String suggestBranchName(@NotNull Task task) { + public String suggestBranchName(@NotNull Task task, String separator) { String name = constructDefaultBranchName(task); - if (task.isIssue()) return name.replace(' ', '-'); + if (task.isIssue()) return name.replace(" ", separator); List words = StringUtil.getWordsIn(name); String[] strings = ArrayUtilRt.toStringArray(words); - return StringUtil.join(strings, 0, Math.min(2, strings.length), "-"); + return StringUtil.join(strings, 0, Math.min(2, strings.length), separator); + } + + @NotNull + public String suggestBranchName(@NotNull Task task) { + return suggestBranchName(task, "-"); } @NotNull diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/TaskSettings.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/TaskSettings.java index 058dd23daa73..99960a4efc9c 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/TaskSettings.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/TaskSettings.java @@ -16,6 +16,7 @@ public class TaskSettings implements PersistentStateComponent { public boolean ALWAYS_DISPLAY_COMBO = false; public int CONNECTION_TIMEOUT = 5000; public boolean LOWER_CASE_BRANCH = false; + public String REPLACE_SPACES = "-"; public static TaskSettings getInstance() { return ServiceManager.getService(TaskSettings.class); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java index 631bf09cb822..e50fd351662a 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java @@ -170,9 +170,9 @@ public class VcsOpenTaskPanel extends TaskDialogPanel { @NotNull private String getBranchName(Task task) { - String branchName = myVcsTaskHandler != null - ? myVcsTaskHandler.cleanUpBranchName(myTaskManager.constructDefaultBranchName(task)) - : myTaskManager.suggestBranchName(task); + String branchName = myTaskManager.suggestBranchName(task, StringUtil.notNullize(TaskSettings.getInstance().REPLACE_SPACES)); + if (myVcsTaskHandler != null) + myVcsTaskHandler.cleanUpBranchName(branchName); return TaskSettings.getInstance().LOWER_CASE_BRANCH ? StringUtil.toLowerCase(branchName) : branchName; } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.form b/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.form index 6cfe92d81ed3..149dd4f4437b 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.form +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.form @@ -47,7 +47,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -192,14 +192,48 @@ - + + - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.java index e83e6c8dd2d8..fee17510f4db 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/config/TaskConfigurable.java @@ -17,6 +17,7 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.NotNullLazyValue; import com.intellij.tasks.CommitPlaceholderProvider; import com.intellij.tasks.TaskManager; @@ -26,6 +27,7 @@ import com.intellij.tasks.impl.TaskManagerImpl; import com.intellij.ui.EditorTextField; import com.intellij.ui.ExtendableEditorSupport; import com.intellij.ui.components.JBCheckBox; +import com.intellij.ui.components.JBTextField; import com.intellij.ui.components.fields.ExtendableTextComponent; import com.intellij.util.ArrayUtilRt; import org.jetbrains.annotations.Nls; @@ -71,6 +73,7 @@ public class TaskConfigurable extends BindableConfigurable implements Searchable @BindControl("branchNameFormat") private EditorTextField myBranchNameFormat; private JCheckBox myLowerCase; + private JBTextField myReplaceSpaces; private final Project myProject; private Configurable[] myConfigurables; @@ -114,6 +117,7 @@ public class TaskConfigurable extends BindableConfigurable implements Searchable myAlwaysDisplayTaskCombo.setSelected(TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO); myConnectionTimeout.setText(Integer.toString(TaskSettings.getInstance().CONNECTION_TIMEOUT)); myLowerCase.setSelected(TaskSettings.getInstance().LOWER_CASE_BRANCH); + myReplaceSpaces.setText(TaskSettings.getInstance().REPLACE_SPACES); } @Override @@ -135,6 +139,7 @@ public class TaskConfigurable extends BindableConfigurable implements Searchable Integer connectionTimeout = Integer.valueOf(myConnectionTimeout.getText()); TaskSettings.getInstance().CONNECTION_TIMEOUT = connectionTimeout; TaskSettings.getInstance().LOWER_CASE_BRANCH = myLowerCase.isSelected(); + TaskSettings.getInstance().REPLACE_SPACES = myReplaceSpaces.getText(); if (connectionTimeout != oldConnectionTimeout) { for (TaskRepository repository : manager.getAllRepositories()) { @@ -150,7 +155,8 @@ public class TaskConfigurable extends BindableConfigurable implements Searchable return super.isModified() || TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO != myAlwaysDisplayTaskCombo.isSelected() || TaskSettings.getInstance().CONNECTION_TIMEOUT != Integer.valueOf(myConnectionTimeout.getText()) || - TaskSettings.getInstance().LOWER_CASE_BRANCH != myLowerCase.isSelected(); + TaskSettings.getInstance().LOWER_CASE_BRANCH != myLowerCase.isSelected() || + !Comparing.equal(TaskSettings.getInstance().REPLACE_SPACES, myLowerCase.getText()); } @Override diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java index e938cd8e4a2c..0943c41e9509 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java @@ -421,6 +421,7 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { LocalTaskImpl strange = new LocalTaskImpl("1", "very long and strange summary"); assertEquals("very-long", myTaskManager.suggestBranchName(strange)); + assertEquals("very_long", myTaskManager.suggestBranchName(strange, "_")); myTaskManager.getState().branchNameFormat = "{id} {summary}";