From 02d74bd3e7b8be6500c0d08b782c79f451a887bb Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Wed, 7 Dec 2011 14:02:36 +0100 Subject: [PATCH] Git: Push to non-default remotes Allow pushing into any of the defined remotes via Tools->Git->Remotes... Task-number: QTCREATORBUG-6382 Change-Id: I0bab34da4ec27c377993782b905b1d6c4f5a14b9 Reviewed-by: Hugues Delorme <delorme.hugues@fougsys.fr> --- src/plugins/git/gitclient.cpp | 7 +++++-- src/plugins/git/gitclient.h | 2 +- src/plugins/git/remotedialog.cpp | 28 ++++++++++++++++++++++++++++ src/plugins/git/remotedialog.h | 3 +++ src/plugins/git/remotedialog.ui | 7 +++++++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 40c5071fb2b..a0f2c321972 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1967,13 +1967,16 @@ void GitClient::subversionLog(const QString &workingDirectory) executeGit(workingDirectory, arguments, editor); } -bool GitClient::synchronousPush(const QString &workingDirectory) +bool GitClient::synchronousPush(const QString &workingDirectory, const QString &remote) { // Disable UNIX terminals to suppress SSH prompting. const unsigned flags = VCSBase::VCSBasePlugin::SshPasswordPrompt|VCSBase::VCSBasePlugin::ShowStdOutInLogWindow |VCSBase::VCSBasePlugin::ShowSuccessMessage; + QStringList arguments(QLatin1String("push")); + if (!remote.isEmpty()) + arguments << remote; const Utils::SynchronousProcessResponse resp = - synchronousGit(workingDirectory, QStringList(QLatin1String("push")), flags); + synchronousGit(workingDirectory, arguments, flags); return resp.result == Utils::SynchronousProcessResponse::Finished; } diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index b97ffe75a9d..6af47a72fcc 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -170,7 +170,7 @@ public: QString vcsGetRepositoryURL(const QString &directory); bool synchronousFetch(const QString &workingDirectory, const QString &remote); bool synchronousPull(const QString &workingDirectory); - bool synchronousPush(const QString &workingDirectory); + bool synchronousPush(const QString &workingDirectory, const QString &remote = QString()); // git svn support (asynchronous). void synchronousSubversionFetch(const QString &workingDirectory); diff --git a/src/plugins/git/remotedialog.cpp b/src/plugins/git/remotedialog.cpp index 5c225ec74d1..9dba3bd746c 100644 --- a/src/plugins/git/remotedialog.cpp +++ b/src/plugins/git/remotedialog.cpp @@ -106,8 +106,14 @@ RemoteDialog::RemoteDialog(QWidget *parent) : connect(m_ui->addButton, SIGNAL(clicked()), this, SLOT(addRemote())); connect(m_ui->fetchButton, SIGNAL(clicked()), this, SLOT(fetchFromRemote())); + connect(m_ui->pushButton, SIGNAL(clicked()), this, SLOT(pushToRemote())); connect(m_ui->removeButton, SIGNAL(clicked()), this, SLOT(removeRemote())); connect(m_ui->refreshButton, SIGNAL(clicked()), this, SLOT(refreshRemotes())); + + connect(m_ui->remoteView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(updateButtonState())); + + updateButtonState(); } RemoteDialog::~RemoteDialog() @@ -163,6 +169,17 @@ void RemoteDialog::removeRemote() } } +void RemoteDialog::pushToRemote() +{ + const QModelIndexList indexList = m_ui->remoteView->selectionModel()->selectedIndexes(); + if (indexList.count() == 0) + return; + + const int row = indexList.at(0).row(); + const QString remoteName = m_remoteModel->remoteName(row); + m_remoteModel->client()->synchronousPush(m_remoteModel->workingDirectory(), remoteName); +} + void RemoteDialog::fetchFromRemote() { const QModelIndexList indexList = m_ui->remoteView->selectionModel()->selectedIndexes(); @@ -174,6 +191,17 @@ void RemoteDialog::fetchFromRemote() m_remoteModel->client()->synchronousFetch(m_remoteModel->workingDirectory(), remoteName); } +void RemoteDialog::updateButtonState() +{ + const QModelIndexList indexList = m_ui->remoteView->selectionModel()->selectedIndexes(); + + const bool haveSelection = (indexList.count() > 0); + m_ui->addButton->setEnabled(true); + m_ui->fetchButton->setEnabled(haveSelection); + m_ui->pushButton->setEnabled(haveSelection); + m_ui->removeButton->setEnabled(haveSelection); +} + void RemoteDialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); diff --git a/src/plugins/git/remotedialog.h b/src/plugins/git/remotedialog.h index 213510a68b9..9105f75df49 100644 --- a/src/plugins/git/remotedialog.h +++ b/src/plugins/git/remotedialog.h @@ -84,8 +84,11 @@ public slots: void refreshRemotes(); void addRemote(); void removeRemote(); + void pushToRemote(); void fetchFromRemote(); + void updateButtonState(); + private slots: protected: diff --git a/src/plugins/git/remotedialog.ui b/src/plugins/git/remotedialog.ui index deff9e629b7..c3a5333cbb1 100644 --- a/src/plugins/git/remotedialog.ui +++ b/src/plugins/git/remotedialog.ui @@ -111,6 +111,13 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="pushButton"> + <property name="text"> + <string>&Push</string> + </property> + </widget> + </item> <item> <widget class="QPushButton" name="removeButton"> <property name="text"> -- GitLab