From bdfa995e0b0221b8843146b3c7974e12c5eacd1b Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Wed, 12 Jan 2011 16:29:56 +0100
Subject: [PATCH] Fix git show using the default format

Fix git show using the default format the first time it gets used.

Task-number: QTCREATORBUG-3412
---
 src/plugins/git/gitclient.cpp | 91 +++++++++++++++++++++--------------
 1 file changed, 54 insertions(+), 37 deletions(-)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 2ffedee11fb..0c211e2410e 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -105,13 +105,12 @@ public:
                                const QString &directory,
                                const QStringList &args) :
         BaseGitArgumentsWidget(settings, client, directory, args),
-        m_patience(0),
-        m_ignoreSpaces(0)
+        m_patience(new QToolButton),
+        m_ignoreSpaces(new QToolButton)
     {
         QHBoxLayout * layout = new QHBoxLayout(this);
         layout->setContentsMargins(3, 0, 3, 0);
 
-        m_patience = new QToolButton;
         m_patience->setToolTip(tr("Use the patience algorithmn for calculating the diff"));
         m_patience->setText(tr("Patience"));
         layout->addWidget(m_patience);
@@ -119,27 +118,12 @@ public:
         m_patience->setChecked(m_settings->diffPatience);
         connect(m_patience, SIGNAL(toggled(bool)), this, SLOT(testForArgumentsChanged()));
 
-        m_ignoreSpaces = new QToolButton;
-        m_ignoreSpaces->setToolTip(tr("Ignore whitespaces only changes"));
+        m_ignoreSpaces->setToolTip(tr("Ignore whitespace only changes"));
         m_ignoreSpaces->setText(tr("Ignore Whitespace"));
         layout->addWidget(m_ignoreSpaces);
         m_ignoreSpaces->setCheckable(true);
         m_ignoreSpaces->setChecked(m_settings->ignoreSpaceChangesInDiff);
         connect(m_ignoreSpaces, SIGNAL(toggled(bool)), this, SLOT(testForArgumentsChanged()));
-
-        m_prettyFormat = new QComboBox;
-        m_prettyFormat->setToolTip(tr("Select the pretty printing format"));
-        m_prettyFormat->addItem(tr("oneline"), QLatin1String("oneline"));
-        m_prettyFormat->addItem(tr("short"), QLatin1String("short"));
-        m_prettyFormat->addItem(tr("medium"), QLatin1String("medium"));
-        m_prettyFormat->addItem(tr("full"), QLatin1String("full"));
-        m_prettyFormat->addItem(tr("fuller"), QLatin1String("fuller"));
-        m_prettyFormat->addItem(tr("email"), QLatin1String("email"));
-        m_prettyFormat->addItem(tr("raw"), QLatin1String("raw"));
-        layout->addWidget(m_prettyFormat);
-        m_prettyFormat->setCurrentIndex(m_settings->showPrettyFormat);
-        m_prettyFormat->setVisible(false);
-        connect(m_prettyFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(testForArgumentsChanged()));
     }
 
     QStringList arguments() const
@@ -147,9 +131,7 @@ public:
         QStringList args;
         foreach (const QString &arg, m_diffArgs) {
             if (arg == QLatin1String("--patience")
-                    || arg == QLatin1String("--ignore-space-change")
-                    || arg.startsWith(QLatin1String("--pretty="))
-                    || arg.startsWith(QLatin1String("--format=")))
+                    || arg == QLatin1String("--ignore-space-change"))
                 continue;
             args.append(arg);
         }
@@ -158,10 +140,6 @@ public:
             args.prepend(QLatin1String("--patience"));
         if (m_ignoreSpaces->isChecked() && m_ignoreSpaces->isVisible())
             args.prepend(QLatin1String("--ignore-space-change"));
-        if (m_prettyFormat->isVisible()) {
-            args.prepend(QString::fromLatin1("--pretty=")
-                         + m_prettyFormat->itemData(m_prettyFormat->currentIndex()).toString());
-        }
 
         return args;
     }
