Introduce CopyCommitSubjectAction
authorLiudmila Kornilova <kornilova203@gmail.com>
Wed, 24 Nov 2021 12:55:29 +0000 (13:55 +0100)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Wed, 24 Nov 2021 12:56:43 +0000 (12:56 +0000)
GitOrigin-RevId: d7bf9cd5eeb049817225951bc96c5d82b0298fc1

platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
platform/platform-resources-en/src/messages/ActionsBundle.properties
platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java
platform/vcs-impl/resources/META-INF/VcsActions.xml
platform/vcs-impl/src/com/intellij/openapi/vcs/history/actions/CopyCommitSubjectAction.java [new file with mode: 0644]
platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogPanel.java

index 5c873cc839e0c92640614bd7cb81a055af19d620..d12dbe7da0475404e0c066079e88535836c7bc6d 100644 (file)
@@ -36,7 +36,6 @@ import com.intellij.vcs.log.VcsFullCommitDetails;
 import com.intellij.vcs.log.ui.VcsLogActionIds;
 import com.intellij.vcs.log.ui.details.commit.CommitDetailsPanel;
 import com.intellij.vcs.log.ui.frame.CommitPresentationUtil;
-import kotlin.Unit;
 import one.util.streamex.StreamEx;
 import org.jetbrains.annotations.Nls;
 import org.jetbrains.annotations.NonNls;
@@ -440,6 +439,10 @@ public final class PushLog extends JPanel implements DataProvider {
         return new TextRevisionNumber(hash.asString(), hash.toShortString());
       });
     }
+    else if (VcsDataKeys.VCS_COMMIT_SUBJECTS.is(id)) {
+      List<CommitNode> commitNodes = getSelectedCommitNodes();
+      return ContainerUtil.map2Array(commitNodes, String.class, commitNode -> commitNode.getUserObject().getSubject());
+    }
     return null;
   }
 
index 244a4df6b0248a17474b0b60921208cf57414fa1..e920d9449e5a5650a2aa736b4ff541112555f6d0 100644 (file)
@@ -1472,6 +1472,8 @@ group.FileHistory.KeymapGroup.text=File History
 group.Shelve.KeymapGroup.text=Shelve
 action.Vcs.CopyRevisionNumberAction.text=Copy Revision Number
 action.Vcs.CopyRevisionNumberAction.description=Copy revision numbers of selected commits to the clipboard
+action.Vcs.CopyCommitSubjectAction.text=Copy Commit Subject
+action.Vcs.CopyCommitSubjectAction.description=Copy subjects of selected commits to the clipboard
 action.VcsToolbarLabelAction.text=VCS Label
 group.CommitView.ShowOnDoubleClick.text=Show on Double-Click
 action.CommitView.ShowOnDoubleClick.EditorPreview.text=Show Diff on Double-Click
index d49c300939027b8082554644fceb17cf6663dabc..2030a2f79fc0766debbd0128469bb612d786148c 100644 (file)
@@ -29,6 +29,7 @@ public interface VcsDataKeys {
    * @see com.intellij.openapi.vcs.history.VcsRevisionNumberArrayRule
    */
   DataKey<VcsRevisionNumber[]> VCS_REVISION_NUMBERS = DataKey.create("VCS_REVISION_NUMBERS");
+  DataKey<String[]> VCS_COMMIT_SUBJECTS = DataKey.create("VCS_COMMIT_SUBJECTS");
 
   DataKey<File> IO_FILE = DataKey.create("IO_FILE");
   DataKey<File[]> IO_FILE_ARRAY = DataKey.create("IO_FILE_ARRAY");
index 554cb869279271961cf2c724efb3e9b69af2a564..1bb11f2ff188f2e7088c34614cab32a6b55dbd02 100644 (file)
     <action id="Vcs.CopyRevisionNumberAction" class="com.intellij.openapi.vcs.history.actions.CopyRevisionNumberAction"
             icon="AllIcons.Actions.Copy" use-shortcut-of="CopyReference"/>
 
+    <action id="Vcs.CopyCommitSubjectAction" class="com.intellij.openapi.vcs.history.actions.CopyCommitSubjectAction"
+            icon="AllIcons.Actions.Copy"/>
+
     <group id="VcsSelectionHistoryDialog.Popup">
       <reference id="Diff.ShowDiff"/>
       <reference id="Vcs.ShowDiffWithLocal"/>
diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/actions/CopyCommitSubjectAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/actions/CopyCommitSubjectAction.java
new file mode 100644 (file)
index 0000000..9c3a635
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.openapi.vcs.history.actions;
+
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.ide.CopyPasteManager;
+import com.intellij.openapi.project.DumbAwareAction;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vcs.VcsDataKeys;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.datatransfer.StringSelection;
+
+public class CopyCommitSubjectAction extends DumbAwareAction {
+
+  @Override
+  public void actionPerformed(@NotNull AnActionEvent e) {
+    String[] subjects = e.getData(VcsDataKeys.VCS_COMMIT_SUBJECTS);
+    if (subjects == null || subjects.length == 0) return;
+    CopyPasteManager.getInstance().setContents(new StringSelection(StringUtil.join(subjects, "\n")));
+  }
+
+  @Override
+  public void update(@NotNull AnActionEvent e) {
+    String[] subjects = e.getData(VcsDataKeys.VCS_COMMIT_SUBJECTS);
+    e.getPresentation().setEnabled(subjects != null && subjects.length > 0);
+  }
+}
index be60134a9ad4541c739758bcd7698145e2edfb2d..84797a225929d13d098d5e055540daf507d93020 100644 (file)
@@ -9,6 +9,7 @@ import com.intellij.ui.components.JBPanel;
 import com.intellij.ui.navigation.History;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.vcs.log.CommitId;
+import com.intellij.vcs.log.VcsCommitMetadata;
 import com.intellij.vcs.log.impl.VcsLogManager;
 import com.intellij.vcs.log.util.VcsLogUtil;
 import org.jetbrains.annotations.NonNls;
@@ -66,6 +67,11 @@ public class VcsLogPanel extends JBPanel implements DataProvider {
       return ContainerUtil.map(hashes,
                                commitId -> VcsLogUtil.convertToRevisionNumber(commitId.getHash())).toArray(new VcsRevisionNumber[0]);
     }
+    else if (VcsDataKeys.VCS_COMMIT_SUBJECTS.is(dataId)) {
+      List<VcsCommitMetadata> metadata = myUi.getVcsLog().getSelectedShortDetails();
+      if (metadata.size() > VcsLogUtil.MAX_SELECTED_COMMITS) return null;
+      return ContainerUtil.map2Array(metadata, String.class, data -> data.getSubject());
+    }
     else if (PlatformCoreDataKeys.HELP_ID.is(dataId)) {
       return myUi.getHelpId();
     }