diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index f81480bd3a7306462a65fda9c41078c91cea8c76..8328e79b6c11c3ec3d23848f790de538ef3c67c4 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 dbf0ea58a9dd644cf9c9b9c155defaf6bbb5dd7e..f5d1c74995448e0bb13d22df5d884a85cd042efa 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 404869ce6dde1000ab4f233bc7a7aceaa7c2e55a..e549e6d48328a43f0f3e44228d7e031043e0f62f 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 cec2821bd724c2f783501749935ca901161f87ce..c35488361266032413bd550eb2c57d6a40b87292 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();