@@ -169,7 +147,6 @@ public:
     void testForArgumentsChanged() {
         m_settings->diffPatience = m_patience->isChecked();
         m_settings->ignoreSpaceChangesInDiff = m_ignoreSpaces->isChecked();
-        m_settings->showPrettyFormat = m_prettyFormat->currentIndex();
 
         QStringList newArguments = arguments();
 
@@ -183,7 +160,6 @@ public:
 protected:
     QToolButton *m_patience;
     QToolButton *m_ignoreSpaces;
-    QComboBox *m_prettyFormat;
 };
 
 class GitCommitDiffArgumentsWidget : public BaseGitDiffArgumentsWidget
@@ -246,18 +222,59 @@ private:
     const QString m_branchName;
 };
 
-class GitShowArgumentsWidget : public BaseGitDiffArgumentsWidget
+class GitShowArgumentsWidget : public Git::Internal::BaseGitArgumentsWidget
 {
 public:
     GitShowArgumentsWidget(Git::Internal::GitSettings *settings,
-                           Git::Internal::GitClient *client, const QString &directory,
-                           const QStringList &args, const QString &id) :
-        BaseGitDiffArgumentsWidget(settings, client, directory, args),
+                           Git::Internal::GitClient *client,
+                           const QString &directory,
+                           const QStringList &args,
+                           const QString &id) :
+        BaseGitArgumentsWidget(settings, client, directory, args),
+        m_prettyFormat(new QComboBox),
         m_id(id)
     {
-        m_patience->setVisible(false);
-        m_ignoreSpaces->setVisible(false);
-        m_prettyFormat->setVisible(true);
+        QHBoxLayout *layout = new QHBoxLayout(this);
+        layout->setContentsMargins(3, 0, 3, 0);
+
+        m_prettyFormat->setToolTip(tr("Select the pretty printing format"));
+        m_prettyFormat->addItem(tr("oneline"), QLatin1String("oneline"));
+        m_prettyFormat->addItem(tr("short"), QLatin1String("short"));
+        m_prettyFormat->addItem(tr("medium"), QLatin1String("medium"));
+        m_prettyFormat->addItem(tr("full"), QLatin1String("full"));
+        m_prettyFormat->addItem(tr("fuller"), QLatin1String("fuller"));
+        m_prettyFormat->addItem(tr("email"), QLatin1String("email"));
+        m_prettyFormat->addItem(tr("raw"), QLatin1String("raw"));
+        layout->addWidget(m_prettyFormat);
+        m_prettyFormat->setCurrentIndex(m_settings->showPrettyFormat);
+        connect(m_prettyFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(testForArgumentsChanged()));
+    }
+
+    QStringList arguments() const
+    {
+        QStringList args;
+        foreach (const QString &arg, m_diffArgs) {
+            if (arg.startsWith(QLatin1String("--pretty=")) || arg.startsWith(QLatin1String("--format=")))
+                continue;
+            args.append(arg);
+        }
+
+        args.prepend(QString::fromLatin1("--pretty=")
+                     + m_prettyFormat->itemData(m_prettyFormat->currentIndex()).toString());
+
+        return args;
+    }
+
+    void testForArgumentsChanged() {
+        m_settings->showPrettyFormat = m_prettyFormat->currentIndex();
+
+        QStringList newArguments = arguments();
+
+        if (newArguments == m_diffArgs)
+            return;
+
+        m_diffArgs = newArguments;
+        redoCommand();
     }
 
     void redoCommand()
@@ -266,10 +283,10 @@ public:
     }
 
 private:
-    const QString m_id;
+    QComboBox *m_prettyFormat;
+    QString m_id;
 };
 
-
 class GitBlameArgumentsWidget : public Git::Internal::BaseGitArgumentsWidget
 {
 public:
-- 
GitLab