Bazaar: fix jumping to the changes from the blame view

Merge-request: 273
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
cerf
2011-03-14 17:52:50 +01:00
committed by Tobias Hunger
parent f5096f4394
commit 2c088f06a0
4 changed files with 23 additions and 23 deletions

View File

@@ -40,7 +40,7 @@ using namespace Bazaar;
BazaarAnnotationHighlighter::BazaarAnnotationHighlighter(const ChangeNumbers &changeNumbers, BazaarAnnotationHighlighter::BazaarAnnotationHighlighter(const ChangeNumbers &changeNumbers,
QTextDocument *document) QTextDocument *document)
: VCSBase::BaseAnnotationHighlighter(changeNumbers, document), : VCSBase::BaseAnnotationHighlighter(changeNumbers, document),
m_changeset(QLatin1String(Constants::CHANGESETID12)) m_changeset(QLatin1String(Constants::CHANGESET_ID))
{ {
} }

View File

@@ -38,8 +38,10 @@
#include "bazaarclient.h" #include "bazaarclient.h"
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <utils/qtcassert.h>
#include <vcsbase/diffhighlighter.h> #include <vcsbase/diffhighlighter.h>
#include <QtCore/QRegExp>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtGui/QTextCursor> #include <QtGui/QTextCursor>
#include <QtGui/QTextBlock> #include <QtGui/QTextBlock>
@@ -47,15 +49,14 @@
#include <QtCore/QFileInfo> #include <QtCore/QFileInfo>
#include <QtCore/QDebug> #include <QtCore/QDebug>
# define BZR_CHANGE_PATTERN "[0-9]+"
using namespace Bazaar::Internal; using namespace Bazaar::Internal;
using namespace Bazaar; using namespace Bazaar;
BazaarEditor::BazaarEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget *parent) BazaarEditor::BazaarEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget *parent)
: VCSBase::VCSBaseEditorWidget(type, parent), : VCSBase::VCSBaseEditorWidget(type, parent),
m_exactIdentifier12(QLatin1String(Constants::CHANGEIDEXACT12)), m_exactChangesetId(QLatin1String(Constants::CHANGESET_ID_EXACT)),
m_exactIdentifier40(QLatin1String(Constants::CHANGEIDEXACT40)),
m_changesetIdentifier12(QLatin1String(Constants::CHANGESETID12)),
m_changesetIdentifier40(QLatin1String(Constants::CHANGESETID40)),
m_diffIdentifier(QLatin1String(Constants::DIFFIDENTIFIER)) m_diffIdentifier(QLatin1String(Constants::DIFFIDENTIFIER))
{ {
setAnnotateRevisionTextFormat(tr("Annotate %1")); setAnnotateRevisionTextFormat(tr("Annotate %1"));
@@ -65,16 +66,22 @@ BazaarEditor::BazaarEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget
QSet<QString> BazaarEditor::annotationChanges() const QSet<QString> BazaarEditor::annotationChanges() const
{ {
QSet<QString> changes; QSet<QString> changes;
const QString data = toPlainText(); const QString txt = toPlainText();
if (data.isEmpty()) if (txt.isEmpty())
return changes; return changes;
int position = 0; QRegExp changeNumRx(QLatin1String("^("BZR_CHANGE_PATTERN") "));
while ((position = m_changesetIdentifier12.indexIn(data, position)) != -1) { QTC_ASSERT(changeNumRx.isValid(), return changes);
changes.insert(m_changesetIdentifier12.cap(1)); if (changeNumRx.indexIn(txt) != -1) {
position += m_changesetIdentifier12.matchedLength(); changes.insert(changeNumRx.cap(1));
changeNumRx.setPattern(QLatin1String("\n("BZR_CHANGE_PATTERN") "));
QTC_ASSERT(changeNumRx.isValid(), return changes);
int pos = 0;
while ((pos = changeNumRx.indexIn(txt, pos)) != -1) {
pos += changeNumRx.matchedLength();
changes.insert(changeNumRx.cap(1));
}
} }
return changes; return changes;
} }
@@ -84,9 +91,7 @@ QString BazaarEditor::changeUnderCursor(const QTextCursor &cursorIn) const
cursor.select(QTextCursor::WordUnderCursor); cursor.select(QTextCursor::WordUnderCursor);
if (cursor.hasSelection()) { if (cursor.hasSelection()) {
const QString change = cursor.selectedText(); const QString change = cursor.selectedText();
if (m_exactIdentifier12.exactMatch(change)) if (m_exactChangesetId.exactMatch(change))
return change;
if (m_exactIdentifier40.exactMatch(change))
return change; return change;
} }
return QString(); return QString();

View File

@@ -54,10 +54,7 @@ private:
virtual VCSBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes) const; virtual VCSBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes) const;
virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const; virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const;
const QRegExp m_exactIdentifier12; const QRegExp m_exactChangesetId;
const QRegExp m_exactIdentifier40;
const QRegExp m_changesetIdentifier12;
const QRegExp m_changesetIdentifier40;
const QRegExp m_diffIdentifier; const QRegExp m_diffIdentifier;
}; };

View File

@@ -42,10 +42,8 @@ const char * const BAZAARREPO = ".bzr";
const char * const BAZAARDEFAULT = "bzr"; const char * const BAZAARDEFAULT = "bzr";
//changeset identifiers //changeset identifiers
const char * const CHANGESETID12 = " ([a-f0-9]{12,12}) "; //match 12 hex chars and capture const char * const CHANGESET_ID = "([0-9]+)"; // match and capture
const char * const CHANGESETID40 = " ([a-f0-9]{40,40}) "; const char * const CHANGESET_ID_EXACT = "[0-9]+"; // match
const char * const CHANGEIDEXACT12 = "[a-f0-9]{12,12}"; //match 12 hex chars a
const char * const CHANGEIDEXACT40 = "[a-f0-9]{40,40}";
const char * const DIFFIDENTIFIER = "^[-+]{3,3} [ab]{1,1}.*"; // match e.g. +++ b/filename const char * const DIFFIDENTIFIER = "^[-+]{3,3} [ab]{1,1}.*"; // match e.g. +++ b/filename
//BaseEditorParameters //BaseEditorParameters