From 42b39023dbeb64e7c312737730cecf36d3a73be3 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Fri, 13 Aug 2010 09:12:27 +0200
Subject: [PATCH] VCS polishing: Change context menu entry for 'Blame parent'.

... for git, hg as it is not obvious from the SHA1 displayed.
---
 src/plugins/git/clonewizardpage.cpp       |  4 ++--
 src/plugins/git/giteditor.cpp             |  1 +
 src/plugins/mercurial/mercurialeditor.cpp |  1 +
 src/plugins/vcsbase/vcsbaseeditor.cpp     | 22 ++++++++++++++++++----
 src/plugins/vcsbase/vcsbaseeditor.h       |  7 ++++++-
 5 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/src/plugins/git/clonewizardpage.cpp b/src/plugins/git/clonewizardpage.cpp
index c7d0667fd54..3d678210d09 100644
--- a/src/plugins/git/clonewizardpage.cpp
+++ b/src/plugins/git/clonewizardpage.cpp
@@ -164,9 +164,9 @@ QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizardPage::createCheckoutJob(
 
 QStringList CloneWizardPage::branches(const QString &repository, int *current)
 {
-    // Run git on remote repository if URL is complete
+    // Run git on remote repository if an URL was specified.
     *current = 0;
-    if (!repository.endsWith(d->gitPostFix))
+    if (repository.isEmpty())
         return QStringList();
      const QStringList branches = Internal::GitPlugin::instance()->gitClient()->synchronousRepositoryBranches(repository);
      *current = branches.indexOf(QLatin1String("master"));
diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index bb89ffdc3c1..b378acbb6bc 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -66,6 +66,7 @@ GitEditor::GitEditor(const VCSBase::VCSBaseEditorParameters *type,
     QTC_ASSERT(m_changeNumberPattern8.isValid(), return);
     QTC_ASSERT(m_changeNumberPattern40.isValid(), return);
     setAnnotateRevisionTextFormat(tr("Blame %1"));
+    setAnnotatePreviousRevisionTextFormat(tr("Blame parent revision %1"));
     if (Git::Constants::debug)
         qDebug() << "GitEditor::GitEditor" << type->type << type->id;
 }
diff --git a/src/plugins/mercurial/mercurialeditor.cpp b/src/plugins/mercurial/mercurialeditor.cpp
index e38d30b886e..061730eec27 100644
--- a/src/plugins/mercurial/mercurialeditor.cpp
+++ b/src/plugins/mercurial/mercurialeditor.cpp
@@ -55,6 +55,7 @@ MercurialEditor::MercurialEditor(const VCSBase::VCSBaseEditorParameters *type, Q
         diffIdentifier(QLatin1String(Constants::DIFFIDENTIFIER))
 {
     setAnnotateRevisionTextFormat(tr("Annotate %1"));
+    setAnnotatePreviousRevisionTextFormat(tr("Annotate parent revision %1"));
 }
 
 QSet<QString> MercurialEditor::annotationChanges() const
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index af184590093..83f7d7938a8 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -158,6 +158,7 @@ struct VCSBaseEditorPrivate
     QList<int> m_diffSections; // line number where this section starts
     int m_cursorLine;
     QString m_annotateRevisionTextFormat;
+    QString m_annotatePreviousRevisionTextFormat;
     QString m_copyRevisionTextFormat;
     bool m_fileLogAnnotateEnabled;
 };
@@ -246,6 +247,16 @@ void VCSBaseEditor::setAnnotateRevisionTextFormat(const QString &f)
     d->m_annotateRevisionTextFormat = f;
 }
 
+QString VCSBaseEditor::annotatePreviousRevisionTextFormat() const
+{
+    return d->m_annotatePreviousRevisionTextFormat;
+}
+
+void VCSBaseEditor::setAnnotatePreviousRevisionTextFormat(const QString &f)
+{
+    d->m_annotatePreviousRevisionTextFormat = f;
+}
+
 QString VCSBaseEditor::copyRevisionTextFormat() const
 {
     return d->m_copyRevisionTextFormat;
@@ -405,9 +416,12 @@ QAction *VCSBaseEditor::createDescribeAction(const QString &change)
     return a;
 }
 
-QAction *VCSBaseEditor::createAnnotateAction(const QString &change)
+QAction *VCSBaseEditor::createAnnotateAction(const QString &change, bool previous)
 {
-    QAction *a = new QAction(d->m_annotateRevisionTextFormat.arg(change), 0);
+    // Use 'previous' format if desired and available, else default to standard.
+    const QString &format =  previous && !d->m_annotatePreviousRevisionTextFormat.isEmpty() ?
+                d->m_annotatePreviousRevisionTextFormat : d->m_annotateRevisionTextFormat;
+    QAction *a = new QAction(format.arg(change), 0);
     a->setData(change);
     connect(a, SIGNAL(triggered()), this, SLOT(slotAnnotateRevision()));
     return a;
@@ -434,7 +448,7 @@ void VCSBaseEditor::contextMenuEvent(QContextMenuEvent *e)
                 menu->addAction(createCopyRevisionAction(d->m_currentChange));
                 menu->addAction(createDescribeAction(d->m_currentChange));
                 if (d->m_fileLogAnnotateEnabled)
-                    menu->addAction(createAnnotateAction(d->m_currentChange));
+                    menu->addAction(createAnnotateAction(d->m_currentChange, false));
                 break;
             case AnnotateOutput: { // Describe current / annotate previous
                     menu->addSeparator();
@@ -444,7 +458,7 @@ void VCSBaseEditor::contextMenuEvent(QContextMenuEvent *e)
                     if (!previousVersions.isEmpty()) {
                         menu->addSeparator();
                         foreach(const QString &pv, previousVersions)
-                            menu->addAction(createAnnotateAction(pv));
+                            menu->addAction(createAnnotateAction(pv, true));
                     } // has previous versions
                 }
                 break;
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index 19aa82ab7af..f03a83554b3 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -119,6 +119,11 @@ public:
     QString annotateRevisionTextFormat() const;
     void setAnnotateRevisionTextFormat(const QString &);
 
+    // Format for "Annotate Previous" revision menu entries. Should contain '%1" placeholder.
+    // Defaults to "annotateRevisionTextFormat" if unset.
+    QString annotatePreviousRevisionTextFormat() const;
+    void setAnnotatePreviousRevisionTextFormat(const QString &);
+
     // Format for "Copy" revision menu entries. Should contain '%1" placeholder
     QString copyRevisionTextFormat() const;
     void setCopyRevisionTextFormat(const QString &);
@@ -230,7 +235,7 @@ private:
 
     void jumpToChangeFromDiff(QTextCursor cursor);
     QAction *createDescribeAction(const QString &change);
-    QAction *createAnnotateAction(const QString &change);
+    QAction *createAnnotateAction(const QString &change, bool previous = false);
     QAction *createCopyRevisionAction(const QString &change);
 
     VCSBaseEditorPrivate *d;
-- 
GitLab