diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp
index ebedaaae1e7..4243fb9374e 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.cpp
+++ b/src/plugins/git/gerrit/gerritpushdialog.cpp
@@ -57,44 +57,23 @@ protected:
}
};
-
-
-GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &reviewerList, QWidget *parent) :
- QDialog(parent),
- m_workingDir(workingDir),
- m_ui(new Ui::GerritPushDialog),
- m_localChangesFound(false),
- m_valid(false)
+QString GerritPushDialog::determineRemoteBranch()
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- m_ui->setupUi(this);
- m_ui->repositoryLabel->setText(tr("Local repository: %1").arg(
- QDir::toNativeSeparators(workingDir)));
-
- if (!m_ui->commitView->init(workingDir))
- return;
-
- PushItemDelegate *delegate = new PushItemDelegate(m_ui->commitView);
- delegate->setParent(this);
- QString earliestCommit = m_ui->commitView->earliestCommit();
- if (earliestCommit.isEmpty())
- return;
+ const QString earliestCommit = m_ui->commitView->earliestCommit();
m_localChangesFound = true;
-
- GitClient *gitClient = GitPlugin::instance()->gitClient();
QString output;
QString error;
QStringList args;
args << QLatin1String("-r") << QLatin1String("--contains")
<< earliestCommit + QLatin1Char('^');
- if (!gitClient->synchronousBranchCmd(m_workingDir, args, &output, &error))
- return;
-
- QString head = QLatin1String("/HEAD");
+ if (!m_client->synchronousBranchCmd(m_workingDir, args, &output, &error))
+ return QString();
+ const QString head = QLatin1String("/HEAD");
QStringList refs = output.split(QLatin1Char('\n'));
- QString remoteTrackingBranch = gitClient->synchronousTrackingBranch(m_workingDir);
+
+ const QString remoteTrackingBranch = m_client->synchronousTrackingBranch(m_workingDir);
QString remoteBranch;
foreach (const QString &reference, refs) {
const QString ref = reference.trimmed();
@@ -105,29 +84,25 @@ GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &rev
remoteBranch = ref;
// Prefer remote tracking branch if it exists and contains the latest remote commit
- if (ref == remoteTrackingBranch) {
- remoteBranch = ref;
- break;
- }
+ if (ref == remoteTrackingBranch)
+ return ref;
}
+ return remoteBranch;
+}
- if (!remoteBranch.isEmpty()) {
- m_suggestedRemoteName = remoteBranch.left(remoteBranch.indexOf(QLatin1Char('/')));
- m_suggestedRemoteBranch = remoteBranch.mid(remoteBranch.indexOf(QLatin1Char('/')) + 1);
- }
-
- output.clear();
- error.clear();
- args.clear();
+void GerritPushDialog::initRemoteBranches()
+{
+ QString output;
+ QStringList args;
+ const QString head = QLatin1String("/HEAD");
QString remotesPrefix(QLatin1String("refs/remotes/"));
args << QLatin1String("--format=%(refname)\t%(committerdate:raw)")
<< remotesPrefix;
- if (!gitClient->synchronousForEachRefCmd(workingDir, args, &output))
+ if (!m_client->synchronousForEachRefCmd(m_workingDir, args, &output))
return;
- refs.clear();
- refs = output.split(QLatin1String("\n"));
+ const QStringList refs = output.split(QLatin1String("\n"));
foreach (const QString &reference, refs) {
QStringList entries = reference.split(QLatin1Char('\t'));
if (entries.count() < 2 || entries.first().endsWith(head))
@@ -138,16 +113,40 @@ GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &rev
BranchDate bd(ref.mid(refBranchIndex + 1), QDateTime::fromTime_t(timeT).date());
m_remoteBranches.insertMulti(ref.left(refBranchIndex), bd);
}
+ const QString remoteBranch = determineRemoteBranch();
+ if (!remoteBranch.isEmpty())
+ m_suggestedRemoteBranch = remoteBranch.mid(remoteBranch.indexOf(QLatin1Char('/')) + 1);
- int currIndex = 0;
QStringList remotes = m_remoteBranches.keys();
remotes.removeDuplicates();
- foreach (const QString &remote, remotes) {
- m_ui->remoteComboBox->addItem(remote);
- if (remote == m_suggestedRemoteName)
- m_ui->remoteComboBox->setCurrentIndex(currIndex);
- ++currIndex;
+ m_ui->remoteComboBox->addItems(remotes);
+ if (!m_suggestedRemoteBranch.isEmpty()) {
+ int index = m_ui->remoteComboBox->findText(m_suggestedRemoteBranch);
+ if (index != -1)
+ m_ui->remoteComboBox->setCurrentIndex(index);
}
+}
+
+GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &reviewerList, QWidget *parent) :
+ QDialog(parent),
+ m_workingDir(workingDir),
+ m_ui(new Ui::GerritPushDialog),
+ m_valid(false)
+{
+ m_client = GitPlugin::instance()->gitClient();
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ m_ui->setupUi(this);
+ m_ui->repositoryLabel->setText(tr("Local repository: %1").arg(
+ QDir::toNativeSeparators(workingDir)));
+
+ if (!m_ui->commitView->init(workingDir))
+ return;
+
+ PushItemDelegate *delegate = new PushItemDelegate(m_ui->commitView);
+ delegate->setParent(this);
+
+ initRemoteBranches();
+
const int remoteCount = m_ui->remoteComboBox->count();
if (remoteCount < 1) {
return;
@@ -187,7 +186,7 @@ QString GerritPushDialog::calculateChangeRange()
QString number;
- if (!GitPlugin::instance()->gitClient()->synchronousRevListCmd(m_workingDir, args, &number))
+ if (!m_client->synchronousRevListCmd(m_workingDir, args, &number))
reject();
number.chop(1);
diff --git a/src/plugins/git/gerrit/gerritpushdialog.h b/src/plugins/git/gerrit/gerritpushdialog.h
index 16a0beb77cd..df34a285480 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.h
+++ b/src/plugins/git/gerrit/gerritpushdialog.h
@@ -34,6 +34,12 @@
#include
#include
+namespace Git {
+namespace Internal {
+class GitClient;
+}
+}
+
namespace Gerrit {
namespace Internal {
@@ -66,14 +72,16 @@ private:
typedef QPair BranchDate;
typedef QMultiMap RemoteBranchesMap;
+ QString determineRemoteBranch();
+ void initRemoteBranches();
QString calculateChangeRange();
QString m_workingDir;
- QString m_suggestedRemoteName;
QString m_suggestedRemoteBranch;
Ui::GerritPushDialog *m_ui;
RemoteBranchesMap m_remoteBranches;
bool m_localChangesFound;
bool m_valid;
+ Git::Internal::GitClient *m_client;
};