summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/git/gitclient.cpp2
-rw-r--r--src/plugins/git/giteditor.cpp43
-rw-r--r--src/plugins/git/giteditor.h3
-rw-r--r--src/plugins/git/gitsettings.cpp9
-rw-r--r--src/plugins/git/gitsettings.h1
-rw-r--r--src/plugins/git/settingspage.cpp4
-rw-r--r--src/plugins/git/settingspage.ui7
7 files changed, 65 insertions, 4 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 74841b74b1..0486522fd1 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 bb3c412993..62fa5688c6 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 f87c1ccd48..88e349dd20 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 f35bf5b7d3..2cda583418 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 666e1483e3..f65a4906b1 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 2167bafa7f..9a55e7330c 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 13884c70d1..b5fdc24a58 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>