mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-171261 vcs: allow to delete last changelist (and replace it with 'blank' one)
This commit is contained in:
@@ -261,6 +261,7 @@ changes.dialog.editchangelist.title=Edit Changelist
|
||||
changes.removechangelist.warning.text=Are you sure want to remove changelist ''{0}''?\nAll changes will be moved to the active changelist.
|
||||
changes.removechangelist.multiple.warning.text=Are you sure want to remove {0} changelists?\nAll changes will be moved to the active changelist.
|
||||
changes.removechangelist.warning.title=Delete Changelist
|
||||
changes.removechangelist.all.lists.warning.text=Are you sure want to remove {0} changelists?\nAll changes will be moved to the new default changelist.
|
||||
changes.changelist.chooser.existing.changelist=E&xisting Changelist
|
||||
changes.changelist.chooser.new.changelist=Ne&w Changelist
|
||||
changes.changelist.chooser.title=Choose Changelist
|
||||
|
||||
+38
-12
@@ -15,6 +15,7 @@ import com.intellij.openapi.vcs.VcsBundle
|
||||
import com.intellij.openapi.vcs.VcsDataKeys
|
||||
import com.intellij.openapi.vcs.changes.ChangeList
|
||||
import com.intellij.openapi.vcs.changes.ChangeListManager
|
||||
import com.intellij.openapi.vcs.changes.ChangeListManagerEx
|
||||
import com.intellij.openapi.vcs.changes.LocalChangeList
|
||||
import com.intellij.util.ArrayUtil
|
||||
import com.intellij.util.ThreeState
|
||||
@@ -50,11 +51,9 @@ class RemoveChangeListAction : AnAction(), DumbAware {
|
||||
private fun canRemoveChangeLists(project: Project?, lists: List<ChangeList>): Boolean {
|
||||
if (project == null || lists.isEmpty()) return false
|
||||
|
||||
val allChangeListsCount = ChangeListManager.getInstance(project).changeListsNumber
|
||||
for (changeList in lists) {
|
||||
if (changeList !is LocalChangeList) return false
|
||||
if (changeList.isReadOnly) return false
|
||||
if (changeList.isDefault && allChangeListsCount <= lists.size) return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
@@ -68,7 +67,7 @@ class RemoveChangeListAction : AnAction(), DumbAware {
|
||||
}
|
||||
|
||||
private fun deleteLists(project: Project, lists: Collection<LocalChangeList>) {
|
||||
val manager = ChangeListManager.getInstance(project)
|
||||
val manager = ChangeListManager.getInstance(project) as ChangeListManagerEx
|
||||
|
||||
val toRemove = mutableListOf<LocalChangeList>()
|
||||
val toAsk = mutableListOf<LocalChangeList>()
|
||||
@@ -87,12 +86,31 @@ class RemoveChangeListAction : AnAction(), DumbAware {
|
||||
|
||||
if (activeChangelistSelected) {
|
||||
val remainingLists = manager.changeLists.subtract(pendingLists).toList()
|
||||
val newDefault = askNewDefaultChangeList(project, toAsk, remainingLists) ?: return
|
||||
|
||||
manager.setDefaultChangeList(newDefault)
|
||||
if (remainingLists.isEmpty()) {
|
||||
if (!confirmAllChangeListsRemoval(project, pendingLists, toAsk)) return
|
||||
|
||||
toRemove.addAll(toAsk)
|
||||
if (toRemove.remove(newDefault)) LOG.error("New default changelist should be selected among remaining")
|
||||
var defaultList = manager.getChangeList(LocalChangeList.DEFAULT_NAME)
|
||||
if (defaultList == null) {
|
||||
defaultList = manager.addChangeList(LocalChangeList.DEFAULT_NAME, null)
|
||||
}
|
||||
else {
|
||||
manager.editComment(defaultList.name, null)
|
||||
manager.editChangeListData(defaultList.name, null)
|
||||
}
|
||||
|
||||
manager.setDefaultChangeList(defaultList!!)
|
||||
|
||||
toRemove.addAll(toAsk)
|
||||
toRemove.remove(defaultList)
|
||||
}
|
||||
else {
|
||||
val newDefault = askNewDefaultChangeList(project, toAsk, remainingLists) ?: return
|
||||
manager.setDefaultChangeList(newDefault)
|
||||
|
||||
toRemove.addAll(toAsk)
|
||||
if (toRemove.remove(newDefault)) LOG.error("New default changelist should be selected among remaining")
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (confirmChangeListRemoval(project, toAsk)) {
|
||||
@@ -117,16 +135,24 @@ class RemoveChangeListAction : AnAction(), DumbAware {
|
||||
Messages.getQuestionIcon())
|
||||
}
|
||||
|
||||
private fun confirmAllChangeListsRemoval(project: Project, pendingLists: List<LocalChangeList>, toAsk: List<LocalChangeList>): Boolean {
|
||||
if (pendingLists.size == 1) return true
|
||||
if (toAsk.isEmpty()) return true
|
||||
|
||||
val haveNoChanges = pendingLists.all { it.changes.isEmpty() }
|
||||
if (haveNoChanges) return true
|
||||
|
||||
val message = VcsBundle.message("changes.removechangelist.all.lists.warning.text", pendingLists.size)
|
||||
return Messages.YES == Messages.showYesNoDialog(project, message, VcsBundle.message("changes.removechangelist.warning.title"),
|
||||
Messages.getQuestionIcon())
|
||||
}
|
||||
|
||||
private fun askNewDefaultChangeList(project: Project,
|
||||
lists: List<LocalChangeList>,
|
||||
remainingLists: List<LocalChangeList>): LocalChangeList? {
|
||||
assert(remainingLists.isNotEmpty())
|
||||
val haveNoChanges = lists.all { it.changes.isEmpty() }
|
||||
|
||||
// Can't remove last changelist
|
||||
if (remainingLists.isEmpty()) {
|
||||
return null
|
||||
}
|
||||
|
||||
// don't ask "Which changelist to make active" if there is only one option anyway
|
||||
// unless there are some changes to be moved - give user a chance to cancel deletion
|
||||
if (remainingLists.size == 1 && haveNoChanges) {
|
||||
|
||||
Reference in New Issue
Block a user