From b719bbda42261db37d826d461ab25c2f96e194f9 Mon Sep 17 00:00:00 2001
From: Robert Loehning <robert.loehning@nokia.com>
Date: Tue, 31 Aug 2010 21:27:13 +0200
Subject: [PATCH] VCS[git]: Added git fetch

---
 src/plugins/git/gitclient.cpp | 10 ++++++++++
 src/plugins/git/gitclient.h   |  1 +
 src/plugins/git/gitplugin.cpp |  9 +++++++++
 src/plugins/git/gitplugin.h   |  1 +
 4 files changed, 21 insertions(+)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index f81480bd3a7..8328e79b6c1 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1679,6 +1679,16 @@ void GitClient::revert(const QStringList &files, bool revertStaging)
     }
 }
 
+bool GitClient::synchronousFetch(const QString &workingDirectory)
+{
+    QStringList arguments(QLatin1String("fetch"));
+    // Disable UNIX terminals to suppress SSH prompting.
+    const unsigned flags = VCSBase::VCSBasePlugin::SshPasswordPrompt|VCSBase::VCSBasePlugin::ShowStdOutInLogWindow
+                           |VCSBase::VCSBasePlugin::ShowSuccessMessage;
+    const Utils::SynchronousProcessResponse resp = synchronousGit(workingDirectory, arguments, flags);
+    return resp.result == Utils::SynchronousProcessResponse::Finished;
+}
+
 bool GitClient::synchronousPull(const QString &workingDirectory)
 {
     return synchronousPull(workingDirectory, m_settings.pullRebase);
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index dbf0ea58a9d..f5d1c749954 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -158,6 +158,7 @@ public:
     unsigned gitVersion(bool silent, QString *errorMessage = 0);
     QString gitVersionString(bool silent, QString *errorMessage = 0);
 
+    bool synchronousFetch(const QString &workingDirectory);
     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 404869ce6dd..e549e6d4832 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -437,6 +437,10 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
                                            globalcontext, true, SLOT(stash()));
     actionCommand.first->setToolTip(tr("Saves the current state of your work and resets the repository."));
 
+    createRepositoryAction(actionManager, gitContainer,
+                           tr("Fetch"), QLatin1String("Git.Fetch"),
+                           globalcontext, true, SLOT(fetch()));
+
     createRepositoryAction(actionManager, gitContainer,
                            tr("Pull"), QLatin1String("Git.Pull"),
                            globalcontext, true, SLOT(pull()));
@@ -760,6 +764,11 @@ bool GitPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEdi
     return closeEditor;
 }
 
+void GitPlugin::fetch()
+{
+    m_gitClient->synchronousFetch(currentState().topLevel());
+}
+
 void GitPlugin::pull()
 {
     const VCSBase::VCSBasePluginState state = currentState();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index cec2821bd72..c3548836126 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -127,6 +127,7 @@ private slots:
     void stashSnapshot();
     void branchList();
     void stashList();
+    void fetch();
     void pull();
     void push();
 
-- 
GitLab