Git: Do not display invalid commit as blame candidate

Change-Id: Ia08775b2e4364f405d223a9b49971ae70c04965a
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
Orgad Shaneh
2012-07-19 23:02:37 +03:00
committed by Tobias Hunger
parent 16a813694f
commit 12a99d476c
6 changed files with 30 additions and 4 deletions

View File

@@ -1040,9 +1040,8 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
QByteArray outputTextData; QByteArray outputTextData;
QByteArray errorText; QByteArray errorText;
QStringList arguments; QStringList arguments;
if (parents && (revision == QLatin1String("00000000"))) { // Not Committed Yet if (parents && !isValidRevision(revision)) { // Not Committed Yet
parents->clear(); *parents = QStringList(QLatin1String("HEAD"));
parents->append(QLatin1String("HEAD"));
return true; return true;
} }
arguments << QLatin1String("rev-list") << QLatin1String(GitClient::noColorOption) arguments << QLatin1String("rev-list") << QLatin1String(GitClient::noColorOption)
@@ -1450,6 +1449,16 @@ QProcessEnvironment GitClient::processEnvironment() const
return environment; 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 // Synchronous git execution using Utils::SynchronousProcess, with
// log windows updating. // log windows updating.
Utils::SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirectory, Utils::SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirectory,

View File

@@ -220,6 +220,8 @@ public:
QProcessEnvironment processEnvironment() const; QProcessEnvironment processEnvironment() const;
bool isValidRevision(const QString &revision) const;
static QString msgNoChangedFiles(); static QString msgNoChangedFiles();
static const char *noColorOption; static const char *noColorOption;

View File

@@ -250,6 +250,11 @@ QStringList GitEditor::annotationPreviousVersions(const QString &revision) const
return revisions; return revisions;
} }
bool GitEditor::isValidRevision(const QString &revision) const
{
return GitPlugin::instance()->gitClient()->isValidRevision(revision);
}
} // namespace Internal } // namespace Internal
} // namespace Git } // namespace Git

View File

@@ -63,6 +63,7 @@ private:
virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const; virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
virtual QString decorateVersion(const QString &revision) const; virtual QString decorateVersion(const QString &revision) const;
virtual QStringList annotationPreviousVersions(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_changeNumberPattern8;
mutable QRegExp m_changeNumberPattern40; mutable QRegExp m_changeNumberPattern40;

View File

@@ -351,7 +351,8 @@ void ChangeTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType typ
menu->addAction(createCopyRevisionAction(m_currentChange)); menu->addAction(createCopyRevisionAction(m_currentChange));
menu->addAction(createDescribeAction(m_currentChange)); menu->addAction(createDescribeAction(m_currentChange));
menu->addSeparator(); 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); const QStringList previousVersions = editorWidget()->annotationPreviousVersions(m_currentChange);
if (!previousVersions.isEmpty()) { if (!previousVersions.isEmpty()) {
foreach (const QString &pv, previousVersions) foreach (const QString &pv, previousVersions)
@@ -1428,6 +1429,12 @@ QString VcsBaseEditorWidget::decorateVersion(const QString &revision) const
return revision; return revision;
} }
bool VcsBaseEditorWidget::isValidRevision(const QString &revision) const
{
Q_UNUSED(revision);
return true;
}
void VcsBaseEditorWidget::slotApplyDiffChunk() void VcsBaseEditorWidget::slotApplyDiffChunk()
{ {
const QAction *a = qobject_cast<QAction *>(sender()); const QAction *a = qobject_cast<QAction *>(sender());

View File

@@ -252,6 +252,8 @@ private:
// Implement to return the previous version[s] of an annotation change // Implement to return the previous version[s] of an annotation change
// for "Annotate previous version" // for "Annotate previous version"
virtual QStringList annotationPreviousVersions(const QString &revision) const; 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. // cut out chunk and determine file name.
DiffChunk diffChunk(QTextCursor cursor) const; DiffChunk diffChunk(QTextCursor cursor) const;