Vcs/Utils: Use Utils::Environment for ShellCommand

Change-Id: Ica289ab2f83d52270923c4ff4983860cfbe0b494
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-05-04 05:54:54 +02:00
parent f5aa7bd9a1
commit 793d673f39
22 changed files with 72 additions and 82 deletions

View File

@@ -25,6 +25,7 @@
#include "shellcommand.h" #include "shellcommand.h"
#include "environment.h"
#include "fileutils.h" #include "fileutils.h"
#include "qtcassert.h" #include "qtcassert.h"
#include "runextensions.h" #include "runextensions.h"
@@ -77,14 +78,17 @@ public:
int timeoutS; int timeoutS;
}; };
ShellCommandPrivate(const QString &defaultWorkingDirectory, ShellCommandPrivate(const QString &defaultWorkingDirectory, const Environment &environment)
const QProcessEnvironment &environment); : m_defaultWorkingDirectory(defaultWorkingDirectory),
~ShellCommandPrivate(); m_environment(environment)
{}
~ShellCommandPrivate() { delete m_progressParser; }
std::function<OutputProxy *()> m_proxyFactory = []() { return new OutputProxy; }; std::function<OutputProxy *()> m_proxyFactory = []() { return new OutputProxy; };
QString m_displayName; QString m_displayName;
const QString m_defaultWorkingDirectory; const QString m_defaultWorkingDirectory;
const QProcessEnvironment m_environment; const Environment m_environment;
QVariant m_cookie; QVariant m_cookie;
QTextCodec *m_codec = nullptr; QTextCodec *m_codec = nullptr;
ProgressParser *m_progressParser = nullptr; ProgressParser *m_progressParser = nullptr;
@@ -101,17 +105,6 @@ public:
bool m_aborted = false; 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, ShellCommandPrivate::Job::Job(const QString &wd, const CommandLine &command,
int t, const ExitCodeInterpreter &interpreter) : int t, const ExitCodeInterpreter &interpreter) :
workingDirectory(wd), workingDirectory(wd),
@@ -127,7 +120,7 @@ ShellCommandPrivate::Job::Job(const QString &wd, const CommandLine &command,
} // namespace Internal } // namespace Internal
ShellCommand::ShellCommand(const QString &workingDirectory, ShellCommand::ShellCommand(const QString &workingDirectory,
const QProcessEnvironment &environment) : const Environment &environment) :
d(new Internal::ShellCommandPrivate(workingDirectory, environment)) d(new Internal::ShellCommandPrivate(workingDirectory, environment))
{ {
connect(&d->m_watcher, &QFutureWatcher<void>::canceled, this, &ShellCommand::cancel); connect(&d->m_watcher, &QFutureWatcher<void>::canceled, this, &ShellCommand::cancel);
@@ -168,7 +161,7 @@ const QString &ShellCommand::defaultWorkingDirectory() const
return d->m_defaultWorkingDirectory; return d->m_defaultWorkingDirectory;
} }
const QProcessEnvironment ShellCommand::processEnvironment() const const Environment ShellCommand::processEnvironment() const
{ {
return d->m_environment; return d->m_environment;
} }
@@ -368,7 +361,7 @@ SynchronousProcessResponse ShellCommand::runFullySynchronous(const CommandLine &
const QString dir = workDirectory(workingDirectory); const QString dir = workDirectory(workingDirectory);
if (!dir.isEmpty()) if (!dir.isEmpty())
process.setWorkingDirectory(dir); process.setWorkingDirectory(dir);
process.setProcessEnvironment(processEnvironment()); process.setEnvironment(processEnvironment());
if (d->m_flags & MergeOutputChannels) if (d->m_flags & MergeOutputChannels)
process.setProcessChannelMode(QProcess::MergedChannels); process.setProcessChannelMode(QProcess::MergedChannels);
if (d->m_codec) if (d->m_codec)
@@ -404,7 +397,7 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const CommandLine &cmd,
SynchronousProcess process; SynchronousProcess process;
process.setExitCodeInterpreter(interpreter); process.setExitCodeInterpreter(interpreter);
connect(this, &ShellCommand::terminate, &process, &SynchronousProcess::terminate); connect(this, &ShellCommand::terminate, &process, &SynchronousProcess::terminate);
process.setProcessEnvironment(processEnvironment()); process.setEnvironment(processEnvironment());
process.setTimeoutS(timeoutS); process.setTimeoutS(timeoutS);
if (d->m_codec) if (d->m_codec)
process.setCodec(d->m_codec); process.setCodec(d->m_codec);
@@ -412,7 +405,6 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const CommandLine &cmd,
const QString dir = workDirectory(workingDirectory); const QString dir = workDirectory(workingDirectory);
if (!dir.isEmpty()) if (!dir.isEmpty())
process.setWorkingDirectory(dir); process.setWorkingDirectory(dir);
process.setProcessEnvironment(processEnvironment());
// connect stderr to the output window if desired // connect stderr to the output window if desired
if (d->m_flags & MergeOutputChannels) { if (d->m_flags & MergeOutputChannels) {
process.setProcessChannelMode(QProcess::MergedChannels); process.setProcessChannelMode(QProcess::MergedChannels);

View File

@@ -104,7 +104,7 @@ public:
}; };
ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment); ShellCommand(const QString &workingDirectory, const Environment &environment);
~ShellCommand() override; ~ShellCommand() override;
QString displayName() const; QString displayName() const;
@@ -122,7 +122,7 @@ public:
int lastExecutionExitCode() const; int lastExecutionExitCode() const;
const QString &defaultWorkingDirectory() const; const QString &defaultWorkingDirectory() const;
virtual const QProcessEnvironment processEnvironment() const; virtual const Environment processEnvironment() const;
int defaultTimeoutS() const; int defaultTimeoutS() const;
void setDefaultTimeoutS(int timeout); void setDefaultTimeoutS(int timeout);

