diff --git a/src/plugins/git/changeselectiondialog.cpp b/src/plugins/git/changeselectiondialog.cpp index 476035b59047e1a81f49270fc6c244bf5a8e98af..2953f8f1736b9a5811ceb6f736a1522733701699 100644 --- a/src/plugins/git/changeselectiondialog.cpp +++ b/src/plugins/git/changeselectiondialog.cpp @@ -126,19 +126,22 @@ void ChangeSelectionDialog::selectCommitFromRecentHistory() if (workingDir.isEmpty()) return; + QString commit = change(); + int tilde = commit.indexOf(QLatin1Char('~')); + if (tilde != -1) + commit.truncate(tilde); QPointer<LogChangeDialog> dialog = new LogChangeDialog(false); dialog->setWindowTitle(tr("Select Commit")); - dialog->runDialog(workingDir); + dialog->runDialog(workingDir, commit); if (dialog->result() == QDialog::Rejected || dialog->commitIndex() == -1) return; - QString change = QLatin1String("HEAD"); if (dialog->commitIndex() > 0) - change += QLatin1Char('~') + QString::number(dialog->commitIndex()); + commit += QLatin1Char('~') + QString::number(dialog->commitIndex()); - m_changeNumberEdit->setText(change); + m_changeNumberEdit->setText(commit); } void ChangeSelectionDialog::chooseWorkingDirectory() diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index ea843dde0a134d89368355854203e1be126d6dbc..3b8a0ac2f165e494c6fd059c427f855061e25662 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -769,7 +769,7 @@ void GitPlugin::startRebase() return; LogChangeDialog dialog(false); dialog.setWindowTitle(tr("Interactive Rebase")); - if (!dialog.runDialog(workingDirectory)) + if (!dialog.runDialog(workingDirectory, QString(), false)) return; const QString change = dialog.commit(); if (!change.isEmpty()) diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp index ebcbbf74e033ea486a8ec6592c2d99aa4fc34de6..2e81fd8b67f558c8e01ed57642719d86cf9cb1f8 100644 --- a/src/plugins/git/gitsubmiteditorwidget.cpp +++ b/src/plugins/git/gitsubmiteditorwidget.cpp @@ -168,7 +168,7 @@ void GitSubmitEditorWidget::initialize(CommitType commitType, const QString &rep QVBoxLayout *logChangeLayout = new QVBoxLayout; logChangeGroupBox->setLayout(logChangeLayout); m_logChangeWidget = new LogChangeWidget; - m_logChangeWidget->init(repository); + m_logChangeWidget->init(repository, QString(), false); logChangeLayout->addWidget(m_logChangeWidget); insertTopWidget(logChangeGroupBox); m_gitSubmitPanelUi.editGroup->hide(); diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp index 4509144256d459afcb4d3f31b9764ea511e1a79f..8621bc24d922dde012b214c4deaa833696cbd04f 100644 --- a/src/plugins/git/logchangedialog.cpp +++ b/src/plugins/git/logchangedialog.cpp @@ -64,9 +64,9 @@ LogChangeWidget::LogChangeWidget(QWidget *parent) setSelectionBehavior(QAbstractItemView::SelectRows); } -bool LogChangeWidget::init(const QString &repository) +bool LogChangeWidget::init(const QString &repository, const QString &commit, bool includeRemote) { - if (!populateLog(repository) || !m_model->rowCount()) + if (!populateLog(repository, commit, includeRemote) || !m_model->rowCount()) return false; selectionModel()->select(m_model->index(0, 0), QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); @@ -89,7 +89,7 @@ int LogChangeWidget::commitIndex() const return -1; } -bool LogChangeWidget::populateLog(const QString &repository) +bool LogChangeWidget::populateLog(const QString &repository, const QString &commit, bool includeRemote) { if (const int rowCount = m_model->rowCount()) m_model->removeRows(0, rowCount); @@ -98,6 +98,9 @@ bool LogChangeWidget::populateLog(const QString &repository) GitClient *client = GitPlugin::instance()->gitClient(); QStringList arguments; arguments << QLatin1String("--max-count=40") << QLatin1String("--format=%h:%s %d"); + arguments << (commit.isEmpty() ? QLatin1String("HEAD") : commit); + if (!includeRemote) + arguments << QLatin1String("--not") << QLatin1String("--remotes"); QString output; if (!client->synchronousLog(repository, arguments, &output)) return false; @@ -165,9 +168,9 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) : resize(600, 400); } -bool LogChangeDialog::runDialog(const QString &repository) +bool LogChangeDialog::runDialog(const QString &repository, const QString &commit, bool includeRemote) { - if (!widget->init(repository)) + if (!widget->init(repository, commit, includeRemote)) return QDialog::Rejected; return QDialog::exec() == QDialog::Accepted; diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h index bfeb5b7e04819d90302637b187ca6aadfd59805b..83f31adcd4310222e1602dfd37d6c238a753b585 100644 --- a/src/plugins/git/logchangedialog.h +++ b/src/plugins/git/logchangedialog.h @@ -52,12 +52,13 @@ class LogChangeWidget : public QTreeView public: explicit LogChangeWidget(QWidget *parent = 0); - bool init(const QString &repository); + bool init(const QString &repository, const QString &commit = QString(), + bool includeRemote = true); QString commit() const; int commitIndex() const; private: - bool populateLog(const QString &repository); + bool populateLog(const QString &repository, const QString &commit, bool includeRemote); const QStandardItem *currentItem(int column = 0) const; QStandardItemModel *m_model; @@ -69,7 +70,8 @@ class LogChangeDialog : public QDialog public: LogChangeDialog(bool isReset, QWidget *parent = 0); - bool runDialog(const QString &repository); + bool runDialog(const QString &repository, const QString &commit = QString(), + bool includeRemote = true); QString commit() const; int commitIndex() const;