From c55b5b7b3176e5ee01abedafa448868fb6e4c315 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Tue, 5 Jan 2010 15:45:41 +0100
Subject: [PATCH] Git/SVN: Ignore whitespace in annotation/blame (introduce
 setting).

Defaulting to true.

Task-number: QTCREATORBUG-502
---
 src/plugins/git/gitclient.cpp                 |  3 +++
 src/plugins/git/gitsettings.cpp               |  8 ++++++--
 src/plugins/git/gitsettings.h                 |  1 +
 src/plugins/git/settingspage.cpp              |  5 ++++-
 src/plugins/git/settingspage.ui               | 10 ++++++++++
 src/plugins/subversion/settingspage.cpp       |  5 ++++-
 src/plugins/subversion/settingspage.ui        |  7 +++++++
 src/plugins/subversion/subversionplugin.cpp   |  2 ++
 src/plugins/subversion/subversionsettings.cpp |  9 +++++++--
 src/plugins/subversion/subversionsettings.h   |  1 +
 10 files changed, 45 insertions(+), 6 deletions(-)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index c7e4468b7b3..a323454575f 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -302,6 +302,9 @@ void GitClient::blame(const QString &workingDirectory, const QString &fileName,
     if (Git::Constants::debug)
         qDebug() << "blame" << workingDirectory << fileName << lineNumber;
     QStringList arguments(QLatin1String("blame"));
+    arguments << QLatin1String("--root");
+    if (m_plugin->settings().spaceIgnorantBlame)
+        arguments << QLatin1String("-w");
     arguments << QLatin1String("--") << fileName;
 
     const QString kind = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_KIND);
diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp
index cffe8b351a3..0e302d098a5 100644
--- a/src/plugins/git/gitsettings.cpp
+++ b/src/plugins/git/gitsettings.cpp
@@ -43,6 +43,7 @@ static const char *logCountKeyC = "LogCount";
 static const char *timeoutKeyC = "TimeOut";
 static const char *promptToSubmitKeyC = "PromptForSubmit";
 static const char *omitAnnotationDateKeyC = "OmitAnnotationDate";
+static const char *spaceIgnorantBlameKeyC = "SpaceIgnorantBlame";
 
 enum { defaultLogCount =  10 , defaultTimeOut = 30};
 
@@ -54,7 +55,8 @@ GitSettings::GitSettings() :
     logCount(defaultLogCount),
     timeout(defaultTimeOut),
     promptToSubmit(true),
-    omitAnnotationDate(false)
+    omitAnnotationDate(false),
+    spaceIgnorantBlame(true)
 {
 }
 
@@ -67,6 +69,7 @@ void GitSettings::fromSettings(QSettings *settings)
     timeout = settings->value(QLatin1String(timeoutKeyC), defaultTimeOut).toInt();
     promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
     omitAnnotationDate = settings->value(QLatin1String(omitAnnotationDateKeyC), false).toBool();
+    spaceIgnorantBlame = settings->value(QLatin1String(spaceIgnorantBlameKeyC), true).toBool();
     settings->endGroup();
 }
 
@@ -79,6 +82,7 @@ void GitSettings::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(timeoutKeyC), timeout);
     settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
     settings->setValue(QLatin1String(omitAnnotationDateKeyC), omitAnnotationDate);
+    settings->setValue(QLatin1String(spaceIgnorantBlameKeyC), spaceIgnorantBlame);
     settings->endGroup();
 }
 
@@ -86,7 +90,7 @@ bool GitSettings::equals(const GitSettings &s) const
 {
     return adoptPath == s.adoptPath && path == s.path && logCount == s.logCount
            && timeout == s.timeout && promptToSubmit == s.promptToSubmit
-           && omitAnnotationDate == s.omitAnnotationDate;
+           && omitAnnotationDate == s.omitAnnotationDate && spaceIgnorantBlame == s.spaceIgnorantBlame;
 }
 
 QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h
