forked from qt-creator/qt-creator
Vcs/Utils: Use Utils::Environment for ShellCommand
Change-Id: Ica289ab2f83d52270923c4ff4983860cfbe0b494 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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(
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user