diff --git a/src/libs/utils/shellcommand.cpp b/src/libs/utils/shellcommand.cpp index 6742858aa00..a12253dfd25 100644 --- a/src/libs/utils/shellcommand.cpp +++ b/src/libs/utils/shellcommand.cpp @@ -25,6 +25,7 @@ #include "shellcommand.h" +#include "environment.h" #include "fileutils.h" #include "qtcassert.h" #include "runextensions.h" @@ -77,14 +78,17 @@ public: int timeoutS; }; - ShellCommandPrivate(const QString &defaultWorkingDirectory, - const QProcessEnvironment &environment); - ~ShellCommandPrivate(); + ShellCommandPrivate(const QString &defaultWorkingDirectory, const Environment &environment) + : m_defaultWorkingDirectory(defaultWorkingDirectory), + m_environment(environment) + {} + + ~ShellCommandPrivate() { delete m_progressParser; } std::function m_proxyFactory = []() { return new OutputProxy; }; QString m_displayName; const QString m_defaultWorkingDirectory; - const QProcessEnvironment m_environment; + const Environment m_environment; QVariant m_cookie; QTextCodec *m_codec = nullptr; ProgressParser *m_progressParser = nullptr; @@ -101,17 +105,6 @@ public: bool m_aborted = false; }; -ShellCommandPrivate::ShellCommandPrivate(const QString &defaultWorkingDirectory, - const QProcessEnvironment &environment) : - m_defaultWorkingDirectory(defaultWorkingDirectory), - m_environment(environment) -{ } - -ShellCommandPrivate::~ShellCommandPrivate() -{ - delete m_progressParser; -} - ShellCommandPrivate::Job::Job(const QString &wd, const CommandLine &command, int t, const ExitCodeInterpreter &interpreter) : workingDirectory(wd), @@ -127,7 +120,7 @@ ShellCommandPrivate::Job::Job(const QString &wd, const CommandLine &command, } // namespace Internal ShellCommand::ShellCommand(const QString &workingDirectory, - const QProcessEnvironment &environment) : + const Environment &environment) : d(new Internal::ShellCommandPrivate(workingDirectory, environment)) { connect(&d->m_watcher, &QFutureWatcher::canceled, this, &ShellCommand::cancel); @@ -168,7 +161,7 @@ const QString &ShellCommand::defaultWorkingDirectory() const return d->m_defaultWorkingDirectory; } -const QProcessEnvironment ShellCommand::processEnvironment() const +const Environment ShellCommand::processEnvironment() const { return d->m_environment; } @@ -368,7 +361,7 @@ SynchronousProcessResponse ShellCommand::runFullySynchronous(const CommandLine & const QString dir = workDirectory(workingDirectory); if (!dir.isEmpty()) process.setWorkingDirectory(dir); - process.setProcessEnvironment(processEnvironment()); + process.setEnvironment(processEnvironment()); if (d->m_flags & MergeOutputChannels) process.setProcessChannelMode(QProcess::MergedChannels); if (d->m_codec) @@ -404,7 +397,7 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const CommandLine &cmd, SynchronousProcess process; process.setExitCodeInterpreter(interpreter); connect(this, &ShellCommand::terminate, &process, &SynchronousProcess::terminate); - process.setProcessEnvironment(processEnvironment()); + process.setEnvironment(processEnvironment()); process.setTimeoutS(timeoutS); if (d->m_codec) process.setCodec(d->m_codec); @@ -412,7 +405,6 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const CommandLine &cmd, const QString dir = workDirectory(workingDirectory); if (!dir.isEmpty()) process.setWorkingDirectory(dir); - process.setProcessEnvironment(processEnvironment()); // connect stderr to the output window if desired if (d->m_flags & MergeOutputChannels) { process.setProcessChannelMode(QProcess::MergedChannels); diff --git a/src/libs/utils/shellcommand.h b/src/libs/utils/shellcommand.h index df89abad6e6..d5cc9fdcb9f 100644 --- a/src/libs/utils/shellcommand.h +++ b/src/libs/utils/shellcommand.h @@ -104,7 +104,7 @@ public: }; - ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment); + ShellCommand(const QString &workingDirectory, const Environment &environment); ~ShellCommand() override; QString displayName() const; @@ -122,7 +122,7 @@ public: int lastExecutionExitCode() const; const QString &defaultWorkingDirectory() const; - virtual const QProcessEnvironment processEnvironment() const; + virtual const Environment processEnvironment() const; int defaultTimeoutS() const; void setDefaultTimeoutS(int timeout); diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 1d4e78c00e0..3202f8bbcaf 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -939,8 +939,8 @@ Core::ShellCommand *BazaarPluginPrivate::createInitialCheckoutCommand(const QStr args << m_client.vcsCommandString(BazaarClient::CloneCommand) << extraArgs << url << localName; - QProcessEnvironment env = m_client.processEnvironment(); - env.insert(QLatin1String("BZR_PROGRESS_BAR"), QLatin1String("text")); + Environment env = m_client.processEnvironment(); + env.set("BZR_PROGRESS_BAR", "text"); auto command = new VcsBase::VcsCommand(baseDirectory.toString(), env); command->addJob({m_client.vcsBinary(), args}, -1); return command; diff --git a/src/plugins/coreplugin/shellcommand.cpp b/src/plugins/coreplugin/shellcommand.cpp index 0e643d5df4b..38dbfdea440 100644 --- a/src/plugins/coreplugin/shellcommand.cpp +++ b/src/plugins/coreplugin/shellcommand.cpp @@ -33,7 +33,7 @@ namespace Core { -ShellCommand::ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment) : +ShellCommand::ShellCommand(const QString &workingDirectory, const Utils::Environment &environment) : Utils::ShellCommand(workingDirectory, environment) { connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, diff --git a/src/plugins/coreplugin/shellcommand.h b/src/plugins/coreplugin/shellcommand.h index b960bae94d0..37026a82d71 100644 --- a/src/plugins/coreplugin/shellcommand.h +++ b/src/plugins/coreplugin/shellcommand.h @@ -40,7 +40,7 @@ class CORE_EXPORT ShellCommand : public Utils::ShellCommand Q_OBJECT public: - ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment); + ShellCommand(const QString &workingDirectory, const Utils::Environment &environment); FutureProgress *futureProgress() const; diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 47156834560..8e90d3de18e 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -487,7 +487,7 @@ Core::ShellCommand *CvsPluginPrivate::createInitialCheckoutCommand(const QString args << QLatin1String("checkout") << url << extraArgs; auto command = new VcsBase::VcsCommand(baseDirectory.toString(), - QProcessEnvironment::systemEnvironment()); + Environment::systemEnvironment()); command->setDisplayName(tr("CVS Checkout")); command->addJob({m_settings.binaryPath.filePath(), m_settings.addOptions(args)}, -1); return command; diff --git a/src/plugins/git/changeselectiondialog.cpp b/src/plugins/git/changeselectiondialog.cpp index 7e797783964..a5bc3f6a47b 100644 --- a/src/plugins/git/changeselectiondialog.cpp +++ b/src/plugins/git/changeselectiondialog.cpp @@ -32,9 +32,9 @@ #include #include + #include -#include #include #include #include @@ -230,7 +230,7 @@ void ChangeSelectionDialog::recalculateDetails() m_process = new QProcess(this); m_process->setWorkingDirectory(workingDir); - m_process->setProcessEnvironment(m_gitEnvironment); + m_process->setProcessEnvironment(m_gitEnvironment.toProcessEnvironment()); connect(m_process, QOverload::of(&QProcess::finished), this, &ChangeSelectionDialog::setDetails); diff --git a/src/plugins/git/changeselectiondialog.h b/src/plugins/git/changeselectiondialog.h index d49cc18b222..32fd47590f6 100644 --- a/src/plugins/git/changeselectiondialog.h +++ b/src/plugins/git/changeselectiondialog.h @@ -25,11 +25,11 @@ #pragma once +#include #include #include #include -#include QT_BEGIN_NAMESPACE class QProcess; @@ -77,7 +77,7 @@ private: QProcess *m_process = nullptr; Utils::FilePath m_gitExecutable; - QProcessEnvironment m_gitEnvironment; + Utils::Environment m_gitEnvironment; ChangeCommand m_command = NoCommand; QStringListModel *m_changeModel = nullptr; QString m_oldWorkingDir; diff --git a/src/plugins/git/gerrit/gerritmodel.cpp b/src/plugins/git/gerrit/gerritmodel.cpp index 6f1e76f8453..5a4312c60c4 100644 --- a/src/plugins/git/gerrit/gerritmodel.cpp +++ b/src/plugins/git/gerrit/gerritmodel.cpp @@ -296,7 +296,7 @@ QueryContext::QueryContext(const QString &query, connect(&m_process, &QProcess::errorOccurred, this, &QueryContext::processError); connect(&m_watcher, &QFutureWatcherBase::canceled, this, &QueryContext::terminate); m_watcher.setFuture(m_progress.future()); - m_process.setProcessEnvironment(Git::Internal::GitClient::instance()->processEnvironment()); + m_process.setEnvironment(Git::Internal::GitClient::instance()->processEnvironment()); m_progress.setProgressRange(0, 1); m_timer.setInterval(timeOutMS); diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index c67db2f8b41..166d5ec9f84 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -148,7 +148,8 @@ FetchContext::FetchContext(const QSharedPointer &change, connect(&m_watcher, &QFutureWatcher::canceled, this, &FetchContext::terminate); m_watcher.setFuture(m_progress.future()); m_process.setWorkingDirectory(repository); - m_process.setProcessEnvironment(GitClient::instance()->processEnvironment()); + m_process.setProcessEnvironment( + GitClient::instance()->processEnvironment().toProcessEnvironment()); m_process.closeWriteChannel(); } diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 0048043bcc0..4e75d7f6dba 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2199,18 +2199,14 @@ bool GitClient::synchronousApplyPatch(const QString &workingDirectory, } } -QProcessEnvironment GitClient::processEnvironment() const +Environment GitClient::processEnvironment() const { - QProcessEnvironment environment = VcsBaseClientImpl::processEnvironment(); + Environment environment = VcsBaseClientImpl::processEnvironment(); QString gitPath = settings().path.value(); - if (!gitPath.isEmpty()) { - gitPath += HostOsInfo::pathListSeparator(); - gitPath += environment.value("PATH"); - environment.insert("PATH", gitPath); - } + environment.prependOrSetPath(gitPath); if (HostOsInfo::isWindowsHost() && settings().winSetHomeEnvironment.value()) - environment.insert("HOME", QDir::toNativeSeparators(QDir::homePath())); - environment.insert("GIT_EDITOR", m_disableEditor ? "true" : m_gitQtcEditor); + environment.set("HOME", QDir::toNativeSeparators(QDir::homePath())); + environment.set("GIT_EDITOR", m_disableEditor ? "true" : m_gitQtcEditor); return environment; } @@ -2524,7 +2520,7 @@ void GitClient::launchGitK(const QString &workingDirectory, const QString &fileN const QFileInfo binaryInfo = vcsBinary().toFileInfo(); QDir foundBinDir(binaryInfo.dir()); const bool foundBinDirIsBinDir = foundBinDir.dirName() == "bin"; - QProcessEnvironment env = processEnvironment(); + Environment env = processEnvironment(); if (tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path())) return; @@ -2562,7 +2558,7 @@ void GitClient::launchRepositoryBrowser(const QString &workingDirectory) const QProcess::startDetached(repBrowserBinary, {workingDirectory}, workingDirectory); } -bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, +bool GitClient::tryLauchingGitK(const Environment &env, const QString &workingDirectory, const QString &fileName, const QString &gitBinDirectory) const @@ -2589,7 +2585,7 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, if (!settings().path.value().isEmpty()) { auto process = new QProcess; process->setWorkingDirectory(workingDirectory); - process->setProcessEnvironment(env); + process->setProcessEnvironment(env.toProcessEnvironment()); process->start(binary, arguments); success = process->waitForStarted(); if (success) diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index c8c4cdf6501..54bd2b96d16 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -345,7 +345,7 @@ public: QStringList synchronousRepositoryBranches(const QString &repositoryURL, const QString &workingDirectory = QString()) const; - QProcessEnvironment processEnvironment() const override; + Utils::Environment processEnvironment() const override; bool beginStashScope(const QString &workingDirectory, const QString &command, StashFlag flag = Default, PushAction pushAction = NoPush); @@ -400,7 +400,7 @@ private: void connectRepositoryChanged(const QString & repository, VcsBase::VcsCommand *cmd); bool executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments, const QString &abortCommand = QString()) const; - bool tryLauchingGitK(const QProcessEnvironment &env, + bool tryLauchingGitK(const Utils::Environment &env, const QString &workingDirectory, const QString &fileName, const QString &gitBinDirectory) const; diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index 872585d1428..60238fd65f6 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -174,8 +174,8 @@ bool MercurialClient::synchronousPull(const QString &workingDir, const QString & | VcsCommand::ShowSuccessMessage; // cause mercurial doesn`t understand LANG - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert(QLatin1String("LANGUAGE"), QLatin1String("C")); + Environment env = Environment::systemEnvironment(); + env.set("LANGUAGE", "C"); const SynchronousProcessResponse resp = VcsBase::runVcs( workingDir, {vcsBinary(), args}, vcsTimeoutS(), flags, nullptr, env); const bool ok = resp.result == SynchronousProcessResponse::Finished; diff --git a/src/plugins/updateinfo/updateinfoplugin.cpp b/src/plugins/updateinfo/updateinfoplugin.cpp index 309cfc16aaa..110c7b23a94 100644 --- a/src/plugins/updateinfo/updateinfoplugin.cpp +++ b/src/plugins/updateinfo/updateinfoplugin.cpp @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include @@ -129,8 +129,8 @@ void UpdateInfoPlugin::startCheckForUpdates() { stopCheckForUpdates(); - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert(QLatin1String("QT_LOGGING_RULES"), QLatin1String("*=false")); + Utils::Environment env = Utils::Environment::systemEnvironment(); + env.set("QT_LOGGING_RULES", "*=false"); d->m_checkUpdatesCommand = new ShellCommand(QString(), env); d->m_checkUpdatesCommand->setDisplayName(tr("Checking for Updates")); connect(d->m_checkUpdatesCommand, &ShellCommand::stdOutText, this, &UpdateInfoPlugin::collectCheckForUpdatesOutput); diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp index 6b69a8fadf9..9efee407882 100644 --- a/src/plugins/vcsbase/vcsbaseclient.cpp +++ b/src/plugins/vcsbase/vcsbaseclient.cpp @@ -119,9 +119,9 @@ void VcsBaseClientImpl::enqueueJob(VcsCommand *cmd, const QStringList &args, cmd->execute(); } -QProcessEnvironment VcsBaseClientImpl::processEnvironment() const +Environment VcsBaseClientImpl::processEnvironment() const { - QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); + Environment environment = Environment::systemEnvironment(); VcsBase::setProcessEnvironment(&environment, false); return environment; } diff --git a/src/plugins/vcsbase/vcsbaseclient.h b/src/plugins/vcsbase/vcsbaseclient.h index 2f69d00a7fe..708eb174ff2 100644 --- a/src/plugins/vcsbase/vcsbaseclient.h +++ b/src/plugins/vcsbase/vcsbaseclient.h @@ -84,7 +84,7 @@ public: const QString &workingDirectory = QString(), const Utils::ExitCodeInterpreter &interpreter = Utils::defaultExitCodeInterpreter) const; - virtual QProcessEnvironment processEnvironment() const; + virtual Utils::Environment processEnvironment() const; // VCS functionality: virtual VcsBaseEditorWidget *annotate( diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp index 93e75a6dd9c..aad270f5690 100644 --- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp +++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp @@ -30,6 +30,8 @@ #include #include #include + +#include #include #include @@ -37,6 +39,7 @@ using namespace DiffEditor; using namespace Core; +using namespace Utils; namespace VcsBase { @@ -93,7 +96,7 @@ public: VcsBaseDiffEditorController *q; QString m_directory; - QProcessEnvironment m_processEnvironment; + Environment m_processEnvironment; Utils::FilePath m_vcsBinary; int m_vscTimeoutS; QString m_startupFile; @@ -294,7 +297,7 @@ void VcsBaseDiffEditorController::setVcsBinary(const Utils::FilePath &path) d->m_vcsBinary = path; } -void VcsBaseDiffEditorController::setProcessEnvironment(const QProcessEnvironment &value) +void VcsBaseDiffEditorController::setProcessEnvironment(const Environment &value) { d->m_processEnvironment = value; } diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.h b/src/plugins/vcsbase/vcsbasediffeditorcontroller.h index ffe4f7cc43c..7ccf05fd41b 100644 --- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.h +++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.h @@ -29,14 +29,16 @@ #include -#include - QT_BEGIN_NAMESPACE class QTextCodec; QT_END_NAMESPACE namespace Core { class IDocument; } -namespace Utils { class FilePath; } + +namespace Utils { +class Environment; +class FilePath; +} // Utils namespace VcsBase { @@ -50,7 +52,7 @@ public: explicit VcsBaseDiffEditorController(Core::IDocument *document); ~VcsBaseDiffEditorController() override; - void setProcessEnvironment(const QProcessEnvironment &value); + void setProcessEnvironment(const Utils::Environment &value); void setVcsBinary(const Utils::FilePath &path); void setVcsTimeoutS(int value); void setWorkingDirectory(const QString &workingDir); diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 39930de6232..421c6ea819f 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -742,16 +742,14 @@ QString source(IDocument *document) return document->property(SOURCE_PROPERTY).toString(); } -void setProcessEnvironment(QProcessEnvironment *e, - bool forceCLocale, - const QString &sshPromptBinary) +void setProcessEnvironment(Environment *e, bool forceCLocale, const QString &sshPromptBinary) { if (forceCLocale) { - e->insert("LANG", "C"); - e->insert("LANGUAGE", "C"); + e->set("LANG", "C"); + e->set("LANGUAGE", "C"); } if (!sshPromptBinary.isEmpty()) - e->insert("SSH_ASKPASS", sshPromptBinary); + e->set("SSH_ASKPASS", sshPromptBinary); } // Run a process synchronously, returning Utils::SynchronousProcessResponse @@ -761,9 +759,9 @@ SynchronousProcessResponse runVcs(const QString &workingDir, int timeOutS, unsigned flags, QTextCodec *outputCodec, - const QProcessEnvironment &env) + const Environment &env) { - VcsCommand command(workingDir, env.isEmpty() ? QProcessEnvironment::systemEnvironment() : env); + VcsCommand command(workingDir, env.size() == 0 ? Environment::systemEnvironment() : env); command.addFlags(flags); command.setCodec(outputCodec); return command.runCommand(cmd, timeOutS); diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index d1fc51bae52..e3b6180fecb 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -30,10 +30,11 @@ #include #include #include + #include -#include -#include +#include + #include QT_BEGIN_NAMESPACE @@ -138,7 +139,7 @@ VCSBASE_EXPORT bool isSshPromptConfigured(); // Sets up SSH graphical password prompting (note that the latter // requires a terminal-less process) and sets LANG to 'C' to force English // (suppress LOCALE warnings/parse commands output) if desired. -VCSBASE_EXPORT void setProcessEnvironment(QProcessEnvironment *e, +VCSBASE_EXPORT void setProcessEnvironment(Utils::Environment *e, bool forceCLocale, const QString &sshPasswordPrompt = sshPrompt()); // Sets the source of editor contents, can be directory or file. @@ -151,7 +152,7 @@ VCSBASE_EXPORT Utils::SynchronousProcessResponse runVcs(const QString &workingDi int timeOutS, unsigned flags = 0, QTextCodec *outputCodec = nullptr, - const QProcessEnvironment &env = {}); + const Utils::Environment &env = {}); class VCSBASE_EXPORT VcsBasePluginPrivate : public Core::IVersionControl { diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp index 3b1697c1367..73ef3027373 100644 --- a/src/plugins/vcsbase/vcscommand.cpp +++ b/src/plugins/vcsbase/vcscommand.cpp @@ -30,16 +30,13 @@ #include #include #include -#include - -#include +#include using namespace Utils; namespace VcsBase { -VcsCommand::VcsCommand(const QString &workingDirectory, - const QProcessEnvironment &environment) : +VcsCommand::VcsCommand(const QString &workingDirectory, const Environment &environment) : Core::ShellCommand(workingDirectory, environment), m_preventRepositoryChanged(false) { @@ -71,9 +68,9 @@ VcsCommand::VcsCommand(const QString &workingDirectory, }); } -const QProcessEnvironment VcsCommand::processEnvironment() const +const Environment VcsCommand::processEnvironment() const { - QProcessEnvironment env = Core::ShellCommand::processEnvironment(); + Environment env = Core::ShellCommand::processEnvironment(); VcsBase::setProcessEnvironment(&env, flags() & ForceCLocale, VcsBase::sshPrompt()); return env; } diff --git a/src/plugins/vcsbase/vcscommand.h b/src/plugins/vcsbase/vcscommand.h index e092b251774..1650012fa3d 100644 --- a/src/plugins/vcsbase/vcscommand.h +++ b/src/plugins/vcsbase/vcscommand.h @@ -41,9 +41,9 @@ public: ExpectRepoChanges = 0x2000, // Expect changes in repository by the command }; - VcsCommand(const QString &defaultWorkingDirectory, const QProcessEnvironment &environment); + VcsCommand(const QString &defaultWorkingDirectory, const Utils::Environment &environment); - const QProcessEnvironment processEnvironment() const override; + const Utils::Environment processEnvironment() const override; Utils::SynchronousProcessResponse runCommand(const Utils::CommandLine &command, int timeoutS,