View File

@@ -939,8 +939,8 @@ Core::ShellCommand *BazaarPluginPrivate::createInitialCheckoutCommand(const QStr
args << m_client.vcsCommandString(BazaarClient::CloneCommand) args << m_client.vcsCommandString(BazaarClient::CloneCommand)
<< extraArgs << url << localName; << extraArgs << url << localName;
QProcessEnvironment env = m_client.processEnvironment(); Environment env = m_client.processEnvironment();
env.insert(QLatin1String("BZR_PROGRESS_BAR"), QLatin1String("text")); env.set("BZR_PROGRESS_BAR", "text");
auto command = new VcsBase::VcsCommand(baseDirectory.toString(), env); auto command = new VcsBase::VcsCommand(baseDirectory.toString(), env);
command->addJob({m_client.vcsBinary(), args}, -1); command->addJob({m_client.vcsBinary(), args}, -1);
return command; return command;

View File

@@ -33,7 +33,7 @@
namespace Core { namespace Core {
ShellCommand::ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment) : ShellCommand::ShellCommand(const QString &workingDirectory, const Utils::Environment &environment) :
Utils::ShellCommand(workingDirectory, environment) Utils::ShellCommand(workingDirectory, environment)
{ {
connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose,

View File

@@ -40,7 +40,7 @@ class CORE_EXPORT ShellCommand : public Utils::ShellCommand
Q_OBJECT Q_OBJECT
public: public:
ShellCommand(const QString &workingDirectory, const QProcessEnvironment &environment); ShellCommand(const QString &workingDirectory, const Utils::Environment &environment);
FutureProgress *futureProgress() const; FutureProgress *futureProgress() const;

View File

@@ -487,7 +487,7 @@ Core::ShellCommand *CvsPluginPrivate::createInitialCheckoutCommand(const QString
args << QLatin1String("checkout") << url << extraArgs; args << QLatin1String("checkout") << url << extraArgs;
auto command = new VcsBase::VcsCommand(baseDirectory.toString(), auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
QProcessEnvironment::systemEnvironment()); Environment::systemEnvironment());
command->setDisplayName(tr("CVS Checkout")); command->setDisplayName(tr("CVS Checkout"));
command->addJob({m_settings.binaryPath.filePath(), m_settings.addOptions(args)}, -1); command->addJob({m_settings.binaryPath.filePath(), m_settings.addOptions(args)}, -1);
return command; return command;

View File

@@ -32,9 +32,9 @@
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
#include <vcsbase/vcscommand.h> #include <vcsbase/vcscommand.h>
#include <QProcess>
#include <QFormLayout> #include <QFormLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QPushButton> #include <QPushButton>
@@ -230,7 +230,7 @@ void ChangeSelectionDialog::recalculateDetails()
m_process = new QProcess(this); m_process = new QProcess(this);
m_process->setWorkingDirectory(workingDir); m_process->setWorkingDirectory(workingDir);
m_process->setProcessEnvironment(m_gitEnvironment); m_process->setProcessEnvironment(m_gitEnvironment.toProcessEnvironment());
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, &ChangeSelectionDialog::setDetails); this, &ChangeSelectionDialog::setDetails);

View File

@@ -25,11 +25,11 @@
#pragma once #pragma once
#include <utils/environment.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/id.h> #include <utils/id.h>
#include <QDialog> #include <QDialog>
#include <QProcessEnvironment>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QProcess; class QProcess;
@@ -77,7 +77,7 @@ private:
QProcess *m_process = nullptr; QProcess *m_process = nullptr;
Utils::FilePath m_gitExecutable; Utils::FilePath m_gitExecutable;
QProcessEnvironment m_gitEnvironment; Utils::Environment m_gitEnvironment;
ChangeCommand m_command = NoCommand; ChangeCommand m_command = NoCommand;
QStringListModel *m_changeModel = nullptr; QStringListModel *m_changeModel = nullptr;
QString m_oldWorkingDir; QString m_oldWorkingDir;

View File

@@ -296,7 +296,7 @@ QueryContext::QueryContext(const QString &query,
connect(&m_process, &QProcess::errorOccurred, this, &QueryContext::processError); connect(&m_process, &QProcess::errorOccurred, this, &QueryContext::processError);
connect(&m_watcher, &QFutureWatcherBase::canceled, this, &QueryContext::terminate); connect(&m_watcher, &QFutureWatcherBase::canceled, this, &QueryContext::terminate);
m_watcher.setFuture(m_progress.future()); 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_progress.setProgressRange(0, 1);
m_timer.setInterval(timeOutMS); m_timer.setInterval(timeOutMS);

View File

@@ -148,7 +148,8 @@ FetchContext::FetchContext(const QSharedPointer<GerritChange> &change,
connect(&m_watcher, &QFutureWatcher<void>::canceled, this, &FetchContext::terminate); connect(&m_watcher, &QFutureWatcher<void>::canceled, this, &FetchContext::terminate);
m_watcher.setFuture(m_progress.future()); m_watcher.setFuture(m_progress.future());
m_process.setWorkingDirectory(repository); m_process.setWorkingDirectory(repository);
m_process.setProcessEnvironment(GitClient::instance()->processEnvironment()); m_process.setProcessEnvironment(
GitClient::instance()->processEnvironment().toProcessEnvironment());
m_process.closeWriteChannel(); m_process.closeWriteChannel();
} }

View File

@@ -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(); QString gitPath = settings().path.value();
if (!gitPath.isEmpty()) { environment.prependOrSetPath(gitPath);
gitPath += HostOsInfo::pathListSeparator();
gitPath += environment.value("PATH");
environment.insert("PATH", gitPath);
}
if (HostOsInfo::isWindowsHost() && settings().winSetHomeEnvironment.value()) if (HostOsInfo::isWindowsHost() && settings().winSetHomeEnvironment.value())
environment.insert("HOME", QDir::toNativeSeparators(QDir::homePath())); environment.set("HOME", QDir::toNativeSeparators(QDir::homePath()));
environment.insert("GIT_EDITOR", m_disableEditor ? "true" : m_gitQtcEditor); environment.set("GIT_EDITOR", m_disableEditor ? "true" : m_gitQtcEditor);
return environment; return environment;
} }
@@ -2524,7 +2520,7 @@ void GitClient::launchGitK(const QString &workingDirectory, const QString &fileN
const QFileInfo binaryInfo = vcsBinary().toFileInfo(); const QFileInfo binaryInfo = vcsBinary().toFileInfo();
QDir foundBinDir(binaryInfo.dir()); QDir foundBinDir(binaryInfo.dir());
const bool foundBinDirIsBinDir = foundBinDir.dirName() == "bin"; const bool foundBinDirIsBinDir = foundBinDir.dirName() == "bin";
QProcessEnvironment env = processEnvironment(); Environment env = processEnvironment();
if (tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path())) if (tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path()))
return; return;
@@ -2562,7 +2558,7 @@ void GitClient::launchRepositoryBrowser(const QString &workingDirectory) const
QProcess::startDetached(repBrowserBinary, {workingDirectory}, workingDirectory); QProcess::startDetached(repBrowserBinary, {workingDirectory}, workingDirectory);
} }
bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, bool GitClient::tryLauchingGitK(const Environment &env,
const QString &workingDirectory, const QString &workingDirectory,
const QString &fileName, const QString &fileName,
const QString &gitBinDirectory) const const QString &gitBinDirectory) const
@@ -2589,7 +2585,7 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env,
if (!settings().path.value().isEmpty()) { if (!settings().path.value().isEmpty()) {
auto process = new QProcess; auto process = new QProcess;
process->setWorkingDirectory(workingDirectory); process->setWorkingDirectory(workingDirectory);
process->setProcessEnvironment(env); process->setProcessEnvironment(env.toProcessEnvironment());
process->start(binary, arguments); process->start(binary, arguments);
success = process->waitForStarted(); success = process->waitForStarted();
if (success) if (success)

View File

@@ -345,7 +345,7 @@ public:
QStringList synchronousRepositoryBranches(const QString &repositoryURL, QStringList synchronousRepositoryBranches(const QString &repositoryURL,
const QString &workingDirectory = QString()) const; const QString &workingDirectory = QString()) const;
QProcessEnvironment processEnvironment() const override; Utils::Environment processEnvironment() const override;
bool beginStashScope(const QString &workingDirectory, const QString &command, bool beginStashScope(const QString &workingDirectory, const QString &command,
StashFlag flag = Default, PushAction pushAction = NoPush); StashFlag flag = Default, PushAction pushAction = NoPush);
@@ -400,7 +400,7 @@ private:
void connectRepositoryChanged(const QString & repository, VcsBase::VcsCommand *cmd); void connectRepositoryChanged(const QString & repository, VcsBase::VcsCommand *cmd);
bool executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments, bool executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments,
const QString &abortCommand = QString()) const; const QString &abortCommand = QString()) const;
bool tryLauchingGitK(const QProcessEnvironment &env, bool tryLauchingGitK(const Utils::Environment &env,
const QString &workingDirectory, const QString &workingDirectory,
const QString &fileName, const QString &fileName,
const QString &gitBinDirectory) const; const QString &gitBinDirectory) const;

