diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index c05af4310c534641cb2dc58af4d5e4a948f413eb..21ac311c7670340db6361d77704002219bb6e747 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 c5c52b602f1f0fdede8126916b514306dea384af..9dc42192dbd89a56d20d6fb36fb19a3b20cfbf75 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("<b>Local repository:</b> %1").arg( QDir::toNativeSeparators(workingDir))); - m_ui->commitView->init(workingDir, QString(), false); - 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()) + if (!m_ui->commitView->init(workingDir, QString(), false)) return; - output.chop(1); - if (output.isEmpty()) { + QString earliestCommit = m_ui->commitView->earliestCommit(); + if (earliestCommit.isEmpty()) return; - } else { - output = output.mid(output.lastIndexOf(QLatin1Char('\n')) + 1); - m_localChangesFound = true; - } - args.clear(); - args << QLatin1String("--remotes") << QLatin1String("--contains") << output; + m_localChangesFound = true; + + Git::Internal::GitClient *gitClient = Git::Internal::GitPlugin::instance()->gitClient(); + QString output; + QString error; + QStringList args; + 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 4f11be1d115e9d34f8410905846c09873483817f..bb8f444c9e1fa1442b574fac26f2ff116d618115 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 4e298519ac4a14dc0aaa465a7440f069a0773b75..a4790701b48a16478c430969ed829896e347d13c 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);