Utils: Replace SynchronousCommand::flags by a named bool

The potential extensibility was never used, and a similar use case
in QtcProcess (setLowPriority()) used a named setter.

Change-Id: I77d84ea2206995d5069265f8df78f40cf2ba8a36
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2021-05-05 15:23:34 +02:00
parent 40e2bb2551
commit 9a7a0098a3
8 changed files with 21 additions and 37 deletions

View File

@@ -103,6 +103,7 @@ public:
bool m_progressiveOutput = false;
bool m_hadOutput = false;
bool m_aborted = false;
bool m_disableUnixTerminal = false;
};
ShellCommandPrivate::Job::Job(const QString &wd, const CommandLine &command,
@@ -224,11 +225,6 @@ void ShellCommand::cancel()
emit terminate();
}
unsigned ShellCommand::processFlags() const
{
return 0;
}
void ShellCommand::addTask(QFuture<void> &future)
{
Q_UNUSED(future)
@@ -357,7 +353,8 @@ SynchronousProcessResponse ShellCommand::runFullySynchronous(const CommandLine &
{
// Set up process
SynchronousProcess process;
process.setFlags(processFlags());
if (d->m_disableUnixTerminal)
process.setDisableUnixTerminal();
const QString dir = workDirectory(workingDirectory);
if (!dir.isEmpty())
process.setWorkingDirectory(dir);
@@ -401,7 +398,8 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const CommandLine &cmd,
process.setTimeoutS(timeoutS);
if (d->m_codec)
process.setCodec(d->m_codec);
process.setFlags(processFlags());
if (d->m_disableUnixTerminal)
process.setDisableUnixTerminal();
const QString dir = workDirectory(workingDirectory);
if (!dir.isEmpty())
process.setWorkingDirectory(dir);
@@ -489,6 +487,11 @@ void ShellCommand::setOutputProxyFactory(const std::function<OutputProxy *()> &f
d->m_proxyFactory = factory;
}
void ShellCommand::setDisableUnixTerminal()
{
d->m_disableUnixTerminal = true;
}
ProgressParser::ProgressParser() :
m_futureMutex(new QMutex)
{ }

View File

@@ -141,6 +141,7 @@ public:
void setProgressiveOutput(bool progressive);
void setOutputProxyFactory(const std::function<OutputProxy *()> &factory);
void setDisableUnixTerminal();
// This is called once per job in a thread.
// When called from the UI thread it will execute fully synchronously, so no signals will
@@ -162,7 +163,6 @@ signals:
void terminate(); // Internal
protected:
virtual unsigned processFlags() const;
virtual void addTask(QFuture<void> &future);
int timeoutS() const;
QString workDirectory(const QString &wd) const;

View File

@@ -93,8 +93,7 @@ class TerminalControllingProcess : public QtcProcess
public:
TerminalControllingProcess();
unsigned flags() const { return m_flags; }
void setFlags(unsigned tc) { m_flags = tc; }
void setDisableUnixTerminal() { m_disableUnixTerminal = true; }
protected:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@@ -104,7 +103,7 @@ protected:
private:
void setupChildProcess_impl();
unsigned m_flags = 0;
bool m_disableUnixTerminal = false;
};
TerminalControllingProcess::TerminalControllingProcess()
@@ -125,7 +124,7 @@ void TerminalControllingProcess::setupChildProcess_impl()
{
#ifdef Q_OS_UNIX
// Disable terminal by becoming a session leader.
if (m_flags & SynchronousProcess::UnixTerminalDisabled)
if (m_disableUnixTerminal)
setsid();
#endif
}
@@ -410,14 +409,9 @@ void SynchronousProcess::setEnvironment(const Environment &e)
d->m_process.setEnvironment(Environment(e));
}
unsigned SynchronousProcess::flags() const
void SynchronousProcess::setDisableUnixTerminal()
{
return d->m_process.flags();
}
void SynchronousProcess::setFlags(unsigned tc)
{
d->m_process.setFlags(tc);
d->m_process.setDisableUnixTerminal();
}
void SynchronousProcess::setExitCodeInterpreter(const ExitCodeInterpreter &interpreter)

View File

@@ -85,11 +85,6 @@ class QTCREATOR_UTILS_EXPORT SynchronousProcess : public QObject
{
Q_OBJECT
public:
enum Flags {
// Unix: Do not give the child process a terminal for input prompting.
UnixTerminalDisabled = 0x1
};
SynchronousProcess();
~SynchronousProcess() override;
@@ -119,8 +114,8 @@ public:
void setWorkingDirectory(const QString &workingDirectory);
QString workingDirectory() const;
unsigned flags() const;
void setFlags(unsigned);
// Unix: Do not give the child process a terminal for input prompting.
void setDisableUnixTerminal();
void setExitCodeInterpreter(const ExitCodeInterpreter &interpreter);
ExitCodeInterpreter exitCodeInterpreter() const;

View File

@@ -200,7 +200,7 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config)
SynchronousProcess cmake;
cmake.setTimeoutS(5);
cmake.setFlags(SynchronousProcess::UnixTerminalDisabled);
cmake.setDisableUnixTerminal();
Environment env = Environment::systemEnvironment();
Environment::setupEnglishOutput(&env);
cmake.setEnvironment(env);

View File

@@ -193,7 +193,7 @@ Utils::SynchronousProcessResponse CMakeTool::run(const QStringList &args, int ti
{
Utils::SynchronousProcess cmake;
cmake.setTimeoutS(timeoutS);
cmake.setFlags(Utils::SynchronousProcess::UnixTerminalDisabled);
cmake.setDisableUnixTerminal();
Utils::Environment env = Utils::Environment::systemEnvironment();
Utils::Environment::setupEnglishOutput(&env);
cmake.setEnvironment(env);

View File

@@ -41,6 +41,7 @@ VcsCommand::VcsCommand(const QString &workingDirectory, const Environment &envir
m_preventRepositoryChanged(false)
{
VcsOutputWindow::setRepository(workingDirectory);
setDisableUnixTerminal();
setOutputProxyFactory([this] {
auto proxy = new OutputProxy;
VcsOutputWindow *outputWindow = VcsOutputWindow::instance();
@@ -94,14 +95,6 @@ void VcsCommand::emitRepositoryChanged(const QString &workingDirectory)
Core::VcsManager::emitRepositoryChanged(workDirectory(workingDirectory));
}
unsigned VcsCommand::processFlags() const
{
unsigned processFlags = 0;
if (!VcsBase::sshPrompt().isEmpty() && (flags() & SshPasswordPrompt))
processFlags |= SynchronousProcess::UnixTerminalDisabled;
return processFlags;
}
void VcsCommand::coreAboutToClose()
{
m_preventRepositoryChanged = true;

View File

@@ -51,7 +51,6 @@ public:
const Utils::ExitCodeInterpreter &interpreter = Utils::defaultExitCodeInterpreter) override;
private:
unsigned processFlags() const override;
void emitRepositoryChanged(const QString &workingDirectory);
void coreAboutToClose() override;