diff --git a/src/plugins/bazaar/annotationhighlighter.cpp b/src/plugins/bazaar/annotationhighlighter.cpp index 111daff29e9..1bad07d7c28 100644 --- a/src/plugins/bazaar/annotationhighlighter.cpp +++ b/src/plugins/bazaar/annotationhighlighter.cpp @@ -40,7 +40,7 @@ using namespace Bazaar; BazaarAnnotationHighlighter::BazaarAnnotationHighlighter(const ChangeNumbers &changeNumbers, QTextDocument *document) : VCSBase::BaseAnnotationHighlighter(changeNumbers, document), - m_changeset(QLatin1String(Constants::CHANGESETID12)) + m_changeset(QLatin1String(Constants::CHANGESET_ID)) { } diff --git a/src/plugins/bazaar/bazaareditor.cpp b/src/plugins/bazaar/bazaareditor.cpp index 71db6621ed5..85440388b66 100644 --- a/src/plugins/bazaar/bazaareditor.cpp +++ b/src/plugins/bazaar/bazaareditor.cpp @@ -38,8 +38,10 @@ #include "bazaarclient.h" #include +#include #include +#include #include #include #include @@ -47,15 +49,14 @@ #include #include +# define BZR_CHANGE_PATTERN "[0-9]+" + using namespace Bazaar::Internal; using namespace Bazaar; BazaarEditor::BazaarEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget *parent) : VCSBase::VCSBaseEditorWidget(type, parent), - m_exactIdentifier12(QLatin1String(Constants::CHANGEIDEXACT12)), - m_exactIdentifier40(QLatin1String(Constants::CHANGEIDEXACT40)), - m_changesetIdentifier12(QLatin1String(Constants::CHANGESETID12)), - m_changesetIdentifier40(QLatin1String(Constants::CHANGESETID40)), + m_exactChangesetId(QLatin1String(Constants::CHANGESET_ID_EXACT)), m_diffIdentifier(QLatin1String(Constants::DIFFIDENTIFIER)) { setAnnotateRevisionTextFormat(tr("Annotate %1")); @@ -65,16 +66,22 @@ BazaarEditor::BazaarEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget QSet BazaarEditor::annotationChanges() const { QSet changes; - const QString data = toPlainText(); - if (data.isEmpty()) + const QString txt = toPlainText(); + if (txt.isEmpty()) return changes; - int position = 0; - while ((position = m_changesetIdentifier12.indexIn(data, position)) != -1) { - changes.insert(m_changesetIdentifier12.cap(1)); - position += m_changesetIdentifier12.matchedLength(); + QRegExp changeNumRx(QLatin1String("^("BZR_CHANGE_PATTERN") ")); + QTC_ASSERT(changeNumRx.isValid(), return changes); + if (changeNumRx.indexIn(txt) != -1) { + 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; } @@ -84,9 +91,7 @@ QString BazaarEditor::changeUnderCursor(const QTextCursor &cursorIn) const cursor.select(QTextCursor::WordUnderCursor); if (cursor.hasSelection()) { const QString change = cursor.selectedText(); - if (m_exactIdentifier12.exactMatch(change)) - return change; - if (m_exactIdentifier40.exactMatch(change)) + if (m_exactChangesetId.exactMatch(change)) return change; } return QString(); diff --git a/src/plugins/bazaar/bazaareditor.h b/src/plugins/bazaar/bazaareditor.h index 720a4524f83..76ec91bda1d 100644 --- a/src/plugins/bazaar/bazaareditor.h +++ b/src/plugins/bazaar/bazaareditor.h @@ -54,10 +54,7 @@ private: virtual VCSBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet &changes) const; virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const; - const QRegExp m_exactIdentifier12; - const QRegExp m_exactIdentifier40; - const QRegExp m_changesetIdentifier12; - const QRegExp m_changesetIdentifier40; + const QRegExp m_exactChangesetId; const QRegExp m_diffIdentifier; }; diff --git a/src/plugins/bazaar/constants.h b/src/plugins/bazaar/constants.h index 216306e6826..507ce79acb1 100644 --- a/src/plugins/bazaar/constants.h +++ b/src/plugins/bazaar/constants.h @@ -42,10 +42,8 @@ const char * const BAZAARREPO = ".bzr"; const char * const BAZAARDEFAULT = "bzr"; //changeset identifiers -const char * const CHANGESETID12 = " ([a-f0-9]{12,12}) "; //match 12 hex chars and capture -const char * const CHANGESETID40 = " ([a-f0-9]{40,40}) "; -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 CHANGESET_ID = "([0-9]+)"; // match and capture +const char * const CHANGESET_ID_EXACT = "[0-9]+"; // match const char * const DIFFIDENTIFIER = "^[-+]{3,3} [ab]{1,1}.*"; // match e.g. +++ b/filename //BaseEditorParameters