From ad008b79ee22884d3239a9dab546bc24e9adfdb1 Mon Sep 17 00:00:00 2001 From: irengrig Date: Thu, 26 Jul 2012 15:15:49 +0400 Subject: [PATCH] IDEA-88479 "Copy revision number" puts a wrong revision to clipboard after you delete lines above --- .../openapi/vcs/actions/AnnotateToggleAction.java | 2 +- .../vcs/actions/CopyRevisionNumberAction.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java index a82236fd3d3a..a93a90f873ee 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java @@ -203,7 +203,7 @@ public class AnnotateToggleAction extends ToggleAction implements DumbAware, Ann if (vcs.getCommittedChangesProvider() != null) { additionalActions.add(new ShowDiffFromAnnotation(getUpToDateLineNumber, fileAnnotation, vcs, file)); } - additionalActions.add(new CopyRevisionNumberAction(fileAnnotation)); + additionalActions.add(new CopyRevisionNumberAction(getUpToDateLineNumber, fileAnnotation)); final AnnotationPresentation presentation = new AnnotationPresentation(highlighting, switcher, editorGutter, gutters, additionalActions.toArray(new AnAction[additionalActions.size()])); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CopyRevisionNumberAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CopyRevisionNumberAction.java index a2788e86e42c..4d42e9eabdb2 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CopyRevisionNumberAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CopyRevisionNumberAction.java @@ -18,6 +18,7 @@ package com.intellij.openapi.vcs.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.ide.CopyPasteManager; +import com.intellij.openapi.localVcs.UpToDateLineNumberProvider; import com.intellij.openapi.vcs.annotate.FileAnnotation; import com.intellij.openapi.vcs.annotate.LineNumberListener; import com.intellij.openapi.vcs.history.TextTransferrable; @@ -27,17 +28,21 @@ import com.intellij.openapi.vcs.history.VcsRevisionNumber; * @author Konstantin Bulenkov */ public class CopyRevisionNumberAction extends AnAction implements LineNumberListener { + private final UpToDateLineNumberProvider myGetUpToDateLineNumber; private final FileAnnotation myAnnotation; private int myLineNumber = -1; - public CopyRevisionNumberAction(FileAnnotation annotation) { + public CopyRevisionNumberAction(UpToDateLineNumberProvider getUpToDateLineNumber, FileAnnotation annotation) { super("Copy revision number"); + myGetUpToDateLineNumber = getUpToDateLineNumber; myAnnotation = annotation; } @Override public void actionPerformed(AnActionEvent e) { - final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(myLineNumber); + if (myLineNumber < 0) return; + final int corrected = myGetUpToDateLineNumber.getLineNumber(myLineNumber); + final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(corrected); if (revisionNumber != null) { final String revision = revisionNumber.asString(); CopyPasteManager.getInstance().setContents(new TextTransferrable(revision, revision)); @@ -46,7 +51,9 @@ public class CopyRevisionNumberAction extends AnAction implements LineNumberList @Override public void update(AnActionEvent e) { - final boolean enabled = myLineNumber != -1 && myAnnotation.getLineRevisionNumber(myLineNumber) != null; + int corrected = myLineNumber; + final boolean enabled = myLineNumber >= 0 && (corrected = myGetUpToDateLineNumber.getLineNumber(myLineNumber)) >= 0 && + myAnnotation.getLineRevisionNumber(corrected) != null; e.getPresentation().setEnabled(enabled); e.getPresentation().setVisible(enabled); }