diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index c05af4310c5..21ac311c767 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -312,11 +312,8 @@ void GerritPlugin::push() // QScopedPointer is required to delete the dialog when leaving the function GerritPushDialog dialog(topLevel, m_reviewers, Core::ICore::mainWindow()); - if (!dialog.localChangesFound()) { - QMessageBox::warning(Core::ICore::mainWindow(), tr("No Local Changes"), - tr("Change from HEAD appears to be in remote branch already. Aborting.")); + if (!dialog.localChangesFound()) return; - } if (!dialog.valid()) { QMessageBox::warning(Core::ICore::mainWindow(), tr("Initialization Failed"), diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp index c5c52b602f1..9dc42192dbd 100644 --- a/src/plugins/git/gerrit/gerritpushdialog.cpp +++ b/src/plugins/git/gerrit/gerritpushdialog.cpp @@ -50,28 +50,21 @@ GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &rev m_ui->repositoryLabel->setText(tr("Local repository: %1").arg( QDir::toNativeSeparators(workingDir))); - m_ui->commitView->init(workingDir, QString(), false); + if (!m_ui->commitView->init(workingDir, QString(), false)) + return; + + QString earliestCommit = m_ui->commitView->earliestCommit(); + if (earliestCommit.isEmpty()) + return; + + m_localChangesFound = true; + Git::Internal::GitClient *gitClient = Git::Internal::GitPlugin::instance()->gitClient(); QString output; QString error; QStringList args; - - args << QLatin1String("--no-color") << QLatin1String("--format=%P") - << QLatin1String("HEAD") << QLatin1String("--not")<< QLatin1String("--remotes"); - - if (!gitClient->synchronousLog(m_workingDir, args, &output) || output.isEmpty()) - return; - - output.chop(1); - if (output.isEmpty()) { - return; - } else { - output = output.mid(output.lastIndexOf(QLatin1Char('\n')) + 1); - m_localChangesFound = true; - } - - args.clear(); - args << QLatin1String("--remotes") << QLatin1String("--contains") << output; + args << QLatin1String("--remotes") << QLatin1String("--contains") + << earliestCommit + QLatin1Char('^'); if (!gitClient->synchronousBranchCmd(m_workingDir, args, &output, &error)) return; diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp index 4f11be1d115..bb8f444c9e1 100644 --- a/src/plugins/git/logchangedialog.cpp +++ b/src/plugins/git/logchangedialog.cpp @@ -96,6 +96,16 @@ int LogChangeWidget::commitIndex() const return -1; } +QString LogChangeWidget::earliestCommit() const +{ + int rows = m_model->rowCount(); + if (rows) { + if (const QStandardItem *item = m_model->item(rows - 1, Sha1Column)) + return item->text(); + } + return QString(); +} + void LogChangeWidget::emitDoubleClicked(const QModelIndex &index) { if (index.isValid()) { diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h index 4e298519ac4..a4790701b48 100644 --- a/src/plugins/git/logchangedialog.h +++ b/src/plugins/git/logchangedialog.h @@ -56,6 +56,7 @@ public: bool includeRemote = true); QString commit() const; int commitIndex() const; + QString earliestCommit() const; signals: void doubleClicked(const QString &commit);