diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 5d0fe572578c6c17c2f59f4318f2fcaef3a2b513..a7d101681e7c784693042b14927dbb869ca9bc3e 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1040,9 +1040,8 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory, QByteArray outputTextData; QByteArray errorText; QStringList arguments; - if (parents && (revision == QLatin1String("00000000"))) { // Not Committed Yet - parents->clear(); - parents->append(QLatin1String("HEAD")); + if (parents && !isValidRevision(revision)) { // Not Committed Yet + *parents = QStringList(QLatin1String("HEAD")); return true; } arguments << QLatin1String("rev-list") << QLatin1String(GitClient::noColorOption) @@ -1450,6 +1449,16 @@ QProcessEnvironment GitClient::processEnvironment() const return environment; } +bool GitClient::isValidRevision(const QString &revision) const +{ + if (revision.length() < 1) + return false; + for (int i = 0; i < revision.length(); ++i) + if (revision.at(i) != QLatin1Char('0')) + return true; + return false; +} + // Synchronous git execution using Utils::SynchronousProcess, with // log windows updating. Utils::SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirectory, diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 815fa5ff337c73cbb8042d09e4a8e1d5c624370f..616f41cb3ab1830c38bd1add6ba500089d598e8c 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -220,6 +220,8 @@ public: QProcessEnvironment processEnvironment() const; + bool isValidRevision(const QString &revision) const; + static QString msgNoChangedFiles(); static const char *noColorOption; diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 9ea2bae97d942ab3b12dd4596309ab793552a80a..5fd3c6d54755c0b026078168355ce8b3074d8043 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -250,6 +250,11 @@ QStringList GitEditor::annotationPreviousVersions(const QString &revision) const return revisions; } +bool GitEditor::isValidRevision(const QString &revision) const +{ + return GitPlugin::instance()->gitClient()->isValidRevision(revision); +} + } // namespace Internal } // namespace Git diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index 4256de1c4e5999ef0b63b06fe25464a0a5dcd42b..fc5c19c201b80f85c6a780b6c155ac01f52218e8 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -63,6 +63,7 @@ private: virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const; virtual QString decorateVersion(const QString &revision) const; virtual QStringList annotationPreviousVersions(const QString &revision) const; + virtual bool isValidRevision(const QString &revision) const; mutable QRegExp m_changeNumberPattern8; mutable QRegExp m_changeNumberPattern40; diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 2b4eb4e2517cb025420af738ffa53302fd3ab1f2..381fd2f9442be72082b6cdcb1461235882f850e4 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -351,7 +351,8 @@ void ChangeTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType typ menu->addAction(createCopyRevisionAction(m_currentChange)); menu->addAction(createDescribeAction(m_currentChange)); menu->addSeparator(); - menu->addAction(createAnnotateAction(editorWidget()->decorateVersion(m_currentChange), false)); + if (editorWidget()->isValidRevision(m_currentChange)) + menu->addAction(createAnnotateAction(editorWidget()->decorateVersion(m_currentChange), false)); const QStringList previousVersions = editorWidget()->annotationPreviousVersions(m_currentChange); if (!previousVersions.isEmpty()) { foreach (const QString &pv, previousVersions) @@ -1428,6 +1429,12 @@ QString VcsBaseEditorWidget::decorateVersion(const QString &revision) const return revision; } +bool VcsBaseEditorWidget::isValidRevision(const QString &revision) const +{ + Q_UNUSED(revision); + return true; +} + void VcsBaseEditorWidget::slotApplyDiffChunk() { const QAction *a = qobject_cast<QAction *>(sender()); diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index d4ceb847e1c892ec57c63af3f0f1ff9d02b90c35..1b6a82d256cc65ab9bf86f3d976f2509b07d17ac 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -252,6 +252,8 @@ private: // Implement to return the previous version[s] of an annotation change // for "Annotate previous version" virtual QStringList annotationPreviousVersions(const QString &revision) const; + // Implement to validate revisions + virtual bool isValidRevision(const QString &revision) const; // cut out chunk and determine file name. DiffChunk diffChunk(QTextCursor cursor) const;