index a7bc47e6445..e1ca964b8a4 100644
--- a/src/plugins/git/gitsettings.h
+++ b/src/plugins/git/gitsettings.h
@@ -57,6 +57,7 @@ struct GitSettings
     int timeout;
     bool promptToSubmit;
     bool omitAnnotationDate;
+    bool spaceIgnorantBlame;
 };
 
 inline bool operator==(const GitSettings &p1, const GitSettings &p2)
diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp
index 27abea353cf..5cddbeb22ac 100644
--- a/src/plugins/git/settingspage.cpp
+++ b/src/plugins/git/settingspage.cpp
@@ -58,6 +58,7 @@ GitSettings SettingsPageWidget::settings() const
     rc.timeout = m_ui.timeoutSpinBox->value();
     rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
     rc.omitAnnotationDate = m_ui.omitAnnotationDataCheckBox->isChecked();
+    rc.spaceIgnorantBlame = m_ui.spaceIgnorantBlameCheckBox->isChecked();
     return rc;
 }
 
@@ -69,6 +70,7 @@ void SettingsPageWidget::setSettings(const GitSettings &s)
     m_ui.timeoutSpinBox->setValue(s.timeout);
     m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
     m_ui.omitAnnotationDataCheckBox->setChecked(s.omitAnnotationDate);
+    m_ui.spaceIgnorantBlameCheckBox->setChecked(s.spaceIgnorantBlame);
 }
 
 void SettingsPageWidget::setSystemPath()
@@ -83,7 +85,8 @@ QString SettingsPageWidget::searchKeywords() const
         << ' ' << m_ui.timeoutLabel->text()
         << ' ' << m_ui.promptToSubmitCheckBox->text()
         << ' ' << m_ui.omitAnnotationDataCheckBox->text()
-        << ' ' << m_ui.environmentGroupBox->title();
+        << ' ' << m_ui.environmentGroupBox->title()
+        << ' ' << m_ui.spaceIgnorantBlameCheckBox->text();
     rc.remove(QLatin1Char('&'));
     return rc;
 }
diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui
index 4432b6a4458..827beefa2a5 100644
--- a/src/plugins/git/settingspage.ui
+++ b/src/plugins/git/settingspage.ui
@@ -71,6 +71,9 @@
       <string>Miscellaneous</string>
      </property>
      <layout class="QFormLayout" name="formLayout">
+      <property name="fieldGrowthPolicy">
+       <enum>QFormLayout::ExpandingFieldsGrow</enum>
+      </property>
       <item row="0" column="0">
        <widget class="QLabel" name="logCountLabel">
         <property name="text">
@@ -125,6 +128,13 @@
         </property>
        </widget>
       </item>
+      <item row="4" column="0" colspan="2">
+       <widget class="QCheckBox" name="spaceIgnorantBlameCheckBox">
+        <property name="text">
+         <string>Ignore whitespace changes in annotation</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp
index 42da8395b31..5976c9bdd98 100644
--- a/src/plugins/subversion/settingspage.cpp
+++ b/src/plugins/subversion/settingspage.cpp
@@ -62,6 +62,7 @@ SubversionSettings SettingsPageWidget::settings() const
     if (rc.user.isEmpty())
         rc.useAuthentication = false;
     rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
+    rc.spaceIgnorantAnnotation = m_ui.spaceIgnorantAnnotationCheckBox->isChecked();
     return rc;
 }
 
@@ -73,6 +74,7 @@ void SettingsPageWidget::setSettings(const SubversionSettings &s)
     m_ui.userGroupBox->setChecked(s.useAuthentication);
     m_ui.timeOutSpinBox->setValue(s.timeOutS);
     m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
+    m_ui.spaceIgnorantAnnotationCheckBox->setChecked(s.spaceIgnorantAnnotation);
 }
 
 QString SettingsPageWidget::searchKeywords() const
@@ -81,7 +83,8 @@ QString SettingsPageWidget::searchKeywords() const
     QTextStream(&rc) << m_ui.commandLabel->text()
             << ' ' << m_ui.usernameLabel->text()
             << ' ' << m_ui.passwordLabel->text()
