diff --git a/src/plugins/cvs/cvseditor.cpp b/src/plugins/cvs/cvseditor.cpp index 38c1363aa60d3ae211a2f1a734949c431ec1cb8a..03f81adb59f1ce0b5acbe333314cf82970ddf600 100644 --- a/src/plugins/cvs/cvseditor.cpp +++ b/src/plugins/cvs/cvseditor.cpp @@ -48,9 +48,11 @@ namespace Internal { CVSEditor::CVSEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget *parent) : VCSBase::VCSBaseEditor(type, parent), - m_revisionPattern(QLatin1String(CVS_REVISION_AT_START_PATTERN".*$")) + m_revisionAnnotationPattern(QLatin1String(CVS_REVISION_AT_START_PATTERN".*$")), + m_revisionLogPattern(QLatin1String("^revision *("CVS_REVISION_PATTERN")$")) { - QTC_ASSERT(m_revisionPattern.isValid(), return); + QTC_ASSERT(m_revisionAnnotationPattern.isValid(), return); + QTC_ASSERT(m_revisionLogPattern.isValid(), return); } QSet<QString> CVSEditor::annotationChanges() const @@ -79,16 +81,31 @@ QSet<QString> CVSEditor::annotationChanges() const QString CVSEditor::changeUnderCursor(const QTextCursor &c) const { - - // Check for a revision number at the beginning of the line. - // Note that "cursor.select(QTextCursor::WordUnderCursor)" will - // only select the part up until the dot. - // Check if we are at the beginning of a line within a reasonable offset. - const QTextBlock block = c.block(); - if (c.atBlockStart() || (c.position() - block.position() < 3)) { - const QString line = block.text(); - if (m_revisionPattern.exactMatch(line)) - return m_revisionPattern.cap(1); + // Try to match "1.1" strictly: + // 1) Annotation: Check for a revision number at the beginning of the line. + // Note that "cursor.select(QTextCursor::WordUnderCursor)" will + // only select the part up until the dot. + // Check if we are at the beginning of a line within a reasonable offset. + // 2) Log: check for lines like "revision 1.1", cursor past "revision" + switch (contentType()) { + case VCSBase::RegularCommandOutput: + case VCSBase::DiffOutput: + break; + case VCSBase::AnnotateOutput: { + const QTextBlock block = c.block(); + if (c.atBlockStart() || (c.position() - block.position() < 3)) { + const QString line = block.text(); + if (m_revisionAnnotationPattern.exactMatch(line)) + return m_revisionAnnotationPattern.cap(1); + } + } + break; + case VCSBase::LogOutput: { + const QTextBlock block = c.block(); + if (c.position() - block.position() > 8 && m_revisionLogPattern.exactMatch(block.text())) + return m_revisionLogPattern.cap(1); + } + break; } return QString(); } diff --git a/src/plugins/cvs/cvseditor.h b/src/plugins/cvs/cvseditor.h index a3d38bfff4b1c02cf177a864c8d6a331b8fe856b..a9bb40eaf5008042db1e7e382b1a42b210139016 100644 --- a/src/plugins/cvs/cvseditor.h +++ b/src/plugins/cvs/cvseditor.h @@ -59,7 +59,8 @@ private: virtual VCSBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes) const; virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const; - const QRegExp m_revisionPattern; + const QRegExp m_revisionAnnotationPattern; + const QRegExp m_revisionLogPattern; QString m_diffBaseDir; }; diff --git a/src/plugins/vcsbase/vcsbasesettingspage.ui b/src/plugins/vcsbase/vcsbasesettingspage.ui index 78a1326291cde949836eae4a2dd39daa7e770f11..a535a107069f547ad6bb7ec070151d3d6c33d9c4 100644 --- a/src/plugins/vcsbase/vcsbasesettingspage.ui +++ b/src/plugins/vcsbase/vcsbasesettingspage.ui @@ -65,6 +65,9 @@ </item> <item> <layout class="QFormLayout" name="formLayout"> + <property name="rowWrapPolicy"> + <enum>QFormLayout::WrapLongRows</enum> + </property> <item row="0" column="0"> <widget class="QLabel" name="submitMessageCheckScriptLabel"> <property name="toolTip"> @@ -109,19 +112,6 @@ name <email> alias <email></string> </item> </layout> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> </layout> </widget> </item>