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