summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@nokia.com>2011-12-07 14:02:36 +0100
committerHugues Delorme <delorme.hugues@fougsys.fr>2011-12-08 11:18:10 +0100
commit02d74bd3e7b8be6500c0d08b782c79f451a887bb (patch)
treeceaa9084e308f5e00cdc9a95f76b47b40394b5ee
parentf517215a3d85f82485a6a92ee674eb860a8b76b8 (diff)
downloadqt-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.cpp7
-rw-r--r--src/plugins/git/gitclient.h2
-rw-r--r--src/plugins/git/remotedialog.cpp28
-rw-r--r--src/plugins/git/remotedialog.h3
-rw-r--r--src/plugins/git/remotedialog.ui7
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>&amp;Push</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QPushButton" name="removeButton">
<property name="text">
<string>&amp;Remove</string>