From 83b3bdceaa38f6e8feb1ab85992d37ce9bc8e310 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Fri, 15 Apr 2016 16:12:24 +0300 Subject: [PATCH] vcs: Implemented "Ignore..." action for unversioned files in commit dialog --- .../actions/IgnoreUnversionedAction.java | 11 ++++++++-- .../ui/ChangesBrowserIgnoredFilesNode.java | 2 +- .../changes/ui/IgnoreUnversionedDialog.java | 20 ++++++++++++------- .../changes/ui/MultipleChangeListBrowser.java | 1 + 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/IgnoreUnversionedAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/IgnoreUnversionedAction.java index a135639242cc..495ba03ebecd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/IgnoreUnversionedAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/IgnoreUnversionedAction.java @@ -25,9 +25,9 @@ package com.intellij.openapi.vcs.changes.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.changes.ChangeListManager; +import com.intellij.openapi.vcs.changes.ui.ChangesBrowserBase; import com.intellij.openapi.vcs.changes.ui.ChangesListView; import com.intellij.openapi.vcs.changes.ui.IgnoreUnversionedDialog; import com.intellij.openapi.vfs.VirtualFile; @@ -46,7 +46,14 @@ public class IgnoreUnversionedAction extends AnAction { removeNullFiles(files); if (files.isEmpty()) return; - IgnoreUnversionedDialog.ignoreSelectedFiles(project, files); + ChangesBrowserBase browser = e.getData(ChangesBrowserBase.DATA_KEY); + Runnable callback = browser == null ? null : () -> { + browser.rebuildList(); + //noinspection unchecked + browser.getViewer().excludeChanges((List)files); + }; + + IgnoreUnversionedDialog.ignoreSelectedFiles(project, files, callback); } private static void removeNullFiles(List files) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserIgnoredFilesNode.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserIgnoredFilesNode.java index a8e94838128c..b2cdd9d4fc58 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserIgnoredFilesNode.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserIgnoredFilesNode.java @@ -33,6 +33,6 @@ public class ChangesBrowserIgnoredFilesNode extends ChangesBrowserNode { @Override public void acceptDrop(final ChangeListOwner dragOwner, final ChangeListDragBean dragBean) { - IgnoreUnversionedDialog.ignoreSelectedFiles(dragOwner.getProject(), dragBean.getUnversionedFiles()); + IgnoreUnversionedDialog.ignoreSelectedFiles(dragOwner.getProject(), dragBean.getUnversionedFiles(), null); } } \ No newline at end of file diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java index 564b412cdfa4..82277563e216 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java @@ -245,15 +245,21 @@ public class IgnoreUnversionedDialog extends DialogWrapper { return "IgnoreUnversionedDialog"; } - public static void ignoreSelectedFiles(final Project project, final List files) { + public static void ignoreSelectedFiles(@NotNull Project project, @NotNull List files, @Nullable Runnable callback) { IgnoreUnversionedDialog dlg = new IgnoreUnversionedDialog(project); dlg.setFilesToIgnore(files); - if (!dlg.showAndGet()) { - return; - } - final IgnoredFileBean[] ignoredFiles = dlg.getSelectedIgnoredFiles(); - if (ignoredFiles.length > 0) { - ChangeListManager.getInstance(project).addFilesToIgnore(ignoredFiles); + + if (dlg.showAndGet()) { + IgnoredFileBean[] ignoredFiles = dlg.getSelectedIgnoredFiles(); + + if (ignoredFiles.length > 0) { + ChangeListManager manager = ChangeListManager.getInstance(project); + + manager.addFilesToIgnore(ignoredFiles); + if (callback != null) { + manager.invokeAfterUpdate(callback, InvokeAfterUpdateMode.SYNCHRONOUS_CANCELLABLE, "Ignore unversioned files", null); + } + } } } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java index ad822cc3a306..0c5dc455fb74 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java @@ -310,6 +310,7 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase { }); if (Registry.is("vcs.unversioned.files.in.commit")) { toolBarGroup.add(ActionManager.getInstance().getAction("ChangesView.AddUnversioned.From.Dialog")); + toolBarGroup.add(ActionManager.getInstance().getAction("ChangesView.Ignore")); } RollbackDialogAction rollback = new RollbackDialogAction(); EmptyAction.setupAction(rollback, IdeActions.CHANGES_VIEW_ROLLBACK, this);