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;
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;
}
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
* @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");
<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"/>
--- /dev/null
+// 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);
+ }
+}
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;
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();
}