View File

@@ -174,8 +174,8 @@ bool MercurialClient::synchronousPull(const QString &workingDir, const QString &
| VcsCommand::ShowSuccessMessage; | VcsCommand::ShowSuccessMessage;
// cause mercurial doesn`t understand LANG // cause mercurial doesn`t understand LANG
QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); Environment env = Environment::systemEnvironment();
env.insert(QLatin1String("LANGUAGE"), QLatin1String("C")); env.set("LANGUAGE", "C");
const SynchronousProcessResponse resp = VcsBase::runVcs( const SynchronousProcessResponse resp = VcsBase::runVcs(
workingDir, {vcsBinary(), args}, vcsTimeoutS(), flags, nullptr, env); workingDir, {vcsBinary(), args}, vcsTimeoutS(), flags, nullptr, env);
const bool ok = resp.result == SynchronousProcessResponse::Finished; const bool ok = resp.result == SynchronousProcessResponse::Finished;

View File

@@ -36,7 +36,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/infobar.h> #include <utils/infobar.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/synchronousprocess.h> #include <utils/qtcprocess.h>
#include <QDate> #include <QDate>
#include <QDomDocument> #include <QDomDocument>
@@ -129,8 +129,8 @@ void UpdateInfoPlugin::startCheckForUpdates()
{ {
stopCheckForUpdates(); stopCheckForUpdates();
QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); Utils::Environment env = Utils::Environment::systemEnvironment();
env.insert(QLatin1String("QT_LOGGING_RULES"), QLatin1String("*=false")); env.set("QT_LOGGING_RULES", "*=false");
d->m_checkUpdatesCommand = new ShellCommand(QString(), env); d->m_checkUpdatesCommand = new ShellCommand(QString(), env);
d->m_checkUpdatesCommand->setDisplayName(tr("Checking for Updates")); d->m_checkUpdatesCommand->setDisplayName(tr("Checking for Updates"));
connect(d->m_checkUpdatesCommand, &ShellCommand::stdOutText, this, &UpdateInfoPlugin::collectCheckForUpdatesOutput); connect(d->m_checkUpdatesCommand, &ShellCommand::stdOutText, this, &UpdateInfoPlugin::collectCheckForUpdatesOutput);

View File

@@ -119,9 +119,9 @@ void VcsBaseClientImpl::enqueueJob(VcsCommand *cmd, const QStringList &args,
cmd->execute(); cmd->execute();
} }
QProcessEnvironment VcsBaseClientImpl::processEnvironment() const Environment VcsBaseClientImpl::processEnvironment() const
{ {
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); Environment environment = Environment::systemEnvironment();
VcsBase::setProcessEnvironment(&environment, false); VcsBase::setProcessEnvironment(&environment, false);
return environment; return environment;
} }

