diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index 74bf34c5ce4..dbc3c83c5ec 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -322,6 +322,7 @@ void GerritPlugin::push(const QString &topLevel) if (dialog.exec() == QDialog::Rejected) return; + dialog.storeTopic(); m_reviewers = dialog.reviewers(); QString target = dialog.selectedCommit(); diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp index d0f618d8e43..4841499cf4b 100644 --- a/src/plugins/git/gerrit/gerritpushdialog.cpp +++ b/src/plugins/git/gerrit/gerritpushdialog.cpp @@ -221,6 +221,13 @@ bool GerritPushDialog::isValid() const return m_isValid; } +void GerritPushDialog::storeTopic() +{ + const QString branch = m_ui->localBranchComboBox->currentText(); + GitPlugin::client()->setConfigValue(m_workingDir, QString("branch.%1.topic").arg(branch), + selectedTopic()); +} + void GerritPushDialog::setRemoteBranches(bool includeOld) { bool blocked = m_ui->targetBranchComboBox->blockSignals(true); @@ -266,6 +273,10 @@ void GerritPushDialog::updateCommits(int index) { const QString branch = m_ui->localBranchComboBox->itemText(index); m_hasLocalCommits = m_ui->commitView->init(m_workingDir, branch, LogChangeWidget::Silent); + QString topic = GitPlugin::client()->readConfigValue( + m_workingDir, QString("branch.%1.topic").arg(branch)); + if (!topic.isEmpty()) + m_ui->topicLineEdit->setText(topic); const QString remoteBranch = determineRemoteBranch(branch); if (!remoteBranch.isEmpty()) { diff --git a/src/plugins/git/gerrit/gerritpushdialog.h b/src/plugins/git/gerrit/gerritpushdialog.h index c4ffb7da6b0..723831388fa 100644 --- a/src/plugins/git/gerrit/gerritpushdialog.h +++ b/src/plugins/git/gerrit/gerritpushdialog.h @@ -53,6 +53,7 @@ public: QString selectedTopic() const; QString reviewers() const; bool isValid() const; + void storeTopic(); private: void setChangeRange(); diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 66da317d69d..f7ad3fe465c 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -3001,6 +3001,12 @@ QString GitClient::readConfigValue(const QString &workingDirectory, const QStrin return readOneLine(workingDirectory, { "config", configVar }); } +void GitClient::setConfigValue(const QString &workingDirectory, const QString &configVar, + const QString &value) const +{ + readOneLine(workingDirectory, { "config", configVar, value }); +} + QString GitClient::readGitVar(const QString &workingDirectory, const QString &configVar) const { return readOneLine(workingDirectory, { "var", configVar }); diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 5f768ea87a2..bfc98aa5c07 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -273,6 +273,8 @@ public: QString readGitVar(const QString &workingDirectory, const QString &configVar) const; QString readConfigValue(const QString &workingDirectory, const QString &configVar) const; + void setConfigValue(const QString &workingDirectory, const QString &configVar, + const QString &value) const; QTextCodec *encoding(const QString &workingDirectory, const QString &configVar) const; bool readDataFromCommit(const QString &repoDirectory, const QString &commit,