From 41a9395d21fd8075c8edfb37a06620dad8e47c0f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Wed, 15 Jul 2009 15:18:03 +0200 Subject: [PATCH] Optionally shorten git blame output by removing date+line number. --- src/plugins/git/gitclient.cpp | 2 +- src/plugins/git/giteditor.cpp | 43 ++++++++++++++++++++++++++++++++ src/plugins/git/giteditor.h | 3 +++ src/plugins/git/gitsettings.cpp | 9 +++++-- src/plugins/git/gitsettings.h | 1 + src/plugins/git/settingspage.cpp | 4 ++- src/plugins/git/settingspage.ui | 7 ++++++ 7 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 74841b74b1b..0486522fd1e 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -493,7 +493,7 @@ GitCommand *GitClient::createCommand(const QString &workingDirectory, } } else { QTC_ASSERT(editor, /**/); - connect(command, SIGNAL(outputData(QByteArray)), editor, SLOT(setPlainTextData(QByteArray))); + connect(command, SIGNAL(outputData(QByteArray)), editor, SLOT(setPlainTextDataFiltered(QByteArray))); } if (outputWindow) diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index bb3c4129930..62fa5688c65 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -33,6 +33,7 @@ #include "gitclient.h" #include "gitconstants.h" #include "gitplugin.h" +#include <QtCore/QTextCodec> #include <coreplugin/editormanager/editormanager.h> #include <utils/qtcassert.h> @@ -141,5 +142,47 @@ QString GitEditor::fileNameFromDiffSpecification(const QTextBlock &inBlock) cons return QString(); } +/* Remove the date specification from annotation, which is tabular: +\code +8ca887aa (author YYYY-MM-DD HH:MM:SS <offset> <line>)<content> +\endcode */ + +static void removeAnnotationDate(QString *s) +{ + if (s->isEmpty()) + return; + // Get position of date (including blank) and the ')' + const QRegExp isoDatePattern(QLatin1String(" \\d{4}-\\d{2}-\\d{2}")); + Q_ASSERT(isoDatePattern.isValid()); + const int datePos = s->indexOf(isoDatePattern); + const int parenPos = datePos == -1 ? -1 : s->indexOf(QLatin1Char(')')); + if (parenPos == -1) + return; + // In all lines, remove the bit from datePos .. parenPos; + const int dateLength = parenPos - datePos; + const QChar newLine = QLatin1Char('\n'); + for (int pos = 0; pos < s->size(); ) { + if (pos + parenPos >s->size()) // Should not happen + break; + s->remove(pos + datePos, dateLength); + const int nextLinePos = s->indexOf(newLine, pos + datePos); + pos = nextLinePos == -1 ? s->size() : nextLinePos + 1; + } +} + +void GitEditor::setPlainTextDataFiltered(const QByteArray &a) +{ + // If desired, filter out the date from annotation + const bool omitAnnotationDate = contentType() == VCSBase::AnnotateOutput + && GitPlugin::instance()->settings().omitAnnotationDate; + if (omitAnnotationDate) { + QString text = codec()->toUnicode(a); + removeAnnotationDate(&text); + setPlainText(text); + } else { + setPlainTextData(a); + } +} + } // namespace Internal } // namespace Git diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index f87c1ccd480..88e349dd202 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -47,6 +47,9 @@ public: explicit GitEditor(const VCSBase::VCSBaseEditorParameters *type, QWidget *parent); +public slots: + void setPlainTextDataFiltered(const QByteArray &a); + private: virtual QSet<QString> annotationChanges() const; virtual QString changeUnderCursor(const QTextCursor &) const; diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp index f35bf5b7d31..2cda5834184 100644 --- a/src/plugins/git/gitsettings.cpp +++ b/src/plugins/git/gitsettings.cpp @@ -42,6 +42,7 @@ static const char *pathKeyC = "Path"; static const char *logCountKeyC = "LogCount"; static const char *timeoutKeyC = "TimeOut"; static const char *promptToSubmitKeyC = "PromptForSubmit"; +static const char *omitAnnotationDateKeyC = "OmitAnnotationDate"; enum { defaultLogCount = 10 , defaultTimeOut = 30}; @@ -52,7 +53,8 @@ GitSettings::GitSettings() : adoptPath(false), logCount(defaultLogCount), timeout(defaultTimeOut), - promptToSubmit(true) + promptToSubmit(true), + omitAnnotationDate(false) { } @@ -64,6 +66,7 @@ void GitSettings::fromSettings(QSettings *settings) logCount = settings->value(QLatin1String(logCountKeyC), defaultLogCount).toInt(); timeout = settings->value(QLatin1String(timeoutKeyC), defaultTimeOut).toInt(); promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool(); + omitAnnotationDate = settings->value(QLatin1String(omitAnnotationDateKeyC), false).toBool(); settings->endGroup(); } @@ -75,13 +78,15 @@ void GitSettings::toSettings(QSettings *settings) const settings->setValue(QLatin1String(logCountKeyC), logCount); settings->setValue(QLatin1String(timeoutKeyC), timeout); settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit); + settings->setValue(QLatin1String(omitAnnotationDateKeyC), omitAnnotationDate); settings->endGroup(); } bool GitSettings::equals(const GitSettings &s) const { return adoptPath == s.adoptPath && path == s.path && logCount == s.logCount - && timeout == s.timeout && promptToSubmit == s.promptToSubmit; + && timeout == s.timeout && promptToSubmit == s.promptToSubmit + && omitAnnotationDate == s.omitAnnotationDate; } QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h index 666e1483e3a..f65a4906b1f 100644 --- a/src/plugins/git/gitsettings.h +++ b/src/plugins/git/gitsettings.h @@ -56,6 +56,7 @@ struct GitSettings int logCount; int timeout; bool promptToSubmit; + bool omitAnnotationDate; }; inline bool operator==(const GitSettings &p1, const GitSettings &p2) diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp index 2167bafa7ff..9a55e7330cd 100644 --- a/src/plugins/git/settingspage.cpp +++ b/src/plugins/git/settingspage.cpp @@ -54,7 +54,8 @@ GitSettings SettingsPageWidget::settings() const rc.adoptPath = m_ui.environmentGroupBox->isChecked() && !rc.path.isEmpty(); rc.logCount = m_ui.logCountSpinBox->value(); rc.timeout = m_ui.timeoutSpinBox->value(); - rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked(); + rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked(); + rc.omitAnnotationDate = m_ui.omitAnnotationDataCheckBox->isChecked(); return rc; } @@ -65,6 +66,7 @@ void SettingsPageWidget::setSettings(const GitSettings &s) m_ui.logCountSpinBox->setValue(s.logCount); m_ui.timeoutSpinBox->setValue(s.timeout); m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit); + m_ui.omitAnnotationDataCheckBox->setChecked(s.omitAnnotationDate); } void SettingsPageWidget::setSystemPath() diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui index 13884c70d1f..b5fdc24a589 100644 --- a/src/plugins/git/settingspage.ui +++ b/src/plugins/git/settingspage.ui @@ -111,6 +111,13 @@ </property> </widget> </item> + <item row="3" column="0" colspan="2"> + <widget class="QCheckBox" name="omitAnnotationDataCheckBox"> + <property name="text"> + <string>Omit date from annotation output</string> + </property> + </widget> + </item> </layout> </item> <item> -- GitLab