From bcd8c02aea2e8384293b8dc0e1a69135a088d33c Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Sun, 2 Jun 2013 19:41:58 +0300
Subject: [PATCH] Git: Prevent or close fixup editor if no local commits are
 found

Change-Id: I546241fb3531cbc542b97d6d0f53382c9225dcf4
Reviewed-by: Petar Perisin <petar.perisin@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/git/gitclient.cpp       | 15 +++++++++++++++
 src/plugins/git/gitclient.h         |  1 +
 src/plugins/git/logchangedialog.cpp |  3 +--
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 747ad6e4cbb..f51d2f6d8b7 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2521,6 +2521,16 @@ bool GitClient::getCommitData(const QString &workingDirectory,
 
     // Run status. Note that it has exitcode 1 if there are no added files.
     QString output;
+    if (commitData.commitType == FixupCommit) {
+        QStringList arguments;
+        arguments << QLatin1String("HEAD") << QLatin1String("--not")
+                  << QLatin1String("--remotes") << QLatin1String("-n1");
+        synchronousLog(repoDirectory, arguments, &output, errorMessage);
+        if (output.isEmpty()) {
+            *errorMessage = msgNoCommits(false);
+            return false;
+        }
+    }
     const StatusResult status = gitStatus(repoDirectory, ShowAll, &output, errorMessage);
     switch (status) {
     case  StatusChanged:
@@ -3066,6 +3076,11 @@ QString GitClient::msgNoChangedFiles()
     return tr("There are no modified files.");
 }
 
+QString GitClient::msgNoCommits(bool includeRemote)
+{
+    return includeRemote ? tr("No commits were found") : tr("No local commits were found");
+}
+
 void GitClient::stashPop(const QString &workingDirectory, const QString &stash)
 {
     QStringList arguments(QLatin1String("stash"));
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 4b230594b62..02fb6f1675f 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -316,6 +316,7 @@ public:
     void handleMergeConflicts(const QString &workingDir, const QString &commit, const QString &abortCommand);
 
     static QString msgNoChangedFiles();
+    static QString msgNoCommits(bool includeRemote);
 
     static const char *noColorOption;
     static const char *decorateOption;
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index 373e8f37e87..4f11be1d115 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -73,8 +73,7 @@ bool LogChangeWidget::init(const QString &repository, const QString &commit, boo
         return false;
     if (!m_model->rowCount()) {
         VcsBase::VcsBaseOutputWindow::instance()->appendError(
-                    includeRemote ? tr("No commits were found")
-                                  : tr("No local commits were found"));
+                    GitPlugin::instance()->gitClient()->msgNoCommits(includeRemote));
         return false;
     }
     selectionModel()->select(m_model->index(0, 0),
-- 
GitLab