diff --git a/platform/platform-resources-en/src/messages/VcsBundle.properties b/platform/platform-resources-en/src/messages/VcsBundle.properties index ca77c2b69f3f..2d311769db26 100644 --- a/platform/platform-resources-en/src/messages/VcsBundle.properties +++ b/platform/platform-resources-en/src/messages/VcsBundle.properties @@ -242,7 +242,6 @@ before.checkin.standard.options.check.smells=Perform code analy&sis before.checkin.new.todo.check=Check TODO ({0}) before.checkin.new.todo.check.title=Check TODO before.checkin.cleanup.code=&Cleanup -history.copy.revision.number=Copy Revision Number # Changes view changes.nodetitle.unversioned.files=Unversioned Files diff --git a/platform/platform-resources/src/idea/VcsActions.xml b/platform/platform-resources/src/idea/VcsActions.xml index 396e0f1b9ac8..2ac8bd3ef823 100644 --- a/platform/platform-resources/src/idea/VcsActions.xml +++ b/platform/platform-resources/src/idea/VcsActions.xml @@ -271,5 +271,9 @@ icon="AllIcons.General.GetProjectfromVCS"> + + diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java index 32038b53ff51..c1d37be8758b 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java @@ -66,4 +66,5 @@ public interface VcsDataKeys { DataKey> REMOTE_HISTORY_CHANGED_LISTENER = DataKey.create("REMOTE_HISTORY_CHANGED_LISTENER"); DataKey REMOTE_HISTORY_LOCATION = DataKey.create("REMOTE_HISTORY_LOCATION"); DataKey VCS_REVISION_NUMBER = DataKey.create("VCS_REVISION_NUMBER"); + DataKey VCS_REVISION_NUMBERS = DataKey.create("VCS_REVISION_NUMBERS"); } diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/TextRevisionNumber.java b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/TextRevisionNumber.java index 687bd4daa822..52da2b30b7f0 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/TextRevisionNumber.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/TextRevisionNumber.java @@ -16,20 +16,36 @@ package com.intellij.openapi.vcs.changes; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.vcs.history.ShortVcsRevisionNumber; import com.intellij.openapi.vcs.history.VcsRevisionNumber; +import org.jetbrains.annotations.NotNull; -public class TextRevisionNumber implements VcsRevisionNumber { - private final String myText; +public class TextRevisionNumber implements ShortVcsRevisionNumber { + @NotNull private final String myFullRevisionNumber; + @NotNull private final String myShortRevisionNumber; - public TextRevisionNumber(final String text) { - myText = text; + public TextRevisionNumber(@NotNull String fullRevisionNumber) { + this(fullRevisionNumber, fullRevisionNumber.substring(0, Math.min(7, fullRevisionNumber.length()))); } + public TextRevisionNumber(@NotNull String fullRevisionNumber, @NotNull String shortRevisionNumber) { + myFullRevisionNumber = fullRevisionNumber; + myShortRevisionNumber = shortRevisionNumber; + } + + @Override public String asString() { - return myText; + return myFullRevisionNumber; } - public int compareTo(final VcsRevisionNumber o) { - return Comparing.compare(myText, ((TextRevisionNumber) o).myText); + @Override + public int compareTo(@NotNull final VcsRevisionNumber o) { + return Comparing.compare(myFullRevisionNumber, ((TextRevisionNumber) o).myFullRevisionNumber); } + + @Override + public String toShortString() { + return myShortRevisionNumber; + } + } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java index d4ec0c2fbc05..d4506d6ae95c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java @@ -23,6 +23,7 @@ package com.intellij.openapi.vcs.changes.ui; import com.intellij.CommonBundle; +import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.project.Project; @@ -34,7 +35,6 @@ import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.committed.CommittedChangesBrowserUseCase; import com.intellij.openapi.vcs.changes.committed.RepositoryChangesBrowser; import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer; -import com.intellij.openapi.vcs.history.CopyRevisionNumberAction; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeListImpl; import com.intellij.openapi.vcs.versionBrowser.VcsRevisionNumberAware; @@ -155,7 +155,7 @@ public class ChangeListViewerDialog extends DialogWrapper implements DataProvide @Override protected void buildToolBar(DefaultActionGroup toolBarGroup) { super.buildToolBar(toolBarGroup); - toolBarGroup.add(new CopyRevisionNumberAction()); + toolBarGroup.add(ActionManager.getInstance().getAction("Vcs.CopyRevisionNumberAction")); } @Override diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java index 2114ac7f3c46..4bdbdfbd287c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java @@ -19,25 +19,18 @@ 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.VcsBundle; import com.intellij.openapi.vcs.VcsDataKeys; import com.intellij.util.Function; -import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.awt.datatransfer.StringSelection; +import java.util.Arrays; +import java.util.Collections; import java.util.List; -/** - * The action that copies a revision number text to clipboard - */ public class CopyRevisionNumberAction extends DumbAwareAction { - public CopyRevisionNumberAction() { - super(VcsBundle.getString("history.copy.revision.number"), VcsBundle.getString("history.copy.revision.number"), PlatformIcons.COPY_ICON); - } - @Override public void actionPerformed(@NotNull AnActionEvent e) { List revisions = getRevisionNumbersFromContext(e); @@ -47,23 +40,26 @@ public class CopyRevisionNumberAction extends DumbAwareAction { @NotNull private static List getRevisionNumbersFromContext(@NotNull AnActionEvent e) { - List revisions = ContainerUtil.newArrayList(); + VcsRevisionNumber[] revisionNumbers = e.getData(VcsDataKeys.VCS_REVISION_NUMBERS); + if (revisionNumbers != null) { + return Arrays.asList(revisionNumbers); + } + VcsRevisionNumber revision = e.getData(VcsDataKeys.VCS_REVISION_NUMBER); - if (revision == null) { - VcsFileRevision[] fileRevisions = e.getData(VcsDataKeys.VCS_FILE_REVISIONS); - if (fileRevisions != null) { - revisions.addAll(ContainerUtil.map(fileRevisions, new Function() { - @Override - public VcsRevisionNumber fun(VcsFileRevision revision) { - return revision.getRevisionNumber(); - } - })); - } + if (revision != null) { + return Collections.singletonList(revision); } - else { - revisions.add(revision); + + VcsFileRevision[] fileRevisions = e.getData(VcsDataKeys.VCS_FILE_REVISIONS); + if (fileRevisions != null) { + return ContainerUtil.map(fileRevisions, new Function() { + @Override + public VcsRevisionNumber fun(VcsFileRevision revision) { + return revision.getRevisionNumber(); + } + }); } - return revisions; + return Collections.emptyList(); } @NotNull diff --git a/platform/vcs-log/impl/src/META-INF/vcs-log.xml b/platform/vcs-log/impl/src/META-INF/vcs-log.xml index 3598cbe07c84..6b02ed22c660 100644 --- a/platform/vcs-log/impl/src/META-INF/vcs-log.xml +++ b/platform/vcs-log/impl/src/META-INF/vcs-log.xml @@ -15,8 +15,6 @@ - @@ -28,7 +26,7 @@ - + diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogCopyHashAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogCopyHashAction.java deleted file mode 100644 index f9139c8b8026..000000000000 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogCopyHashAction.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2000-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.vcs.log.ui; - -import com.intellij.ide.actions.CopyAction; -import com.intellij.openapi.actionSystem.AnActionEvent; - -public class VcsLogCopyHashAction extends CopyAction { - - @Override - public void actionPerformed(AnActionEvent e) { - super.actionPerformed(e); - } - - @Override - public void update(AnActionEvent e) { - super.update(e); - } - -} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java index 37514fd63add..45f05ad6646a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java @@ -11,17 +11,17 @@ import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vcs.VcsDataKeys; import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vcs.changes.TextRevisionNumber; import com.intellij.openapi.vcs.changes.committed.RepositoryChangesBrowser; import com.intellij.openapi.vcs.changes.ui.ChangesBrowser; +import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.components.JBLoadingPanel; import com.intellij.util.ArrayUtil; +import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.table.ComponentsListFocusTraversalPolicy; -import com.intellij.vcs.log.VcsLog; -import com.intellij.vcs.log.VcsLogDataKeys; -import com.intellij.vcs.log.VcsLogFilterUi; -import com.intellij.vcs.log.VcsLogSettings; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.data.VcsLogUiProperties; import com.intellij.vcs.log.data.VisiblePack; @@ -253,6 +253,15 @@ public class MainFrame extends JPanel implements TypeSafeDataProvider { sink.put(key, ArrayUtil.toObjectArray(selectedChanges, Change.class)); } } + else if (VcsDataKeys.VCS_REVISION_NUMBERS == key) { + List hashes = myUI.getVcsLog().getSelectedCommits(); + sink.put(key, ArrayUtil.toObjectArray(ContainerUtil.map(hashes, new Function() { + @Override + public VcsRevisionNumber fun(Hash hash) { + return new TextRevisionNumber(hash.asString(), hash.toShortString()); + } + }), VcsRevisionNumber.class)); + } } public Component getToolbar() { diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java index 9f4a1ceb4209..7550f804fb21 100644 --- a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java +++ b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java @@ -15,6 +15,7 @@ */ package git4idea.history; +import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -66,7 +67,10 @@ public class GitHistoryProvider implements VcsHistoryProvider, VcsCacheableHisto } public AnAction[] getAdditionalActions(Runnable refresher) { - return new AnAction[]{ ShowAllAffectedGenericAction.getInstance(), new CopyRevisionNumberAction(), new SelectRevisionInGitLogAction()}; + return new AnAction[] { + ShowAllAffectedGenericAction.getInstance(), + ActionManager.getInstance().getAction("Vcs.CopyRevisionNumberAction"), + new SelectRevisionInGitLogAction() }; } public boolean isDateOmittable() {