-            << ' ' << m_ui.userGroupBox->title();
+            << ' ' << m_ui.userGroupBox->title()
+            << ' ' << m_ui.spaceIgnorantAnnotationCheckBox->text();
     rc.remove(QLatin1Char('&'));
     return rc;
 }
diff --git a/src/plugins/subversion/settingspage.ui b/src/plugins/subversion/settingspage.ui
index efbe0cce866..d74fa3c8396 100644
--- a/src/plugins/subversion/settingspage.ui
+++ b/src/plugins/subversion/settingspage.ui
@@ -99,6 +99,13 @@
         </property>
        </widget>
       </item>
+      <item row="2" column="0" colspan="2">
+       <widget class="QCheckBox" name="spaceIgnorantAnnotationCheckBox">
+        <property name="text">
+         <string>Ignore whitespace changes in annotation</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index e648f3163b1..57ccc8f6078 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -717,6 +717,8 @@ void SubversionPlugin::annotate(const QString &workingDir, const QString &file)
     QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file);
 
     QStringList args(QLatin1String("annotate"));
+    if (m_settings.spaceIgnorantAnnotation)
+        args << QLatin1String("-x") << QLatin1String("-uw");
     args.push_back(QLatin1String("-v"));
     args.append(QDir::toNativeSeparators(file));
 
diff --git a/src/plugins/subversion/subversionsettings.cpp b/src/plugins/subversion/subversionsettings.cpp
index 6ebc07c1e32..dd6bdc122de 100644
--- a/src/plugins/subversion/subversionsettings.cpp
+++ b/src/plugins/subversion/subversionsettings.cpp
@@ -42,6 +42,7 @@ static const char *userNameOptionC = "--username";
 static const char *passwordOptionC = "--password";
 static const char *promptToSubmitKeyC = "PromptForSubmit";
 static const char *timeOutKeyC = "TimeOut";
+static const char *spaceIgnorantAnnotationKeyC = "SpaceIgnorantAnnotation";
 
 enum { defaultTimeOutS = 30 };
 
@@ -61,7 +62,8 @@ SubversionSettings::SubversionSettings() :
     svnCommand(defaultCommand()),
     useAuthentication(false),
     timeOutS(defaultTimeOutS),
-    promptToSubmit(true)
+    promptToSubmit(true),
+    spaceIgnorantAnnotation(true)
 {
 }
 
@@ -74,6 +76,7 @@ void SubversionSettings::fromSettings(QSettings *settings)
     password =  settings->value(QLatin1String(passwordKeyC), QString()).toString();
     timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
     promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
+    spaceIgnorantAnnotation = settings->value(QLatin1String(spaceIgnorantAnnotationKeyC), true).toBool();
     settings->endGroup();
 }
 
@@ -86,6 +89,7 @@ void SubversionSettings::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(passwordKeyC), password);
     settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
     settings->setValue(QLatin1String(timeOutKeyC), timeOutS);
+    settings->setValue(QLatin1String(spaceIgnorantAnnotationKeyC), spaceIgnorantAnnotation);
     settings->endGroup();
 }
 
@@ -96,7 +100,8 @@ bool SubversionSettings::equals(const SubversionSettings &s) const
         && user              == s.user
         && password          == s.password
         && timeOutS          == s.timeOutS
-        && promptToSubmit    == s.promptToSubmit;
+        && promptToSubmit    == s.promptToSubmit
+        && spaceIgnorantAnnotation == s.spaceIgnorantAnnotation;
 }
 
 QStringList SubversionSettings::addOptions(const QStringList &args) const
diff --git a/src/plugins/subversion/subversionsettings.h b/src/plugins/subversion/subversionsettings.h
index cec86f83cfb..4b485ce8720 100644
--- a/src/plugins/subversion/subversionsettings.h
+++ b/src/plugins/subversion/subversionsettings.h
@@ -64,6 +64,7 @@ struct SubversionSettings
     QString password;
     int timeOutS;
     bool promptToSubmit;
+    bool spaceIgnorantAnnotation;
 };
 
 inline bool operator==(const SubversionSettings &p1, const SubversionSettings &p2)
-- 
GitLab