From 7d573006a9e1fc2cb72675eea1484151fe41846a Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 26 May 2011 10:20:09 +0200 Subject: [PATCH] Git: fetch from remote Task-number: QTCREATORBUG-4942 Change-Id: Ifd8586e110379a621c43233fe9b912bd82f7f28a Reviewed-on: http://codereview.qt.nokia.com/218 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/git/gitclient.cpp | 4 +++- src/plugins/git/gitclient.h | 2 +- src/plugins/git/gitplugin.cpp | 2 +- src/plugins/git/remotedialog.cpp | 12 ++++++++++++ src/plugins/git/remotedialog.h | 1 + src/plugins/git/remotedialog.ui | 7 +++++++ src/plugins/git/remotemodel.cpp | 5 +++++ src/plugins/git/remotemodel.h | 1 + 8 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 96be02ea59..e7f4807d4b 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2087,9 +2087,11 @@ void GitClient::revert(const QStringList &files, bool revertStaging) } } -bool GitClient::synchronousFetch(const QString &workingDirectory) +bool GitClient::synchronousFetch(const QString &workingDirectory, const QString &remote) { QStringList arguments(QLatin1String("fetch")); + if (!remote.isEmpty()) + arguments << remote; // Disable UNIX terminals to suppress SSH prompting. const unsigned flags = VCSBase::VCSBasePlugin::SshPasswordPrompt|VCSBase::VCSBasePlugin::ShowStdOutInLogWindow |VCSBase::VCSBasePlugin::ShowSuccessMessage; diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 1e9c49338d..82c773ad16 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -167,7 +167,7 @@ public: bool cloneRepository(const QString &directory, const QByteArray &url); QString vcsGetRepositoryURL(const QString &directory); - bool synchronousFetch(const QString &workingDirectory); + bool synchronousFetch(const QString &workingDirectory, const QString &remote); bool synchronousPull(const QString &workingDirectory); bool synchronousPush(const QString &workingDirectory); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 72f58cc1ab..c157dabd60 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -802,7 +802,7 @@ bool GitPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEdi void GitPlugin::fetch() { - m_gitClient->synchronousFetch(currentState().topLevel()); + m_gitClient->synchronousFetch(currentState().topLevel(), QString()); } void GitPlugin::pull() diff --git a/src/plugins/git/remotedialog.cpp b/src/plugins/git/remotedialog.cpp index ba96e08240..4f2efcee4a 100644 --- a/src/plugins/git/remotedialog.cpp +++ b/src/plugins/git/remotedialog.cpp @@ -101,6 +101,7 @@ RemoteDialog::RemoteDialog(QWidget *parent) : m_ui->remoteView->verticalHeader()->setDefaultSectionSize(qMax(static_cast(fm.height() * 1.2), fm.height() + 4)); connect(m_ui->addButton, SIGNAL(clicked()), this, SLOT(addRemote())); + connect(m_ui->fetchButton, SIGNAL(clicked()), this, SLOT(fetchFromRemote())); connect(m_ui->removeButton, SIGNAL(clicked()), this, SLOT(removeRemote())); } @@ -152,6 +153,17 @@ void RemoteDialog::removeRemote() } } +void RemoteDialog::fetchFromRemote() +{ + const QModelIndexList indexList = m_ui->remoteView->selectionModel()->selectedIndexes(); + if (indexList.count() == 0) + return; + + int row = indexList.at(0).row(); + const QString remoteName = m_remoteModel->remoteName(row); + m_remoteModel->client()->synchronousFetch(m_remoteModel->workingDirectory(), remoteName); +} + void RemoteDialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); diff --git a/src/plugins/git/remotedialog.h b/src/plugins/git/remotedialog.h index 3c6b10a115..72683b5292 100644 --- a/src/plugins/git/remotedialog.h +++ b/src/plugins/git/remotedialog.h @@ -82,6 +82,7 @@ public slots: void addRemote(); void removeRemote(); + void fetchFromRemote(); private slots: diff --git a/src/plugins/git/remotedialog.ui b/src/plugins/git/remotedialog.ui index b80f598f02..718a6d8663 100644 --- a/src/plugins/git/remotedialog.ui +++ b/src/plugins/git/remotedialog.ui @@ -71,6 +71,13 @@ + + + Fetch + + + + Remove diff --git a/src/plugins/git/remotemodel.cpp b/src/plugins/git/remotemodel.cpp index 3e7b21d3ec..18247657dd 100644 --- a/src/plugins/git/remotemodel.cpp +++ b/src/plugins/git/remotemodel.cpp @@ -227,6 +227,11 @@ int RemoteModel::findRemoteByName(const QString &name) const return -1; } +GitClient *RemoteModel::client() const +{ + return m_client; +} + } // namespace Internal } // namespace Git diff --git a/src/plugins/git/remotemodel.h b/src/plugins/git/remotemodel.h index f54d73fc90..60939e0172 100644 --- a/src/plugins/git/remotemodel.h +++ b/src/plugins/git/remotemodel.h @@ -69,6 +69,7 @@ public: QString workingDirectory() const; int findRemoteByName(const QString &name) const; + GitClient *client() const; protected: struct Remote { -- 2.11.0