View File

@@ -84,7 +84,7 @@ public:
const QString &workingDirectory = QString(), const QString &workingDirectory = QString(),
const Utils::ExitCodeInterpreter &interpreter = Utils::defaultExitCodeInterpreter) const; const Utils::ExitCodeInterpreter &interpreter = Utils::defaultExitCodeInterpreter) const;
virtual QProcessEnvironment processEnvironment() const; virtual Utils::Environment processEnvironment() const;
// VCS functionality: // VCS functionality:
virtual VcsBaseEditorWidget *annotate( virtual VcsBaseEditorWidget *annotate(

View File

@@ -30,6 +30,8 @@
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/progressmanager/progressmanager.h>
#include <diffeditor/diffutils.h> #include <diffeditor/diffutils.h>
#include <utils/environment.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/runextensions.h> #include <utils/runextensions.h>
@@ -37,6 +39,7 @@
using namespace DiffEditor; using namespace DiffEditor;
using namespace Core; using namespace Core;
using namespace Utils;
namespace VcsBase { namespace VcsBase {
@@ -93,7 +96,7 @@ public:
VcsBaseDiffEditorController *q; VcsBaseDiffEditorController *q;
QString m_directory; QString m_directory;
QProcessEnvironment m_processEnvironment; Environment m_processEnvironment;
Utils::FilePath m_vcsBinary; Utils::FilePath m_vcsBinary;
int m_vscTimeoutS; int m_vscTimeoutS;
QString m_startupFile; QString m_startupFile;
@@ -294,7 +297,7 @@ void VcsBaseDiffEditorController::setVcsBinary(const Utils::FilePath &path)
d->m_vcsBinary = path; d->m_vcsBinary = path;
} }
void VcsBaseDiffEditorController::setProcessEnvironment(const QProcessEnvironment &value) void VcsBaseDiffEditorController::setProcessEnvironment(const Environment &value)
{ {
d->m_processEnvironment = value; d->m_processEnvironment = value;
} }

View File

@@ -29,14 +29,16 @@
#include <diffeditor/diffeditorcontroller.h> #include <diffeditor/diffeditorcontroller.h>
#include <QProcessEnvironment>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QTextCodec; class QTextCodec;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Core { class IDocument; } namespace Core { class IDocument; }
namespace Utils { class FilePath; }
namespace Utils {
class Environment;
class FilePath;
} // Utils
namespace VcsBase { namespace VcsBase {
@@ -50,7 +52,7 @@ public:
explicit VcsBaseDiffEditorController(Core::IDocument *document); explicit VcsBaseDiffEditorController(Core::IDocument *document);
~VcsBaseDiffEditorController() override; ~VcsBaseDiffEditorController() override;
void setProcessEnvironment(const QProcessEnvironment &value); void setProcessEnvironment(const Utils::Environment &value);
void setVcsBinary(const Utils::FilePath &path); void setVcsBinary(const Utils::FilePath &path);
void setVcsTimeoutS(int value); void setVcsTimeoutS(int value);
void setWorkingDirectory(const QString &workingDir); void setWorkingDirectory(const QString &workingDir);

View File

@@ -742,16 +742,14 @@ QString source(IDocument *document)
return document->property(SOURCE_PROPERTY).toString(); return document->property(SOURCE_PROPERTY).toString();
} }
void setProcessEnvironment(QProcessEnvironment *e, void setProcessEnvironment(Environment *e, bool forceCLocale, const QString &sshPromptBinary)
bool forceCLocale,
const QString &sshPromptBinary)
{ {
if (forceCLocale) { if (forceCLocale) {
e->insert("LANG", "C"); e->set("LANG", "C");
e->insert("LANGUAGE", "C"); e->set("LANGUAGE", "C");
} }
if (!sshPromptBinary.isEmpty()) if (!sshPromptBinary.isEmpty())
e->insert("SSH_ASKPASS", sshPromptBinary); e->set("SSH_ASKPASS", sshPromptBinary);
} }
// Run a process synchronously, returning Utils::SynchronousProcessResponse // Run a process synchronously, returning Utils::SynchronousProcessResponse
@@ -761,9 +759,9 @@ SynchronousProcessResponse runVcs(const QString &workingDir,
int timeOutS, int timeOutS,
unsigned flags, unsigned flags,
QTextCodec *outputCodec, 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.addFlags(flags);
command.setCodec(outputCodec); command.setCodec(outputCodec);
return command.runCommand(cmd, timeOutS); return command.runCommand(cmd, timeOutS);

View File

@@ -30,10 +30,11 @@
#include <coreplugin/icontext.h> #include <coreplugin/icontext.h>
#include <coreplugin/iversioncontrol.h> #include <coreplugin/iversioncontrol.h>
#include <coreplugin/vcsmanager.h> #include <coreplugin/vcsmanager.h>
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <QList> #include <utils/environment.h>
#include <QProcessEnvironment>
#include <QSharedDataPointer> #include <QSharedDataPointer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@@ -138,7 +139,7 @@ VCSBASE_EXPORT bool isSshPromptConfigured();
// Sets up SSH graphical password prompting (note that the latter // Sets up SSH graphical password prompting (note that the latter
// requires a terminal-less process) and sets LANG to 'C' to force English // requires a terminal-less process) and sets LANG to 'C' to force English
// (suppress LOCALE warnings/parse commands output) if desired. // (suppress LOCALE warnings/parse commands output) if desired.
VCSBASE_EXPORT void setProcessEnvironment(QProcessEnvironment *e, VCSBASE_EXPORT void setProcessEnvironment(Utils::Environment *e,
bool forceCLocale, bool forceCLocale,
const QString &sshPasswordPrompt = sshPrompt()); const QString &sshPasswordPrompt = sshPrompt());
// Sets the source of editor contents, can be directory or file. // 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, int timeOutS,
unsigned flags = 0, unsigned flags = 0,
QTextCodec *outputCodec = nullptr, QTextCodec *outputCodec = nullptr,
const QProcessEnvironment &env = {}); const Utils::Environment &env = {});
class VCSBASE_EXPORT VcsBasePluginPrivate : public Core::IVersionControl class VCSBASE_EXPORT VcsBasePluginPrivate : public Core::IVersionControl
{ {

View File

@@ -30,16 +30,13 @@
#include <coreplugin/documentmanager.h> #include <coreplugin/documentmanager.h>
#include <coreplugin/vcsmanager.h> #include <coreplugin/vcsmanager.h>
#include <utils/globalfilechangeblocker.h> #include <utils/globalfilechangeblocker.h>
#include <utils/synchronousprocess.h> #include <utils/qtcprocess.h>
#include <QProcessEnvironment>
using namespace Utils; using namespace Utils;
namespace VcsBase { namespace VcsBase {
VcsCommand::VcsCommand(const QString &workingDirectory, VcsCommand::VcsCommand(const QString &workingDirectory, const Environment &environment) :
const QProcessEnvironment &environment) :
Core::ShellCommand(workingDirectory, environment), Core::ShellCommand(workingDirectory, environment),
m_preventRepositoryChanged(false) 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()); VcsBase::setProcessEnvironment(&env, flags() & ForceCLocale, VcsBase::sshPrompt());
return env; return env;
} }

View File

@@ -41,9 +41,9 @@ public:
ExpectRepoChanges = 0x2000, // Expect changes in repository by the command 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, Utils::SynchronousProcessResponse runCommand(const Utils::CommandLine &command,
int timeoutS, int timeoutS,