diff options
author | Tobias Hunger <tobias.hunger@nokia.com> | 2011-12-07 14:02:36 +0100 |
---|---|---|
committer | Hugues Delorme <delorme.hugues@fougsys.fr> | 2011-12-08 11:18:10 +0100 |
commit | 02d74bd3e7b8be6500c0d08b782c79f451a887bb (patch) | |
tree | ceaa9084e308f5e00cdc9a95f76b47b40394b5ee | |
parent | f517215a3d85f82485a6a92ee674eb860a8b76b8 (diff) | |
download | qt-creator-02d74bd3e7b8be6500c0d08b782c79f451a887bb.tar.gz |
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>
-rw-r--r-- | src/plugins/git/gitclient.cpp | 7 | ||||
-rw-r--r-- | src/plugins/git/gitclient.h | 2 | ||||
-rw-r--r-- | src/plugins/git/remotedialog.cpp | 28 | ||||
-rw-r--r-- | src/plugins/git/remotedialog.h | 3 | ||||
-rw-r--r-- | 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 40c5071fb2..a0f2c32197 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 b97ffe75a9..6af47a72fc 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 5c225ec74d..9dba3bd746 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 213510a68b..9105f75df4 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 deff9e629b..c3a5333cbb 100644 --- a/src/plugins/git/remotedialog.ui +++ b/src/plugins/git/remotedialog.ui @@ -112,6 +112,13 @@ </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"> <string>&Remove</string> |