Utils: Move process arguments class out of QtcProcess

The main QtcProcess interface is nowadays a CommandLine, with no
explicit references left to QtcProcess::Arguments and related static
helper functions, so it only clutters the QtcProcess class interface

So move these items out of QtcProcess, later potentially to a separate
file pair.

Change-Id: I45c300b656f5b30e2e2717232c855fdd97c2d1d7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-05-06 13:07:36 +02:00
parent 8aafe36d01
commit f2f40efa03
62 changed files with 437 additions and 438 deletions
+1 -1
View File
@@ -102,7 +102,7 @@ struct SftpSession::SftpSessionPrivate
// The second newline forces the prompt to appear after the command has finished. // The second newline forces the prompt to appear after the command has finished.
sftpProc.write(commandString(activeCommand.type) + ' ' sftpProc.write(commandString(activeCommand.type) + ' '
+ QtcProcess::Arguments::createUnixArgs(activeCommand.paths) + ProcessArgs::createUnixArgs(activeCommand.paths)
.toString().toLocal8Bit() + "\n\n"); .toString().toLocal8Bit() + "\n\n");
} }
}; };
+4 -4
View File
@@ -151,7 +151,7 @@ void SftpTransfer::doStart()
for (const QString &dir : d->dirsToCreate()) { for (const QString &dir : d->dirsToCreate()) {
switch (d->transferType) { switch (d->transferType) {
case Internal::FileTransferType::Upload: case Internal::FileTransferType::Upload:
batchFile.write("-mkdir " + QtcProcess::quoteArgUnix(dir).toLocal8Bit() + '\n'); batchFile.write("-mkdir " + ProcessArgs::quoteArgUnix(dir).toLocal8Bit() + '\n');
break; break;
case Internal::FileTransferType::Download: case Internal::FileTransferType::Download:
if (!QDir::root().mkpath(dir)) { if (!QDir::root().mkpath(dir)) {
@@ -169,14 +169,14 @@ void SftpTransfer::doStart()
QFileInfo fi(f.sourceFile); QFileInfo fi(f.sourceFile);
if (fi.isSymLink()) { if (fi.isSymLink()) {
link = true; link = true;
batchFile.write("-rm " + QtcProcess::quoteArgUnix(f.targetFile).toLocal8Bit() batchFile.write("-rm " + ProcessArgs::quoteArgUnix(f.targetFile).toLocal8Bit()
+ '\n'); + '\n');
sourceFileOrLinkTarget = fi.dir().relativeFilePath(fi.symLinkTarget()); // see QTBUG-5817. sourceFileOrLinkTarget = fi.dir().relativeFilePath(fi.symLinkTarget()); // see QTBUG-5817.
} }
} }
batchFile.write(d->transferCommand(link) + ' ' batchFile.write(d->transferCommand(link) + ' '
+ QtcProcess::quoteArgUnix(sourceFileOrLinkTarget).toLocal8Bit() + ' ' + ProcessArgs::quoteArgUnix(sourceFileOrLinkTarget).toLocal8Bit() + ' '
+ QtcProcess::quoteArgUnix(f.targetFile).toLocal8Bit() + '\n'); + ProcessArgs::quoteArgUnix(f.targetFile).toLocal8Bit() + '\n');
} }
d->sftpProc.setStandardInputFile(batchFile.fileName()); d->sftpProc.setStandardInputFile(batchFile.fileName());
d->sftpProc.start(sftpBinary.toString(), d->connectionArgs); d->sftpProc.start(sftpBinary.toString(), d->connectionArgs);
+29 -29
View File
@@ -232,11 +232,11 @@ TerminalCommand ConsoleProcess::terminalEmulator(const QSettings *settings)
const QString value = settings->value("General/TerminalEmulator").toString().trimmed(); const QString value = settings->value("General/TerminalEmulator").toString().trimmed();
if (!value.isEmpty()) { if (!value.isEmpty()) {
// split off command and options // split off command and options
const QStringList splitCommand = QtcProcess::splitArgs(value); const QStringList splitCommand = ProcessArgs::splitArgs(value);
if (QTC_GUARD(!splitCommand.isEmpty())) { if (QTC_GUARD(!splitCommand.isEmpty())) {
const QString command = splitCommand.first(); const QString command = splitCommand.first();
const QStringList quotedArgs = Utils::transform(splitCommand.mid(1), const QStringList quotedArgs = Utils::transform(splitCommand.mid(1),
&QtcProcess::quoteArgUnix); &ProcessArgs::quoteArgUnix);
const QString options = quotedArgs.join(' '); const QString options = quotedArgs.join(' ');
return {command, "", options}; return {command, "", options};
} }
@@ -358,7 +358,7 @@ bool ConsoleProcess::startTerminalEmulator(QSettings *settings, const QString &w
const TerminalCommand term = terminalEmulator(settings); const TerminalCommand term = terminalEmulator(settings);
QProcess process; QProcess process;
process.setProgram(term.command); process.setProgram(term.command);
process.setArguments(QtcProcess::splitArgs(term.openArgs)); process.setArguments(ProcessArgs::splitArgs(term.openArgs));
process.setProcessEnvironment(env.toProcessEnvironment()); process.setProcessEnvironment(env.toProcessEnvironment());
process.setWorkingDirectory(workingDir); process.setWorkingDirectory(workingDir);
@@ -394,11 +394,11 @@ bool ConsoleProcess::start()
pcmd = d->m_commandLine.executable().toString(); pcmd = d->m_commandLine.executable().toString();
pargs = d->m_commandLine.arguments(); pargs = d->m_commandLine.arguments();
} else { } else {
QtcProcess::Arguments outArgs; ProcessArgs outArgs;
QtcProcess::prepareCommand(d->m_commandLine.executable().toString(), ProcessArgs::prepareCommand(d->m_commandLine.executable().toString(),
d->m_commandLine.arguments(), d->m_commandLine.arguments(),
&pcmd, &outArgs, OsTypeWindows, &pcmd, &outArgs, OsTypeWindows,
&d->m_environment, &d->m_workingDir); &d->m_environment, &d->m_workingDir);
pargs = outArgs.toWindowsArgs(); pargs = outArgs.toWindowsArgs();
} }
@@ -452,7 +452,7 @@ bool ConsoleProcess::start()
return false; return false;
} }
d->m_tempFile->flush(); d->m_tempFile->flush();
} }
STARTUPINFO si; STARTUPINFO si;
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
@@ -497,19 +497,19 @@ bool ConsoleProcess::start()
#else #else
QtcProcess::SplitError perr; ProcessArgs::SplitError perr;
QtcProcess::Arguments pargs = QtcProcess::prepareArgs(d->m_commandLine.arguments(), ProcessArgs pargs = ProcessArgs::prepareArgs(d->m_commandLine.arguments(),
&perr, &perr,
HostOsInfo::hostOs(), HostOsInfo::hostOs(),
&d->m_environment, &d->m_environment,
&d->m_workingDir, &d->m_workingDir,
d->m_abortOnMetaChars); d->m_abortOnMetaChars);
QString pcmd; QString pcmd;
if (perr == QtcProcess::SplitOk) { if (perr == ProcessArgs::SplitOk) {
pcmd = d->m_commandLine.executable().toString(); pcmd = d->m_commandLine.executable().toString();
} else { } else {
if (perr != QtcProcess::FoundMeta) { if (perr != ProcessArgs::FoundMeta) {
emitError(QProcess::FailedToStart, tr("Quoting error in command.")); emitError(QProcess::FailedToStart, tr("Quoting error in command."));
return false; return false;
} }
@@ -520,20 +520,20 @@ bool ConsoleProcess::start()
return false; return false;
} }
pcmd = qEnvironmentVariable("SHELL", "/bin/sh"); pcmd = qEnvironmentVariable("SHELL", "/bin/sh");
pargs = QtcProcess::Arguments::createUnixArgs( pargs = ProcessArgs::createUnixArgs(
{"-c", (QtcProcess::quoteArg(d->m_commandLine.executable().toString()) {"-c", (ProcessArgs::quoteArg(d->m_commandLine.executable().toString())
+ ' ' + d->m_commandLine.arguments())}); + ' ' + d->m_commandLine.arguments())});
} }
QtcProcess::SplitError qerr; ProcessArgs::SplitError qerr;
const TerminalCommand terminal = terminalEmulator(d->m_settings); const TerminalCommand terminal = terminalEmulator(d->m_settings);
const QtcProcess::Arguments terminalArgs = QtcProcess::prepareArgs(terminal.executeArgs, const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs,
&qerr, &qerr,
HostOsInfo::hostOs(), HostOsInfo::hostOs(),
&d->m_environment, &d->m_environment,
&d->m_workingDir); &d->m_workingDir);
if (qerr != QtcProcess::SplitOk) { if (qerr != ProcessArgs::SplitOk) {
emitError(QProcess::FailedToStart, qerr == QtcProcess::BadQuoting emitError(QProcess::FailedToStart, qerr == ProcessArgs::BadQuoting
? tr("Quoting error in terminal command.") ? tr("Quoting error in terminal command.")
: tr("Terminal command may not be a shell command.")); : tr("Terminal command may not be a shell command."));
return false; return false;
@@ -589,7 +589,7 @@ bool ConsoleProcess::start()
<< pargs.toUnixArgs(); << pargs.toUnixArgs();
if (terminal.needsQuotes) if (terminal.needsQuotes)
allArgs = QStringList { QtcProcess::joinArgs(allArgs) }; allArgs = QStringList { ProcessArgs::joinArgs(allArgs) };
d->m_process.setEnvironment(env); d->m_process.setEnvironment(env);
d->m_process.start(terminal.command, allArgs); d->m_process.start(terminal.command, allArgs);
+3 -3
View File
@@ -100,7 +100,7 @@ CommandLine::CommandLine(const FilePath &exe, const QString &args, RawType)
void CommandLine::addArg(const QString &arg, OsType osType) void CommandLine::addArg(const QString &arg, OsType osType)
{ {
QtcProcess::addArg(&m_arguments, arg, osType); ProcessArgs::addArg(&m_arguments, arg, osType);
} }
void CommandLine::addArgs(const QStringList &inArgs, OsType osType) void CommandLine::addArgs(const QStringList &inArgs, OsType osType)
@@ -119,7 +119,7 @@ void CommandLine::addArgs(const CommandLine &cmd, OsType osType)
void CommandLine::addArgs(const QString &inArgs, RawType) void CommandLine::addArgs(const QString &inArgs, RawType)
{ {
QtcProcess::addArgs(&m_arguments, inArgs); ProcessArgs::addArgs(&m_arguments, inArgs);
} }
QString CommandLine::toUserOutput() const QString CommandLine::toUserOutput() const
@@ -132,7 +132,7 @@ QString CommandLine::toUserOutput() const
QStringList CommandLine::splitArguments(OsType osType) const QStringList CommandLine::splitArguments(OsType osType) const
{ {
return QtcProcess::splitArgs(m_arguments, osType); return ProcessArgs::splitArgs(m_arguments, osType);
} }
/*! \class Utils::FileUtils /*! \class Utils::FileUtils
+1 -1
View File
@@ -327,7 +327,7 @@ QVariant MacroExpander::expandVariant(const QVariant &v) const
QString MacroExpander::expandProcessArgs(const QString &argsWithVariables) const QString MacroExpander::expandProcessArgs(const QString &argsWithVariables) const
{ {
return QtcProcess::expandMacros(argsWithVariables, d); return ProcessArgs::expandMacros(argsWithVariables, d);
} }
static QByteArray fullPrefix(const QByteArray &prefix) static QByteArray fullPrefix(const QByteArray &prefix)
+59 -59
View File
@@ -136,8 +136,8 @@ static void envExpandWin(QString &args, const Environment *env, const QString *p
} }
} }
static QtcProcess::Arguments prepareArgsWin(const QString &_args, QtcProcess::SplitError *err, static ProcessArgs prepareArgsWin(const QString &_args, ProcessArgs::SplitError *err,
const Environment *env, const QString *pwd) const Environment *env, const QString *pwd)
{ {
QString args(_args); QString args(_args);
@@ -146,8 +146,8 @@ static QtcProcess::Arguments prepareArgsWin(const QString &_args, QtcProcess::Sp
} else { } else {
if (args.indexOf(QLatin1Char('%')) >= 0) { if (args.indexOf(QLatin1Char('%')) >= 0) {
if (err) if (err)
*err = QtcProcess::FoundMeta; *err = ProcessArgs::FoundMeta;
return QtcProcess::Arguments::createWindowsArgs(QString()); return ProcessArgs::createWindowsArgs(QString());
} }
} }
@@ -165,14 +165,14 @@ static QtcProcess::Arguments prepareArgsWin(const QString &_args, QtcProcess::Sp
} while (args.unicode()[p].unicode() != '"'); } while (args.unicode()[p].unicode() != '"');
} else if (isMetaCharWin(c)) { } else if (isMetaCharWin(c)) {
if (err) if (err)
*err = QtcProcess::FoundMeta; *err = ProcessArgs::FoundMeta;
return QtcProcess::Arguments::createWindowsArgs(QString()); return ProcessArgs::createWindowsArgs(QString());
} }
} }
if (err) if (err)
*err = QtcProcess::SplitOk; *err = ProcessArgs::SplitOk;
return QtcProcess::Arguments::createWindowsArgs(args); return ProcessArgs::createWindowsArgs(args);
} }
inline static bool isWhiteSpaceWin(ushort c) inline static bool isWhiteSpaceWin(ushort c)
@@ -180,12 +180,12 @@ inline static bool isWhiteSpaceWin(ushort c)
return c == ' ' || c == '\t'; return c == ' ' || c == '\t';
} }
static QStringList doSplitArgsWin(const QString &args, QtcProcess::SplitError *err) static QStringList doSplitArgsWin(const QString &args, ProcessArgs::SplitError *err)
{ {
QStringList ret; QStringList ret;
if (err) if (err)
*err = QtcProcess::SplitOk; *err = ProcessArgs::SplitOk;
int p = 0; int p = 0;
const int length = args.length(); const int length = args.length();
@@ -239,7 +239,7 @@ static QStringList doSplitArgsWin(const QString &args, QtcProcess::SplitError *e
ret.append(arg); ret.append(arg);
if (inquote) { if (inquote) {
if (err) if (err)
*err = QtcProcess::BadQuoting; *err = ProcessArgs::BadQuoting;
return QStringList(); return QStringList();
} }
break; break;
@@ -314,15 +314,15 @@ static QStringList doSplitArgsWin(const QString &args, QtcProcess::SplitError *e
static QStringList splitArgsWin(const QString &_args, bool abortOnMeta, static QStringList splitArgsWin(const QString &_args, bool abortOnMeta,
QtcProcess::SplitError *err, ProcessArgs::SplitError *err,
const Environment *env, const QString *pwd) const Environment *env, const QString *pwd)
{ {
if (abortOnMeta) { if (abortOnMeta) {
QtcProcess::SplitError perr; ProcessArgs::SplitError perr;
if (!err) if (!err)
err = &perr; err = &perr;
QString args = prepareArgsWin(_args, &perr, env, pwd).toWindowsArgs(); QString args = prepareArgsWin(_args, &perr, env, pwd).toWindowsArgs();
if (*err != QtcProcess::SplitOk) if (*err != ProcessArgs::SplitOk)
return QStringList(); return QStringList();
return doSplitArgsWin(args, err); return doSplitArgsWin(args, err);
} else { } else {
@@ -347,7 +347,7 @@ static bool isMetaUnix(QChar cUnicode)
} }
static QStringList splitArgsUnix(const QString &args, bool abortOnMeta, static QStringList splitArgsUnix(const QString &args, bool abortOnMeta,
QtcProcess::SplitError *err, ProcessArgs::SplitError *err,
const Environment *env, const QString *pwd) const Environment *env, const QString *pwd)
{ {
static const QString pwdName = QLatin1String("PWD"); static const QString pwdName = QLatin1String("PWD");
@@ -522,17 +522,17 @@ static QStringList splitArgsUnix(const QString &args, bool abortOnMeta,
okret: okret:
if (err) if (err)
*err = QtcProcess::SplitOk; *err = ProcessArgs::SplitOk;
return ret; return ret;
quoteerr: quoteerr:
if (err) if (err)
*err = QtcProcess::BadQuoting; *err = ProcessArgs::BadQuoting;
return QStringList(); return QStringList();
metaerr: metaerr:
if (err) if (err)
*err = QtcProcess::FoundMeta; *err = ProcessArgs::FoundMeta;
return QStringList(); return QStringList();
} }
@@ -555,9 +555,9 @@ inline static bool hasSpecialCharsUnix(const QString &arg)
return false; return false;
} }
QStringList QtcProcess::splitArgs(const QString &args, OsType osType, QStringList ProcessArgs::splitArgs(const QString &args, OsType osType,
bool abortOnMeta, QtcProcess::SplitError *err, bool abortOnMeta, ProcessArgs::SplitError *err,
const Environment *env, const QString *pwd) const Environment *env, const QString *pwd)
{ {
if (osType == OsTypeWindows) if (osType == OsTypeWindows)
return splitArgsWin(args, abortOnMeta, err, env, pwd); return splitArgsWin(args, abortOnMeta, err, env, pwd);
@@ -565,7 +565,7 @@ QStringList QtcProcess::splitArgs(const QString &args, OsType osType,
return splitArgsUnix(args, abortOnMeta, err, env, pwd); return splitArgsUnix(args, abortOnMeta, err, env, pwd);
} }
QString QtcProcess::quoteArgUnix(const QString &arg) QString ProcessArgs::quoteArgUnix(const QString &arg)
{ {
if (arg.isEmpty()) if (arg.isEmpty())
return QString::fromLatin1("''"); return QString::fromLatin1("''");
@@ -626,17 +626,17 @@ static QString quoteArgWin(const QString &arg)
return ret; return ret;
} }
QtcProcess::Arguments QtcProcess::prepareArgs(const QString &cmd, SplitError *err, OsType osType, ProcessArgs ProcessArgs::prepareArgs(const QString &cmd, SplitError *err, OsType osType,
const Environment *env, const QString *pwd, bool abortOnMeta) const Environment *env, const QString *pwd, bool abortOnMeta)
{ {
if (osType == OsTypeWindows) if (osType == OsTypeWindows)
return prepareArgsWin(cmd, err, env, pwd); return prepareArgsWin(cmd, err, env, pwd);
else else
return Arguments::createUnixArgs(splitArgs(cmd, osType, abortOnMeta, err, env, pwd)); return createUnixArgs(splitArgs(cmd, osType, abortOnMeta, err, env, pwd));
} }
QString QtcProcess::quoteArg(const QString &arg, OsType osType) QString ProcessArgs::quoteArg(const QString &arg, OsType osType)
{ {
if (osType == OsTypeWindows) if (osType == OsTypeWindows)
return quoteArgWin(arg); return quoteArgWin(arg);
@@ -644,14 +644,14 @@ QString QtcProcess::quoteArg(const QString &arg, OsType osType)
return quoteArgUnix(arg); return quoteArgUnix(arg);
} }
void QtcProcess::addArg(QString *args, const QString &arg, OsType osType) void ProcessArgs::addArg(QString *args, const QString &arg, OsType osType)
{ {
if (!args->isEmpty()) if (!args->isEmpty())
*args += QLatin1Char(' '); *args += QLatin1Char(' ');
*args += quoteArg(arg, osType); *args += quoteArg(arg, osType);
} }
QString QtcProcess::joinArgs(const QStringList &args, OsType osType) QString ProcessArgs::joinArgs(const QStringList &args, OsType osType)
{ {
QString ret; QString ret;
for (const QString &arg : args) for (const QString &arg : args)
@@ -659,7 +659,7 @@ QString QtcProcess::joinArgs(const QStringList &args, OsType osType)
return ret; return ret;
} }
void QtcProcess::addArgs(QString *args, const QString &inArgs) void ProcessArgs::addArgs(QString *args, const QString &inArgs)
{ {
if (!inArgs.isEmpty()) { if (!inArgs.isEmpty()) {
if (!args->isEmpty()) if (!args->isEmpty())
@@ -668,28 +668,28 @@ void QtcProcess::addArgs(QString *args, const QString &inArgs)
} }
} }
void QtcProcess::addArgs(QString *args, const QStringList &inArgs) void ProcessArgs::addArgs(QString *args, const QStringList &inArgs)
{ {
for (const QString &arg : inArgs) for (const QString &arg : inArgs)
addArg(args, arg); addArg(args, arg);
} }
bool QtcProcess::prepareCommand(const QString &command, const QString &arguments, bool ProcessArgs::prepareCommand(const QString &command, const QString &arguments,
QString *outCmd, Arguments *outArgs, OsType osType, QString *outCmd, ProcessArgs *outArgs, OsType osType,
const Environment *env, const QString *pwd) const Environment *env, const QString *pwd)
{ {
QtcProcess::SplitError err; ProcessArgs::SplitError err;
*outArgs = QtcProcess::prepareArgs(arguments, &err, osType, env, pwd); *outArgs = ProcessArgs::prepareArgs(arguments, &err, osType, env, pwd);
if (err == QtcProcess::SplitOk) { if (err == ProcessArgs::SplitOk) {
*outCmd = command; *outCmd = command;
} else { } else {
if (osType == OsTypeWindows) { if (osType == OsTypeWindows) {
*outCmd = QString::fromLatin1(qgetenv("COMSPEC")); *outCmd = QString::fromLatin1(qgetenv("COMSPEC"));
*outArgs = Arguments::createWindowsArgs(QLatin1String("/v:off /s /c \"") *outArgs = ProcessArgs::createWindowsArgs(QLatin1String("/v:off /s /c \"")
+ quoteArg(QDir::toNativeSeparators(command)) + QLatin1Char(' ') + arguments + quoteArg(QDir::toNativeSeparators(command)) + QLatin1Char(' ') + arguments
+ QLatin1Char('"')); + QLatin1Char('"'));
} else { } else {
if (err != QtcProcess::FoundMeta) if (err != ProcessArgs::FoundMeta)
return false; return false;
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
*outCmd = qEnvironmentVariable("SHELL", "/bin/sh"); *outCmd = qEnvironmentVariable("SHELL", "/bin/sh");
@@ -698,7 +698,7 @@ bool QtcProcess::prepareCommand(const QString &command, const QString &arguments
*outCmd = qEnvironmentVariableIsSet("SHELL") ? QString::fromLocal8Bit(qgetenv("SHELL")) *outCmd = qEnvironmentVariableIsSet("SHELL") ? QString::fromLocal8Bit(qgetenv("SHELL"))
: QString("/bin/sh"); : QString("/bin/sh");
#endif #endif
*outArgs = Arguments::createUnixArgs( *outArgs = ProcessArgs::createUnixArgs(
QStringList({"-c", (quoteArg(command) + ' ' + arguments)})); QStringList({"-c", (quoteArg(command) + ' ' + arguments)}));
} }
} }
@@ -853,16 +853,16 @@ void QtcProcess::start()
const QString &workDir = workingDirectory(); const QString &workDir = workingDirectory();
QString command; QString command;
QtcProcess::Arguments arguments; ProcessArgs arguments;
bool success = prepareCommand(d->m_commandLine.executable().toString(), bool success = ProcessArgs::prepareCommand(d->m_commandLine.executable().toString(),
d->m_commandLine.arguments(), d->m_commandLine.arguments(),
&command, &arguments, osType, &env, &workDir); &command, &arguments, osType, &env, &workDir);
if (osType == OsTypeWindows) { if (osType == OsTypeWindows) {
QString args; QString args;
if (d->m_useCtrlCStub) { if (d->m_useCtrlCStub) {
if (d->m_lowPriority) if (d->m_lowPriority)
addArg(&args, "-nice"); ProcessArgs::addArg(&args, "-nice");
addArg(&args, QDir::toNativeSeparators(command)); ProcessArgs::addArg(&args, QDir::toNativeSeparators(command));
command = QCoreApplication::applicationDirPath() command = QCoreApplication::applicationDirPath()
+ QLatin1String("/qtcreator_ctrlc_stub.exe"); + QLatin1String("/qtcreator_ctrlc_stub.exe");
} else if (d->m_lowPriority) { } else if (d->m_lowPriority) {
@@ -872,7 +872,7 @@ void QtcProcess::start()
}); });
#endif #endif
} }
QtcProcess::addArgs(&args, arguments.toWindowsArgs()); ProcessArgs::addArgs(&args, arguments.toWindowsArgs());
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
setNativeArguments(args); setNativeArguments(args);
#endif #endif
@@ -1046,7 +1046,7 @@ static int quoteArgInternalWin(QString &ret, int bslashes)
* \return false if the string could not be parsed and therefore no safe * \return false if the string could not be parsed and therefore no safe
* substitution was possible * substitution was possible
*/ */
bool QtcProcess::expandMacros(QString *cmd, AbstractMacroExpander *mx, OsType osType) bool ProcessArgs::expandMacros(QString *cmd, AbstractMacroExpander *mx, OsType osType)
{ {
QString str = *cmd; QString str = *cmd;
if (str.isEmpty()) if (str.isEmpty())
@@ -1180,7 +1180,7 @@ bool QtcProcess::expandMacros(QString *cmd, AbstractMacroExpander *mx, OsType os
break; break;
case CrtClosed: case CrtClosed:
// Two consecutive quotes make a literal quote - and // Two consecutive quotes make a literal quote - and
// still close quoting. See QtcProcess::quoteArg(). // still close quoting. See quoteArg().
crtState = CrtInWord; crtState = CrtInWord;
break; break;
case CrtHadQuote: case CrtHadQuote:
@@ -1370,7 +1370,7 @@ bool QtcProcess::expandMacros(QString *cmd, AbstractMacroExpander *mx, OsType os
return true; return true;
} }
QString QtcProcess::expandMacros(const QString &str, AbstractMacroExpander *mx, OsType osType) QString ProcessArgs::expandMacros(const QString &str, AbstractMacroExpander *mx, OsType osType)
{ {
QString ret = str; QString ret = str;
expandMacros(&ret, mx, osType); expandMacros(&ret, mx, osType);
@@ -1506,7 +1506,7 @@ bool QtcProcess::readDataFromProcess(int timeoutS,
return finished; return finished;
} }
bool QtcProcess::ArgIterator::next() bool ProcessArgs::ArgIterator::next()
{ {
// We delay the setting of m_prev so we can still delete the last argument // We delay the setting of m_prev so we can still delete the last argument
// after we find that there are no more arguments. It's a bit of a hack ... // after we find that there are no more arguments. It's a bit of a hack ...
@@ -1775,7 +1775,7 @@ QString QtcProcess::normalizeNewlines(const QString &text)
return res; return res;
} }
void QtcProcess::ArgIterator::deleteArg() void ProcessArgs::ArgIterator::deleteArg()
{ {
if (!m_prev) if (!m_prev)
while (m_pos < m_str->length() && m_str->at(m_pos).isSpace()) while (m_pos < m_str->length() && m_str->at(m_pos).isSpace())
@@ -1784,7 +1784,7 @@ void QtcProcess::ArgIterator::deleteArg()
m_pos = m_prev; m_pos = m_prev;
} }
void QtcProcess::ArgIterator::appendArg(const QString &str) void ProcessArgs::ArgIterator::appendArg(const QString &str)
{ {
const QString qstr = quoteArg(str); const QString qstr = quoteArg(str);
if (!m_pos) if (!m_pos)
@@ -1794,40 +1794,40 @@ void QtcProcess::ArgIterator::appendArg(const QString &str)
m_pos += qstr.length() + 1; m_pos += qstr.length() + 1;
} }
QtcProcess::Arguments QtcProcess::Arguments::createWindowsArgs(const QString &args) ProcessArgs ProcessArgs::createWindowsArgs(const QString &args)
{ {
Arguments result; ProcessArgs result;
result.m_windowsArgs = args; result.m_windowsArgs = args;
result.m_isWindows = true; result.m_isWindows = true;
return result; return result;
} }
QtcProcess::Arguments QtcProcess::Arguments::createUnixArgs(const QStringList &args) ProcessArgs ProcessArgs::createUnixArgs(const QStringList &args)
{ {
Arguments result; ProcessArgs result;
result.m_unixArgs = args; result.m_unixArgs = args;
result.m_isWindows = false; result.m_isWindows = false;
return result; return result;
} }
QString QtcProcess::Arguments::toWindowsArgs() const QString ProcessArgs::toWindowsArgs() const
{ {
QTC_CHECK(m_isWindows); QTC_CHECK(m_isWindows);
return m_windowsArgs; return m_windowsArgs;
} }
QStringList QtcProcess::Arguments::toUnixArgs() const QStringList ProcessArgs::toUnixArgs() const
{ {
QTC_CHECK(!m_isWindows); QTC_CHECK(!m_isWindows);
return m_unixArgs; return m_unixArgs;
} }
QString QtcProcess::Arguments::toString() const QString ProcessArgs::toString() const
{ {
if (m_isWindows) if (m_isWindows)
return m_windowsArgs; return m_windowsArgs;
else else
return QtcProcess::joinArgs(m_unixArgs, OsTypeLinux); return ProcessArgs::joinArgs(m_unixArgs, OsTypeLinux);
} }
// Path utilities // Path utilities
+56 -56
View File
@@ -119,21 +119,56 @@ public:
void setStdOutCallback(const std::function<void(const QString &)> &callback); void setStdOutCallback(const std::function<void(const QString &)> &callback);
void setStdErrCallback(const std::function<void(const QString &)> &callback); void setStdErrCallback(const std::function<void(const QString &)> &callback);
class QTCREATOR_UTILS_EXPORT Arguments static void setRemoteStartProcessHook(const std::function<void (QtcProcess &)> &hook);
{
public:
static Arguments createWindowsArgs(const QString &args);
static Arguments createUnixArgs(const QStringList &args);
QString toWindowsArgs() const; bool isSynchronous() const;
QStringList toUnixArgs() const; void setSynchronous(bool on);
QString toString() const;
private: void setOpenMode(OpenMode mode);
QString m_windowsArgs;
QStringList m_unixArgs; bool stopProcess();
bool m_isWindows; bool readDataFromProcess(int timeoutS, QByteArray *stdOut, QByteArray *stdErr,
}; bool showTimeOutMessageBox);
static QString normalizeNewlines(const QString &text);
// Helpers to find binaries. Do not use it for other path variables
// and file types.
static QString locateBinary(const QString &binary);
static QString locateBinary(const QString &path, const QString &binary);
private:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void setupChildProcess() override;
#endif
friend class SynchronousProcess;
Internal::QtcProcessPrivate *d = nullptr;
void setProcessEnvironment(const QProcessEnvironment &environment) = delete;
QProcessEnvironment processEnvironment() const = delete;
};
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const SynchronousProcessResponse &);
QTCREATOR_UTILS_EXPORT SynchronousProcessResponse::Result defaultExitCodeInterpreter(int code);
class QTCREATOR_UTILS_EXPORT SynchronousProcess : public QtcProcess
{
Q_OBJECT
public:
SynchronousProcess();
~SynchronousProcess() override;
};
class QTCREATOR_UTILS_EXPORT ProcessArgs
{
public:
static ProcessArgs createWindowsArgs(const QString &args);
static ProcessArgs createUnixArgs(const QStringList &args);
QString toWindowsArgs() const;
QStringList toUnixArgs() const;
QString toString() const;
enum SplitError { enum SplitError {
SplitOk = 0, //! All went just fine SplitOk = 0, //! All went just fine
@@ -150,13 +185,13 @@ public:
//! Join an argument list into a shell command //! Join an argument list into a shell command
static QString joinArgs(const QStringList &args, OsType osType = HostOsInfo::hostOs()); static QString joinArgs(const QStringList &args, OsType osType = HostOsInfo::hostOs());
//! Prepare argument of a shell command for feeding into QProcess //! Prepare argument of a shell command for feeding into QProcess
static Arguments prepareArgs(const QString &cmd, SplitError *err, static ProcessArgs prepareArgs(const QString &cmd, SplitError *err,
OsType osType = HostOsInfo::hostOs(), OsType osType = HostOsInfo::hostOs(),
const Environment *env = nullptr, const QString *pwd = nullptr, const Environment *env = nullptr, const QString *pwd = nullptr,
bool abortOnMeta = true); bool abortOnMeta = true);
//! Prepare a shell command for feeding into QProcess //! Prepare a shell command for feeding into QProcess
static bool prepareCommand(const QString &command, const QString &arguments, static bool prepareCommand(const QString &command, const QString &arguments,
QString *outCmd, Arguments *outArgs, OsType osType = HostOsInfo::hostOs(), QString *outCmd, ProcessArgs *outArgs, OsType osType = HostOsInfo::hostOs(),
const Environment *env = nullptr, const QString *pwd = nullptr); const Environment *env = nullptr, const QString *pwd = nullptr);
//! Quote and append each argument to a shell command //! Quote and append each argument to a shell command
static void addArgs(QString *args, const QStringList &inArgs); static void addArgs(QString *args, const QStringList &inArgs);
@@ -213,45 +248,10 @@ public:
ArgIterator m_ait; ArgIterator m_ait;
}; };
static void setRemoteStartProcessHook(const std::function<void (QtcProcess &)> &hook);
bool isSynchronous() const;
void setSynchronous(bool on);
void setOpenMode(OpenMode mode);
bool stopProcess();
bool readDataFromProcess(int timeoutS, QByteArray *stdOut, QByteArray *stdErr,
bool showTimeOutMessageBox);
static QString normalizeNewlines(const QString &text);
// Helpers to find binaries. Do not use it for other path variables
// and file types.
static QString locateBinary(const QString &binary);
static QString locateBinary(const QString &path, const QString &binary);
private: private:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QString m_windowsArgs;
void setupChildProcess() override; QStringList m_unixArgs;
#endif bool m_isWindows;
friend class SynchronousProcess;
Internal::QtcProcessPrivate *d = nullptr;
void setProcessEnvironment(const QProcessEnvironment &environment) = delete;
QProcessEnvironment processEnvironment() const = delete;
};
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const SynchronousProcessResponse &);
QTCREATOR_UTILS_EXPORT SynchronousProcessResponse::Result defaultExitCodeInterpreter(int code);
class QTCREATOR_UTILS_EXPORT SynchronousProcess : public QtcProcess
{
Q_OBJECT
public:
SynchronousProcess();
~SynchronousProcess() override;
}; };
} // namespace Utils } // namespace Utils
@@ -96,8 +96,8 @@ bool AndroidPackageInstallationStep::init()
QTC_ASSERT(tc, return false); QTC_ASSERT(tc, return false);
QString dirPath = nativeAndroidBuildPath(); QString dirPath = nativeAndroidBuildPath();
const QString innerQuoted = QtcProcess::quoteArg(dirPath); const QString innerQuoted = ProcessArgs::quoteArg(dirPath);
const QString outerQuoted = QtcProcess::quoteArg("INSTALL_ROOT=" + innerQuoted); const QString outerQuoted = ProcessArgs::quoteArg("INSTALL_ROOT=" + innerQuoted);
CommandLine cmd{tc->makeCommand(buildEnvironment())}; CommandLine cmd{tc->makeCommand(buildEnvironment())};
cmd.addArgs(outerQuoted + " install", CommandLine::Raw); cmd.addArgs(outerQuoted + " install", CommandLine::Raw);
+2 -2
View File
@@ -293,7 +293,7 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
if (auto aspect = runControl->aspect(Constants::ANDROID_AMSTARTARGS)) { if (auto aspect = runControl->aspect(Constants::ANDROID_AMSTARTARGS)) {
QTC_CHECK(aspect->value().type() == QVariant::String); QTC_CHECK(aspect->value().type() == QVariant::String);
const QString startArgs = aspect->value().toString(); const QString startArgs = aspect->value().toString();
m_amStartExtraArgs = QtcProcess::splitArgs(startArgs, OsTypeOtherUnix); m_amStartExtraArgs = ProcessArgs::splitArgs(startArgs, OsTypeOtherUnix);
} }
if (auto aspect = runControl->aspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)) { if (auto aspect = runControl->aspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)) {
@@ -633,7 +633,7 @@ void AndroidRunnerWorker::asyncStartHelper()
if (!m_extraAppParams.isEmpty()) { if (!m_extraAppParams.isEmpty()) {
QStringList appArgs = QStringList appArgs =
Utils::QtcProcess::splitArgs(m_extraAppParams, Utils::OsType::OsTypeLinux); Utils::ProcessArgs::splitArgs(m_extraAppParams, Utils::OsType::OsTypeLinux);
qCDebug(androidRunWorkerLog) << "Using application arguments: " << appArgs; qCDebug(androidRunWorkerLog) << "Using application arguments: " << appArgs;
args << "-e" << "extraappparams" args << "-e" << "extraappparams"
<< QString::fromLatin1(appArgs.join(' ').toUtf8().toBase64()); << QString::fromLatin1(appArgs.join(' ').toUtf8().toBase64());
@@ -825,7 +825,7 @@ void AndroidSettingsWidget::editEmulatorArgsAVD()
if (dialog.exec() != QDialog::Accepted) if (dialog.exec() != QDialog::Accepted)
return; return;
m_androidConfig.setEmulatorArgs(QtcProcess::splitArgs(dialog.textValue())); m_androidConfig.setEmulatorArgs(ProcessArgs::splitArgs(dialog.textValue()));
} }
void AndroidSettingsWidget::createKitToggled() void AndroidSettingsWidget::createKitToggled()
+1 -1
View File
@@ -641,7 +641,7 @@ void TestRunner::debugTests()
inferior.executable = FilePath::fromString(commandFilePath); inferior.executable = FilePath::fromString(commandFilePath);
const QStringList args = config->argumentsForTestRunner(&omitted); const QStringList args = config->argumentsForTestRunner(&omitted);
inferior.commandLineArguments = Utils::QtcProcess::joinArgs(args); inferior.commandLineArguments = Utils::ProcessArgs::joinArgs(args);
if (!omitted.isEmpty()) { if (!omitted.isEmpty()) {
const QString &details = constructOmittedDetailsString(omitted); const QString &details = constructOmittedDetailsString(omitted);
reportResult(ResultType::MessageWarn, details.arg(config->displayName())); reportResult(ResultType::MessageWarn, details.arg(config->displayName()));
@@ -441,7 +441,7 @@ QStringList MakefileParser::parseTermsAfterAssign(const QString &line)
if (assignPos <= 0 || assignPos >= line.size()) if (assignPos <= 0 || assignPos >= line.size())
return QStringList(); return QStringList();
const QStringList parts = Utils::QtcProcess::splitArgs(line.mid(assignPos)); const QStringList parts = Utils::ProcessArgs::splitArgs(line.mid(assignPos));
QStringList result; QStringList result;
for (int i = 0; i < parts.count(); ++i) { for (int i = 0; i < parts.count(); ++i) {
const QString cur = parts.at(i); const QString cur = parts.at(i);
@@ -86,7 +86,7 @@ QString OpenOcdGdbServerProvider::channelString() const
// otherwise running will be stuck. // otherwise running will be stuck.
CommandLine cmd = command(); CommandLine cmd = command();
QStringList args = {"|", cmd.executable().toString()}; QStringList args = {"|", cmd.executable().toString()};
for (const QString &a : QtcProcess::splitArgs(cmd.arguments())) { for (const QString &a : ProcessArgs::splitArgs(cmd.arguments())) {
if (a.startsWith('\"') && a.endsWith('\"')) if (a.startsWith('\"') && a.endsWith('\"'))
args << a; args << a;
else else
+4 -4
View File
@@ -567,7 +567,7 @@ IarToolChainConfigWidget::IarToolChainConfigWidget(IarToolChain *tc) :
m_compilerCommand->setHistoryCompleter("PE.IAREW.Command.History"); m_compilerCommand->setHistoryCompleter("PE.IAREW.Command.History");
m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand); m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand);
m_platformCodeGenFlagsLineEdit = new QLineEdit(this); m_platformCodeGenFlagsLineEdit = new QLineEdit(this);
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->extraCodeModelFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->extraCodeModelFlags()));
m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit); m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit);
m_mainLayout->addRow(tr("&ABI:"), m_abiWidget); m_mainLayout->addRow(tr("&ABI:"), m_abiWidget);
@@ -609,7 +609,7 @@ bool IarToolChainConfigWidget::isDirtyImpl() const
{ {
const auto tc = static_cast<IarToolChain *>(toolChain()); const auto tc = static_cast<IarToolChain *>(toolChain());
return m_compilerCommand->filePath() != tc->compilerCommand() return m_compilerCommand->filePath() != tc->compilerCommand()
|| m_platformCodeGenFlagsLineEdit->text() != QtcProcess::joinArgs(tc->extraCodeModelFlags()) || m_platformCodeGenFlagsLineEdit->text() != ProcessArgs::joinArgs(tc->extraCodeModelFlags())
|| m_abiWidget->currentAbi() != tc->targetAbi() || m_abiWidget->currentAbi() != tc->targetAbi()
; ;
} }
@@ -626,7 +626,7 @@ void IarToolChainConfigWidget::setFromToolchain()
const QSignalBlocker blocker(this); const QSignalBlocker blocker(this);
const auto tc = static_cast<IarToolChain *>(toolChain()); const auto tc = static_cast<IarToolChain *>(toolChain());
m_compilerCommand->setFilePath(tc->compilerCommand()); m_compilerCommand->setFilePath(tc->compilerCommand());
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->extraCodeModelFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->extraCodeModelFlags()));
m_abiWidget->setAbis({}, tc->targetAbi()); m_abiWidget->setAbis({}, tc->targetAbi());
const bool haveCompiler = compilerExists(m_compilerCommand->filePath()); const bool haveCompiler = compilerExists(m_compilerCommand->filePath());
m_abiWidget->setEnabled(haveCompiler && !tc->isAutoDetected()); m_abiWidget->setEnabled(haveCompiler && !tc->isAutoDetected());
@@ -652,7 +652,7 @@ void IarToolChainConfigWidget::handleCompilerCommandChange()
void IarToolChainConfigWidget::handlePlatformCodeGenFlagsChange() void IarToolChainConfigWidget::handlePlatformCodeGenFlagsChange()
{ {
const QString str1 = m_platformCodeGenFlagsLineEdit->text(); const QString str1 = m_platformCodeGenFlagsLineEdit->text();
const QString str2 = QtcProcess::joinArgs(splitString(str1)); const QString str2 = ProcessArgs::joinArgs(splitString(str1));
if (str1 != str2) if (str1 != str2)
m_platformCodeGenFlagsLineEdit->setText(str2); m_platformCodeGenFlagsLineEdit->setText(str2);
else else
+5 -5
View File
@@ -727,7 +727,7 @@ KeilToolChainConfigWidget::KeilToolChainConfigWidget(KeilToolChain *tc) :
m_compilerCommand->setHistoryCompleter("PE.KEIL.Command.History"); m_compilerCommand->setHistoryCompleter("PE.KEIL.Command.History");
m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand); m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand);
m_platformCodeGenFlagsLineEdit = new QLineEdit(this); m_platformCodeGenFlagsLineEdit = new QLineEdit(this);
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->extraCodeModelFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->extraCodeModelFlags()));
m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit); m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit);
m_mainLayout->addRow(tr("&ABI:"), m_abiWidget); m_mainLayout->addRow(tr("&ABI:"), m_abiWidget);
@@ -769,7 +769,7 @@ bool KeilToolChainConfigWidget::isDirtyImpl() const
{ {
const auto tc = static_cast<KeilToolChain *>(toolChain()); const auto tc = static_cast<KeilToolChain *>(toolChain());
return m_compilerCommand->filePath() != tc->compilerCommand() return m_compilerCommand->filePath() != tc->compilerCommand()
|| m_platformCodeGenFlagsLineEdit->text() != QtcProcess::joinArgs(tc->extraCodeModelFlags()) || m_platformCodeGenFlagsLineEdit->text() != ProcessArgs::joinArgs(tc->extraCodeModelFlags())
|| m_abiWidget->currentAbi() != tc->targetAbi() || m_abiWidget->currentAbi() != tc->targetAbi()
; ;
} }
@@ -786,7 +786,7 @@ void KeilToolChainConfigWidget::setFromToolChain()
const QSignalBlocker blocker(this); const QSignalBlocker blocker(this);
const auto tc = static_cast<KeilToolChain *>(toolChain()); const auto tc = static_cast<KeilToolChain *>(toolChain());
m_compilerCommand->setFilePath(tc->compilerCommand()); m_compilerCommand->setFilePath(tc->compilerCommand());
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->extraCodeModelFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->extraCodeModelFlags()));
m_abiWidget->setAbis({}, tc->targetAbi()); m_abiWidget->setAbis({}, tc->targetAbi());
const bool haveCompiler = compilerExists(m_compilerCommand->filePath()); const bool haveCompiler = compilerExists(m_compilerCommand->filePath());
m_abiWidget->setEnabled(haveCompiler && !tc->isAutoDetected()); m_abiWidget->setEnabled(haveCompiler && !tc->isAutoDetected());
@@ -802,7 +802,7 @@ void KeilToolChainConfigWidget::handleCompilerCommandChange()
QStringList newExtraArgs = prevExtraArgs; QStringList newExtraArgs = prevExtraArgs;
addDefaultCpuArgs(compilerPath, newExtraArgs); addDefaultCpuArgs(compilerPath, newExtraArgs);
if (prevExtraArgs != newExtraArgs) if (prevExtraArgs != newExtraArgs)
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(newExtraArgs)); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(newExtraArgs));
m_macros = dumpPredefinedMacros(compilerPath, newExtraArgs, env); m_macros = dumpPredefinedMacros(compilerPath, newExtraArgs, env);
const Abi guessed = guessAbi(m_macros); const Abi guessed = guessAbi(m_macros);
m_abiWidget->setAbis({}, guessed); m_abiWidget->setAbis({}, guessed);
@@ -815,7 +815,7 @@ void KeilToolChainConfigWidget::handleCompilerCommandChange()
void KeilToolChainConfigWidget::handlePlatformCodeGenFlagsChange() void KeilToolChainConfigWidget::handlePlatformCodeGenFlagsChange()
{ {
const QString str1 = m_platformCodeGenFlagsLineEdit->text(); const QString str1 = m_platformCodeGenFlagsLineEdit->text();
const QString str2 = QtcProcess::joinArgs(splitString(str1)); const QString str2 = ProcessArgs::joinArgs(splitString(str1));
if (str1 != str2) if (str1 != str2)
m_platformCodeGenFlagsLineEdit->setText(str2); m_platformCodeGenFlagsLineEdit->setText(str2);
else else
+1 -1
View File
@@ -324,7 +324,7 @@ ClangDiagnosticConfig diagnosticConfig(const Utils::Id &diagConfigId)
QStringList splitArgs(QString &argsString) QStringList splitArgs(QString &argsString)
{ {
QStringList result; QStringList result;
Utils::QtcProcess::ArgIterator it(&argsString); Utils::ProcessArgs::ArgIterator it(&argsString);
while (it.next()) while (it.next())
result.append(it.value()); result.append(it.value());
return result; return result;
@@ -264,7 +264,7 @@ QList<CMakeBuildTarget> generateBuildTargets(const PreprocessedData &input,
continue; continue;
// CMake sometimes mixes several shell-escaped pieces into one fragment. Disentangle that again: // CMake sometimes mixes several shell-escaped pieces into one fragment. Disentangle that again:
const QStringList parts = QtcProcess::splitArgs(f.fragment); const QStringList parts = ProcessArgs::splitArgs(f.fragment);
for (const QString &part : parts) { for (const QString &part : parts) {
// Some projects abuse linking to libraries to pass random flags to the linker, so ignore // Some projects abuse linking to libraries to pass random flags to the linker, so ignore
// flags mixed into a fragment // flags mixed into a fragment
@@ -315,7 +315,7 @@ static QStringList splitFragments(const QStringList &fragments)
{ {
QStringList result; QStringList result;
for (const QString &f : fragments) { for (const QString &f : fragments) {
result += QtcProcess::splitArgs(f); result += ProcessArgs::splitArgs(f);
} }
return result; return result;
} }
+1 -1
View File
@@ -103,7 +103,7 @@ void FileUtils::showInGraphicalShell(QWidget *parent, const QString &pathIn)
// we cannot select a file here, because no file browser really supports it... // we cannot select a file here, because no file browser really supports it...
const QString folder = fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.filePath(); const QString folder = fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.filePath();
const QString app = UnixUtils::fileBrowser(ICore::settings()); const QString app = UnixUtils::fileBrowser(ICore::settings());
QStringList browserArgs = Utils::QtcProcess::splitArgs( QStringList browserArgs = ProcessArgs::splitArgs(
UnixUtils::substituteFileBrowserParameters(app, folder)); UnixUtils::substituteFileBrowserParameters(app, folder));
QString error; QString error;
if (browserArgs.isEmpty()) { if (browserArgs.isEmpty()) {
@@ -263,7 +263,7 @@ void SpotlightLocatorFilter::prepareSearch(const QString &entry)
caseSensitivity(fp.filePath) == Qt::CaseInsensitive ? m_arguments caseSensitivity(fp.filePath) == Qt::CaseInsensitive ? m_arguments
: m_caseSensitiveArguments); : m_caseSensitiveArguments);
setFileIterator( setFileIterator(
new SpotlightIterator(QStringList(m_command) + QtcProcess::splitArgs(argumentString))); new SpotlightIterator(QStringList(m_command) + ProcessArgs::splitArgs(argumentString)));
} }
BaseFileFilter::prepareSearch(entry); BaseFileFilter::prepareSearch(entry);
} }
+8 -8
View File
@@ -890,7 +890,7 @@ bool DebuggerRunTool::fixupParameters()
QString qmlarg = rp.isCppDebugging() && rp.nativeMixedEnabled QString qmlarg = rp.isCppDebugging() && rp.nativeMixedEnabled
? QmlDebug::qmlDebugNativeArguments(service, false) ? QmlDebug::qmlDebugNativeArguments(service, false)
: QmlDebug::qmlDebugTcpArguments(service, rp.qmlServer); : QmlDebug::qmlDebugTcpArguments(service, rp.qmlServer);
QtcProcess::addArg(&rp.inferior.commandLineArguments, qmlarg); ProcessArgs::addArg(&rp.inferior.commandLineArguments, qmlarg);
} }
} }
@@ -903,12 +903,12 @@ bool DebuggerRunTool::fixupParameters()
} }
if (HostOsInfo::isWindowsHost()) { if (HostOsInfo::isWindowsHost()) {
QtcProcess::SplitError perr; ProcessArgs::SplitError perr;
rp.inferior.commandLineArguments = rp.inferior.commandLineArguments =
QtcProcess::prepareArgs(rp.inferior.commandLineArguments, &perr, ProcessArgs::prepareArgs(rp.inferior.commandLineArguments, &perr,
HostOsInfo::hostOs(), nullptr, HostOsInfo::hostOs(), nullptr,
&rp.inferior.workingDirectory).toWindowsArgs(); &rp.inferior.workingDirectory).toWindowsArgs();
if (perr != QtcProcess::SplitOk) { if (perr != ProcessArgs::SplitOk) {
// perr == BadQuoting is never returned on Windows // perr == BadQuoting is never returned on Windows
// FIXME? QTCREATORBUG-2809 // FIXME? QTCREATORBUG-2809
reportFailure(DebuggerPlugin::tr("Debugging complex command lines " reportFailure(DebuggerPlugin::tr("Debugging complex command lines "
@@ -1130,7 +1130,7 @@ DebugServerRunner::DebugServerRunner(RunControl *runControl, DebugServerPortsGat
debugServer.environment = mainRunnable.environment; debugServer.environment = mainRunnable.environment;
debugServer.workingDirectory = mainRunnable.workingDirectory; debugServer.workingDirectory = mainRunnable.workingDirectory;
QStringList args = QtcProcess::splitArgs(mainRunnable.commandLineArguments, OsTypeLinux); QStringList args = ProcessArgs::splitArgs(mainRunnable.commandLineArguments, OsTypeLinux);
const bool isQmlDebugging = portsGatherer->useQmlServer(); const bool isQmlDebugging = portsGatherer->useQmlServer();
const bool isCppDebugging = portsGatherer->useGdbServer(); const bool isCppDebugging = portsGatherer->useGdbServer();
@@ -1162,7 +1162,7 @@ DebugServerRunner::DebugServerRunner(RunControl *runControl, DebugServerPortsGat
args.append(QString::number(m_pid.pid())); args.append(QString::number(m_pid.pid()));
} }
} }
debugServer.commandLineArguments = QtcProcess::joinArgs(args, OsTypeLinux); debugServer.commandLineArguments = ProcessArgs::joinArgs(args, OsTypeLinux);
doStart(debugServer, runControl->device()); doStart(debugServer, runControl->device());
}); });
+1 -1
View File
@@ -282,7 +282,7 @@ void LldbEngine::setupEngine()
cmd2.arg("nativemixed", isNativeMixedActive()); cmd2.arg("nativemixed", isNativeMixedActive());
cmd2.arg("workingdirectory", rp.inferior.workingDirectory); cmd2.arg("workingdirectory", rp.inferior.workingDirectory);
cmd2.arg("environment", rp.inferior.environment.toStringList()); cmd2.arg("environment", rp.inferior.environment.toStringList());
cmd2.arg("processargs", toHex(QtcProcess::splitArgs(rp.inferior.commandLineArguments).join(QChar(0)))); cmd2.arg("processargs", toHex(ProcessArgs::splitArgs(rp.inferior.commandLineArguments).join(QChar(0))));
cmd2.arg("platform", rp.platform); cmd2.arg("platform", rp.platform);
cmd2.arg("symbolfile", rp.symbolFile); cmd2.arg("symbolfile", rp.symbolFile);
+1 -1
View File
@@ -134,7 +134,7 @@ void PdbEngine::setupEngine()
} }
QStringList args = {bridge, scriptFile.fileName()}; QStringList args = {bridge, scriptFile.fileName()};
args.append(Utils::QtcProcess::splitArgs(runParameters().inferior.workingDirectory)); args.append(Utils::ProcessArgs::splitArgs(runParameters().inferior.workingDirectory));
showMessage("STARTING " + m_interpreter + ' ' + args.join(' ')); showMessage("STARTING " + m_interpreter + ' ' + args.join(' '));
m_proc.setEnvironment(runParameters().debugger.environment.toStringList()); m_proc.setEnvironment(runParameters().debugger.environment.toStringList());
m_proc.start(m_interpreter, args); m_proc.start(m_interpreter, args);
@@ -413,7 +413,7 @@ static QStringList readFlags(const QString &filePath)
return QStringList(); return QStringList();
QStringList flags; QStringList flags;
for (const auto &line : lines) for (const auto &line : lines)
flags.append(QtcProcess::splitArgs(line)); flags.append(ProcessArgs::splitArgs(line));
return flags; return flags;
} }
+1 -1
View File
@@ -2574,7 +2574,7 @@ bool GitClient::tryLauchingGitK(const Environment &env,
} }
const QString gitkOpts = settings().gitkOptions.value(); const QString gitkOpts = settings().gitkOptions.value();
if (!gitkOpts.isEmpty()) if (!gitkOpts.isEmpty())
arguments.append(QtcProcess::splitArgs(gitkOpts, HostOsInfo::hostOs())); arguments.append(ProcessArgs::splitArgs(gitkOpts, HostOsInfo::hostOs()));
if (!fileName.isEmpty()) if (!fileName.isEmpty())
arguments << "--" << fileName; arguments << "--" << fileName;
VcsOutputWindow::appendCommand(workingDirectory, {binary, arguments}); VcsOutputWindow::appendCommand(workingDirectory, {binary, arguments});
@@ -63,7 +63,7 @@ QString CMakeCommandBuilder::defaultArguments() const
if (buildDir.isEmpty()) if (buildDir.isEmpty())
buildDir = "."; buildDir = ".";
return Utils::QtcProcess::joinArgs({"--build", buildDir, "--target", "all"}); return Utils::ProcessArgs::joinArgs({"--build", buildDir, "--target", "all"});
} }
QString CMakeCommandBuilder::setMultiProcessArg(QString args) QString CMakeCommandBuilder::setMultiProcessArg(QString args)
+5 -5
View File
@@ -95,7 +95,7 @@ QWidget *IosBuildStep::createConfigWidget()
auto buildArgumentsLabel = new QLabel(tr("Base arguments:"), widget); auto buildArgumentsLabel = new QLabel(tr("Base arguments:"), widget);
auto buildArgumentsTextEdit = new QPlainTextEdit(widget); auto buildArgumentsTextEdit = new QPlainTextEdit(widget);
buildArgumentsTextEdit->setPlainText(QtcProcess::joinArgs(baseArguments())); buildArgumentsTextEdit->setPlainText(ProcessArgs::joinArgs(baseArguments()));
auto resetDefaultsButton = new QPushButton(widget); auto resetDefaultsButton = new QPushButton(widget);
resetDefaultsButton->setLayoutDirection(Qt::RightToLeft); resetDefaultsButton->setLayoutDirection(Qt::RightToLeft);
@@ -105,7 +105,7 @@ QWidget *IosBuildStep::createConfigWidget()
auto extraArgumentsLabel = new QLabel(tr("Extra arguments:"), widget); auto extraArgumentsLabel = new QLabel(tr("Extra arguments:"), widget);
auto extraArgumentsLineEdit = new QLineEdit(widget); auto extraArgumentsLineEdit = new QLineEdit(widget);
extraArgumentsLineEdit->setText(QtcProcess::joinArgs(m_extraArguments)); extraArgumentsLineEdit->setText(ProcessArgs::joinArgs(m_extraArguments));
auto gridLayout = new QGridLayout(widget); auto gridLayout = new QGridLayout(widget);
gridLayout->addWidget(buildArgumentsLabel, 0, 0, 1, 1); gridLayout->addWidget(buildArgumentsLabel, 0, 0, 1, 1);
@@ -125,19 +125,19 @@ QWidget *IosBuildStep::createConfigWidget()
updateDetails(); updateDetails();
connect(buildArgumentsTextEdit, &QPlainTextEdit::textChanged, this, [=] { connect(buildArgumentsTextEdit, &QPlainTextEdit::textChanged, this, [=] {
setBaseArguments(QtcProcess::splitArgs(buildArgumentsTextEdit->toPlainText())); setBaseArguments(ProcessArgs::splitArgs(buildArgumentsTextEdit->toPlainText()));
resetDefaultsButton->setEnabled(!m_useDefaultArguments); resetDefaultsButton->setEnabled(!m_useDefaultArguments);
updateDetails(); updateDetails();
}); });
connect(resetDefaultsButton, &QAbstractButton::clicked, this, [=] { connect(resetDefaultsButton, &QAbstractButton::clicked, this, [=] {
setBaseArguments(defaultArguments()); setBaseArguments(defaultArguments());
buildArgumentsTextEdit->setPlainText(QtcProcess::joinArgs(baseArguments())); buildArgumentsTextEdit->setPlainText(ProcessArgs::joinArgs(baseArguments()));
resetDefaultsButton->setEnabled(!m_useDefaultArguments); resetDefaultsButton->setEnabled(!m_useDefaultArguments);
}); });
connect(extraArgumentsLineEdit, &QLineEdit::editingFinished, [=] { connect(extraArgumentsLineEdit, &QLineEdit::editingFinished, [=] {
setExtraArguments(QtcProcess::splitArgs(extraArgumentsLineEdit->text())); setExtraArguments(ProcessArgs::splitArgs(extraArgumentsLineEdit->text()));
}); });
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
+3 -3
View File
@@ -213,7 +213,7 @@ QWidget *IosDsymBuildStep::createConfigWidget()
commandLineEdit->setText(command().toString()); commandLineEdit->setText(command().toString());
auto argumentsTextEdit = new QPlainTextEdit(widget); auto argumentsTextEdit = new QPlainTextEdit(widget);
argumentsTextEdit->setPlainText(Utils::QtcProcess::joinArgs(arguments())); argumentsTextEdit->setPlainText(Utils::ProcessArgs::joinArgs(arguments()));
auto argumentsLabel = new QLabel(tr("Arguments:"), widget); auto argumentsLabel = new QLabel(tr("Arguments:"), widget);
@@ -238,7 +238,7 @@ QWidget *IosDsymBuildStep::createConfigWidget()
connect(argumentsTextEdit, &QPlainTextEdit::textChanged, this, connect(argumentsTextEdit, &QPlainTextEdit::textChanged, this,
[this, argumentsTextEdit, resetDefaultsButton, updateDetails] { [this, argumentsTextEdit, resetDefaultsButton, updateDetails] {
setArguments(Utils::QtcProcess::splitArgs(argumentsTextEdit->toPlainText())); setArguments(Utils::ProcessArgs::splitArgs(argumentsTextEdit->toPlainText()));
resetDefaultsButton->setEnabled(!isDefault()); resetDefaultsButton->setEnabled(!isDefault());
updateDetails(); updateDetails();
}); });
@@ -255,7 +255,7 @@ QWidget *IosDsymBuildStep::createConfigWidget()
setCommand(defaultCommand()); setCommand(defaultCommand());
setArguments(defaultArguments()); setArguments(defaultArguments());
commandLineEdit->setText(command().toString()); commandLineEdit->setText(command().toString());
argumentsTextEdit->setPlainText(Utils::QtcProcess::joinArgs(arguments())); argumentsTextEdit->setPlainText(Utils::ProcessArgs::joinArgs(arguments()));
resetDefaultsButton->setEnabled(!isDefault()); resetDefaultsButton->setEnabled(!isDefault());
updateDetails(); updateDetails();
}); });
+1 -1
View File
@@ -197,7 +197,7 @@ void IosRunner::start()
this, &IosRunner::handleFinished); this, &IosRunner::handleFinished);
const Runnable runnable = runControl()->runnable(); const Runnable runnable = runControl()->runnable();
QStringList args = QtcProcess::splitArgs(runnable.commandLineArguments, OsTypeMac); QStringList args = ProcessArgs::splitArgs(runnable.commandLineArguments, OsTypeMac);
if (m_qmlServerPort.isValid()) { if (m_qmlServerPort.isValid()) {
QUrl qmlServer; QUrl qmlServer;
qmlServer.setPort(m_qmlServerPort.number()); qmlServer.setPort(m_qmlServerPort.number());
@@ -120,7 +120,7 @@ void MesonBuildConfiguration::build(const QString &target)
QStringList MesonBuildConfiguration::mesonConfigArgs() QStringList MesonBuildConfiguration::mesonConfigArgs()
{ {
return Utils::QtcProcess::splitArgs(m_parameters) + QStringList{QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))}; return Utils::ProcessArgs::splitArgs(m_parameters) + QStringList{QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))};
} }
const QString &MesonBuildConfiguration::parameters() const const QString &MesonBuildConfiguration::parameters() const
@@ -97,7 +97,7 @@ QWidget *NimCompilerBuildStep::createConfigWidget()
auto updateUi = [=] { auto updateUi = [=] {
const CommandLine cmd = commandLine(); const CommandLine cmd = commandLine();
const QStringList parts = QtcProcess::splitArgs(cmd.toUserOutput()); const QStringList parts = ProcessArgs::splitArgs(cmd.toUserOutput());
commandTextEdit->setText(parts.join(QChar::LineFeed)); commandTextEdit->setText(parts.join(QChar::LineFeed));
@@ -151,11 +151,11 @@ public:
arguments << "record"; arguments << "record";
arguments += m_perfRecordArguments; arguments += m_perfRecordArguments;
arguments << "-o" << "-" << "--" << perfRunnable.executable.toString() arguments << "-o" << "-" << "--" << perfRunnable.executable.toString()
<< Utils::QtcProcess::splitArgs(perfRunnable.commandLineArguments, << Utils::ProcessArgs::splitArgs(perfRunnable.commandLineArguments,
Utils::OsTypeLinux); Utils::OsTypeLinux);
perfRunnable.executable = FilePath::fromString("perf"); perfRunnable.executable = FilePath::fromString("perf");
perfRunnable.commandLineArguments = Utils::QtcProcess::joinArgs(arguments, perfRunnable.commandLineArguments = Utils::ProcessArgs::joinArgs(arguments,
Utils::OsTypeLinux); Utils::OsTypeLinux);
m_process->start(perfRunnable); m_process->start(perfRunnable);
} }
+1 -1
View File
@@ -143,7 +143,7 @@ QStringList PerfSettings::perfRecordArguments() const
"--call-graph", callgraphArg, "--call-graph", callgraphArg,
sampleMode.itemValue().toString(), sampleMode.itemValue().toString(),
QString::number(period.value())}) QString::number(period.value())})
+ QtcProcess::splitArgs(extraArguments.value()); + ProcessArgs::splitArgs(extraArguments.value());
} }
void PerfSettings::resetToDefault() void PerfSettings::resetToDefault()
@@ -55,7 +55,7 @@ void DesktopDeviceProcess::start(const Runnable &runnable)
m_process.setProcessEnvironment(runnable.environment.toProcessEnvironment()); m_process.setProcessEnvironment(runnable.environment.toProcessEnvironment());
m_process.setWorkingDirectory(runnable.workingDirectory); m_process.setWorkingDirectory(runnable.workingDirectory);
m_process.start(runnable.executable.toString(), m_process.start(runnable.executable.toString(),
Utils::QtcProcess::splitArgs(runnable.commandLineArguments)); Utils::ProcessArgs::splitArgs(runnable.commandLineArguments));
} }
void DesktopDeviceProcess::interrupt() void DesktopDeviceProcess::interrupt()
+8 -8
View File
@@ -1198,10 +1198,10 @@ GccToolChainConfigWidget::GccToolChainConfigWidget(GccToolChain *tc) :
m_compilerCommand->setHistoryCompleter("PE.Gcc.Command.History"); m_compilerCommand->setHistoryCompleter("PE.Gcc.Command.History");
m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand); m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand);
m_platformCodeGenFlagsLineEdit = new QLineEdit(this); m_platformCodeGenFlagsLineEdit = new QLineEdit(this);
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->platformCodeGenFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformCodeGenFlags()));
m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit); m_mainLayout->addRow(tr("Platform codegen flags:"), m_platformCodeGenFlagsLineEdit);
m_platformLinkerFlagsLineEdit = new QLineEdit(this); m_platformLinkerFlagsLineEdit = new QLineEdit(this);
m_platformLinkerFlagsLineEdit->setText(QtcProcess::joinArgs(tc->platformLinkerFlags())); m_platformLinkerFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformLinkerFlags()));
m_mainLayout->addRow(tr("Platform linker flags:"), m_platformLinkerFlagsLineEdit); m_mainLayout->addRow(tr("Platform linker flags:"), m_platformLinkerFlagsLineEdit);
m_mainLayout->addRow(tr("&ABI:"), m_abiWidget); m_mainLayout->addRow(tr("&ABI:"), m_abiWidget);
@@ -1254,8 +1254,8 @@ void GccToolChainConfigWidget::setFromToolchain()
QSignalBlocker blocker(this); QSignalBlocker blocker(this);
auto tc = static_cast<GccToolChain *>(toolChain()); auto tc = static_cast<GccToolChain *>(toolChain());
m_compilerCommand->setFilePath(tc->compilerCommand()); m_compilerCommand->setFilePath(tc->compilerCommand());
m_platformCodeGenFlagsLineEdit->setText(QtcProcess::joinArgs(tc->platformCodeGenFlags())); m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformCodeGenFlags()));
m_platformLinkerFlagsLineEdit->setText(QtcProcess::joinArgs(tc->platformLinkerFlags())); m_platformLinkerFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformLinkerFlags()));
if (m_abiWidget) { if (m_abiWidget) {
m_abiWidget->setAbis(tc->supportedAbis(), tc->targetAbi()); m_abiWidget->setAbis(tc->supportedAbis(), tc->targetAbi());
if (!m_isReadOnly && !m_compilerCommand->filePath().toString().isEmpty()) if (!m_isReadOnly && !m_compilerCommand->filePath().toString().isEmpty())
@@ -1269,9 +1269,9 @@ bool GccToolChainConfigWidget::isDirtyImpl() const
Q_ASSERT(tc); Q_ASSERT(tc);
return m_compilerCommand->filePath() != tc->compilerCommand() return m_compilerCommand->filePath() != tc->compilerCommand()
|| m_platformCodeGenFlagsLineEdit->text() || m_platformCodeGenFlagsLineEdit->text()
!= QtcProcess::joinArgs(tc->platformCodeGenFlags()) != ProcessArgs::joinArgs(tc->platformCodeGenFlags())
|| m_platformLinkerFlagsLineEdit->text() || m_platformLinkerFlagsLineEdit->text()
!= QtcProcess::joinArgs(tc->platformLinkerFlags()) != ProcessArgs::joinArgs(tc->platformLinkerFlags())
|| (m_abiWidget && m_abiWidget->currentAbi() != tc->targetAbi()); || (m_abiWidget && m_abiWidget->currentAbi() != tc->targetAbi());
} }
@@ -1324,7 +1324,7 @@ void GccToolChainConfigWidget::handleCompilerCommandChange()
void GccToolChainConfigWidget::handlePlatformCodeGenFlagsChange() void GccToolChainConfigWidget::handlePlatformCodeGenFlagsChange()
{ {
QString str1 = m_platformCodeGenFlagsLineEdit->text(); QString str1 = m_platformCodeGenFlagsLineEdit->text();
QString str2 = QtcProcess::joinArgs(splitString(str1)); QString str2 = ProcessArgs::joinArgs(splitString(str1));
if (str1 != str2) if (str1 != str2)
m_platformCodeGenFlagsLineEdit->setText(str2); m_platformCodeGenFlagsLineEdit->setText(str2);
else else
@@ -1334,7 +1334,7 @@ void GccToolChainConfigWidget::handlePlatformCodeGenFlagsChange()
void GccToolChainConfigWidget::handlePlatformLinkerFlagsChange() void GccToolChainConfigWidget::handlePlatformLinkerFlagsChange()
{ {
QString str1 = m_platformLinkerFlagsLineEdit->text(); QString str1 = m_platformLinkerFlagsLineEdit->text();
QString str2 = QtcProcess::joinArgs(splitString(str1)); QString str2 = ProcessArgs::joinArgs(splitString(str1));
if (str1 != str2) if (str1 != str2)
m_platformLinkerFlagsLineEdit->setText(str2); m_platformLinkerFlagsLineEdit->setText(str2);
else else
+1 -1
View File
@@ -221,7 +221,7 @@ bool MakeStep::jobCountOverridesMakeflags() const
static Utils::optional<int> argsJobCount(const QString &str) static Utils::optional<int> argsJobCount(const QString &str)
{ {
const QStringList args = Utils::QtcProcess::splitArgs(str, Utils::HostOsInfo::hostOs()); const QStringList args = ProcessArgs::splitArgs(str, HostOsInfo::hostOs());
const int argIndex = Utils::indexOf(args, [](const QString &arg) { return arg.startsWith("-j"); }); const int argIndex = Utils::indexOf(args, [](const QString &arg) { return arg.startsWith("-j"); });
if (argIndex == -1) if (argIndex == -1)
return Utils::nullopt; return Utils::nullopt;
@@ -1986,7 +1986,7 @@ Utils::optional<QString> MsvcToolChain::generateEnvironmentSettings(const Utils:
Utils::TempFileSaver saver(Utils::TemporaryDirectory::masterDirectoryPath() + "/XXXXXX.bat"); Utils::TempFileSaver saver(Utils::TemporaryDirectory::masterDirectoryPath() + "/XXXXXX.bat");
QByteArray call = "call "; QByteArray call = "call ";
call += Utils::QtcProcess::quoteArg(batchFile).toLocal8Bit(); call += ProcessArgs::quoteArg(batchFile).toLocal8Bit();
if (!batchArgs.isEmpty()) { if (!batchArgs.isEmpty()) {
call += ' '; call += ' ';
call += batchArgs.toLocal8Bit(); call += batchArgs.toLocal8Bit();
@@ -161,10 +161,10 @@ QString ProcessParameters::prettyArguments() const
{ {
QString margs = effectiveArguments(); QString margs = effectiveArguments();
QString workDir = effectiveWorkingDirectory().toString(); QString workDir = effectiveWorkingDirectory().toString();
QtcProcess::SplitError err; ProcessArgs::SplitError err;
QtcProcess::Arguments args = ProcessArgs args =
QtcProcess::prepareArgs(margs, &err, HostOsInfo::hostOs(), &m_environment, &workDir); ProcessArgs::prepareArgs(margs, &err, HostOsInfo::hostOs(), &m_environment, &workDir);
if (err != QtcProcess::SplitOk) if (err != ProcessArgs::SplitOk)
return margs; // Sorry, too complex - just fall back. return margs; // Sorry, too complex - just fall back.
return args.toString(); return args.toString();
} }
@@ -184,7 +184,7 @@ QString ProcessParameters::summary(const QString &displayName) const
return QString::fromLatin1("<b>%1:</b> %2 %3") return QString::fromLatin1("<b>%1:</b> %2 %3")
.arg(displayName, .arg(displayName,
QtcProcess::quoteArg(prettyCommand()), ProcessArgs::quoteArg(prettyCommand()),
prettyArguments()); prettyArguments());
} }
@@ -195,7 +195,7 @@ QString ProcessParameters::summaryInWorkdir(const QString &displayName) const
return QString::fromLatin1("<b>%1:</b> %2 %3 in %4") return QString::fromLatin1("<b>%1:</b> %2 %3 in %4")
.arg(displayName, .arg(displayName,
QtcProcess::quoteArg(prettyCommand()), ProcessArgs::quoteArg(prettyCommand()),
prettyArguments(), prettyArguments(),
QDir::toNativeSeparators(effectiveWorkingDirectory().toString())); QDir::toNativeSeparators(effectiveWorkingDirectory().toString()));
} }
@@ -392,7 +392,7 @@ void ArgumentsAspect::fromMap(const QVariantMap &map)
QVariant args = map.value(settingsKey()); QVariant args = map.value(settingsKey());
// Until 3.7 a QStringList was stored for Remote Linux // Until 3.7 a QStringList was stored for Remote Linux
if (args.type() == QVariant::StringList) if (args.type() == QVariant::StringList)
m_arguments = QtcProcess::joinArgs(args.toStringList(), OsTypeLinux); m_arguments = ProcessArgs::joinArgs(args.toStringList(), OsTypeLinux);
else else
m_arguments = args.toString(); m_arguments = args.toString();
@@ -38,6 +38,8 @@
#include <QScrollArea> #include <QScrollArea>
#include <QPainter> #include <QPainter>
using namespace Utils;
namespace ProjectExplorer { namespace ProjectExplorer {
ToolChainConfigWidget::ToolChainConfigWidget(ToolChain *tc) : ToolChainConfigWidget::ToolChainConfigWidget(ToolChain *tc) :
@@ -128,15 +130,15 @@ void ToolChainConfigWidget::clearErrorMessage()
QStringList ToolChainConfigWidget::splitString(const QString &s) QStringList ToolChainConfigWidget::splitString(const QString &s)
{ {
Utils::QtcProcess::SplitError splitError; ProcessArgs::SplitError splitError;
const Utils::OsType osType = Utils::HostOsInfo::hostOs(); const OsType osType = HostOsInfo::hostOs();
QStringList res = Utils::QtcProcess::splitArgs(s, osType, false, &splitError); QStringList res = ProcessArgs::splitArgs(s, osType, false, &splitError);
if (splitError != Utils::QtcProcess::SplitOk){ if (splitError != ProcessArgs::SplitOk) {
res = Utils::QtcProcess::splitArgs(s + '\\', osType, false, &splitError); res = ProcessArgs::splitArgs(s + '\\', osType, false, &splitError);
if (splitError != Utils::QtcProcess::SplitOk){ if (splitError != ProcessArgs::SplitOk) {
res = Utils::QtcProcess::splitArgs(s + '"', osType, false, &splitError); res = ProcessArgs::splitArgs(s + '"', osType, false, &splitError);
if (splitError != Utils::QtcProcess::SplitOk) if (splitError != ProcessArgs::SplitOk)
res = Utils::QtcProcess::splitArgs(s + '\'', osType, false, &splitError); res = ProcessArgs::splitArgs(s + '\'', osType, false, &splitError);
} }
} }
return res; return res;
@@ -497,7 +497,7 @@ void QbsBuildStep::handleProcessResult(
if (success && !hasOutput) if (success && !hasOutput)
return; return;
emit addOutput(executable.toUserOutput() + ' ' + QtcProcess::joinArgs(arguments), emit addOutput(executable.toUserOutput() + ' ' + ProcessArgs::joinArgs(arguments),
OutputFormat::Stdout); OutputFormat::Stdout);
for (const QString &line : stdErr) for (const QString &line : stdErr)
emit addOutput(line, OutputFormat::Stderr); emit addOutput(line, OutputFormat::Stderr);
@@ -774,7 +774,7 @@ void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data)
for (QVariantMap::const_iterator i = editable.constBegin(); i != editable.constEnd(); ++i) for (QVariantMap::const_iterator i = editable.constBegin(); i != editable.constEnd(); ++i)
propertyList.append(i.key() + ':' + i.value().toString()); propertyList.append(i.key() + ':' + i.value().toString());
propertyEdit->setText(QtcProcess::joinArgs(propertyList)); propertyEdit->setText(ProcessArgs::joinArgs(propertyList));
} }
void QbsBuildStep::changeBuildVariant() void QbsBuildStep::changeBuildVariant()
@@ -851,10 +851,9 @@ QbsBuildStep *QbsBuildStepConfigWidget::qbsStep() const
bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage) bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage)
{ {
Utils::QtcProcess::SplitError err; ProcessArgs::SplitError err;
QStringList argList = Utils::QtcProcess::splitArgs(edit->text(), Utils::HostOsInfo::hostOs(), QStringList argList = ProcessArgs::splitArgs(edit->text(), HostOsInfo::hostOs(), false, &err);
false, &err); if (err != ProcessArgs::SplitOk) {
if (err != Utils::QtcProcess::SplitOk) {
if (errorMessage) if (errorMessage)
*errorMessage = tr("Could not split properties."); *errorMessage = tr("Could not split properties.");
return false; return false;
@@ -397,7 +397,7 @@ static QString smartQuote(const QString &aString)
{ {
// The OS type is not important in that case, but use always the same // The OS type is not important in that case, but use always the same
// in order not to generate different quoting depending on host platform // in order not to generate different quoting depending on host platform
return Utils::QtcProcess::quoteArg(aString, Utils::OsTypeLinux); return Utils::ProcessArgs::quoteArg(aString, Utils::OsTypeLinux);
} }
static QString appendSeparator(const QString &aString) static QString appendSeparator(const QString &aString)
@@ -76,7 +76,7 @@ void MakeFileParse::parseArgs(const QString &args, const QString &project,
bool after = false; bool after = false;
bool ignoreNext = false; bool ignoreNext = false;
m_unparsedArguments = args; m_unparsedArguments = args;
QtcProcess::ArgIterator ait(&m_unparsedArguments); ProcessArgs::ArgIterator ait(&m_unparsedArguments);
while (ait.next()) { while (ait.next()) {
if (ignoreNext) { if (ignoreNext) {
// Ignoring // Ignoring
@@ -391,11 +391,11 @@ void MakeFileParse::parseCommandLine(const QString &command, const QString &proj
const QList<QMakeAssignment> &assignmentsToUse = m_mode == Mode::FilterKnownConfigValues const QList<QMakeAssignment> &assignmentsToUse = m_mode == Mode::FilterKnownConfigValues
? filteredAssignments : assignments; ? filteredAssignments : assignments;
foreach (const QMakeAssignment &qa, assignmentsToUse) foreach (const QMakeAssignment &qa, assignmentsToUse)
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value); ProcessArgs::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
if (!afterAssignments.isEmpty()) { if (!afterAssignments.isEmpty()) {
QtcProcess::addArg(&m_unparsedArguments, QLatin1String("-after")); ProcessArgs::addArg(&m_unparsedArguments, QLatin1String("-after"));
foreach (const QMakeAssignment &qa, afterAssignments) foreach (const QMakeAssignment &qa, afterAssignments)
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value); ProcessArgs::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
} }
} }
@@ -527,8 +527,8 @@ void QmakeProjectManagerPlugin::testMakefileParser()
MakeFileParse parser("/tmp/something", MakeFileParse::Mode::FilterKnownConfigValues); MakeFileParse parser("/tmp/something", MakeFileParse::Mode::FilterKnownConfigValues);
parser.parseCommandLine(command, project); parser.parseCommandLine(command, project);
QCOMPARE(Utils::QtcProcess::splitArgs(parser.unparsedArguments()), QCOMPARE(Utils::ProcessArgs::splitArgs(parser.unparsedArguments()),
Utils::QtcProcess::splitArgs(unparsedArguments)); Utils::ProcessArgs::splitArgs(unparsedArguments));
QCOMPARE(parser.effectiveBuildConfig({}), effectiveBuildConfig); QCOMPARE(parser.effectiveBuildConfig({}), effectiveBuildConfig);
const QMakeStepConfig qmsc = parser.config(); const QMakeStepConfig qmsc = parser.config();
@@ -646,7 +646,7 @@ QString QmakeBuildConfiguration::extractSpecFromArguments(QString *args,
bool ignoreNext = false; bool ignoreNext = false;
bool nextIsSpec = false; bool nextIsSpec = false;
for (QtcProcess::ArgIterator ait(args); ait.next(); ) { for (ProcessArgs::ArgIterator ait(args); ait.next(); ) {
if (ignoreNext) { if (ignoreNext) {
ignoreNext = false; ignoreNext = false;
ait.deleteArg(); ait.deleteArg();
@@ -1140,9 +1140,9 @@ QByteArray QmakeProFile::cxxDefines() const
QByteArray result; QByteArray result;
foreach (const QString &def, variableValue(Variable::Defines)) { foreach (const QString &def, variableValue(Variable::Defines)) {
// 'def' is shell input, so interpret it. // 'def' is shell input, so interpret it.
QtcProcess::SplitError error = QtcProcess::SplitOk; ProcessArgs::SplitError error = ProcessArgs::SplitOk;
const QStringList args = QtcProcess::splitArgs(def, HostOsInfo::hostOs(), false, &error); const QStringList args = ProcessArgs::splitArgs(def, HostOsInfo::hostOs(), false, &error);
if (error != QtcProcess::SplitOk || args.size() == 0) if (error != ProcessArgs::SplitOk || args.size() == 0)
continue; continue;
result += "#define "; result += "#define ";
+10 -10
View File
@@ -142,7 +142,7 @@ QString QMakeStep::allArguments(const BaseQtVersion *v, ArgumentFlags flags) con
if (v->qtVersion() < QtVersionNumber(5, 0, 0)) if (v->qtVersion() < QtVersionNumber(5, 0, 0))
arguments << "-r"; arguments << "-r";
bool userProvidedMkspec = false; bool userProvidedMkspec = false;
for (QtcProcess::ConstArgIterator ait(userArguments()); ait.next(); ) { for (ProcessArgs::ConstArgIterator ait(userArguments()); ait.next(); ) {
if (ait.value() == "-spec") { if (ait.value() == "-spec") {
if (ait.next()) { if (ait.next()) {
userProvidedMkspec = true; userProvidedMkspec = true;
@@ -159,11 +159,11 @@ QString QMakeStep::allArguments(const BaseQtVersion *v, ArgumentFlags flags) con
arguments << deducedArguments().toArguments(); arguments << deducedArguments().toArguments();
QString args = QtcProcess::joinArgs(arguments); QString args = ProcessArgs::joinArgs(arguments);
// User arguments // User arguments
QtcProcess::addArgs(&args, userArguments()); ProcessArgs::addArgs(&args, userArguments());
for (QString arg : qAsConst(m_extraArgs)) for (QString arg : qAsConst(m_extraArgs))
QtcProcess::addArgs(&args, arg); ProcessArgs::addArgs(&args, arg);
return (flags & ArgumentFlag::Expand) ? bc->macroExpander()->expand(args) : args; return (flags & ArgumentFlag::Expand) ? bc->macroExpander()->expand(args) : args;
} }
@@ -419,10 +419,10 @@ QString QMakeStep::makeArguments(const QString &makefile) const
{ {
QString args; QString args;
if (!makefile.isEmpty()) { if (!makefile.isEmpty()) {
QtcProcess::addArg(&args, "-f"); ProcessArgs::addArg(&args, "-f");
QtcProcess::addArg(&args, makefile); ProcessArgs::addArg(&args, makefile);
} }
QtcProcess::addArg(&args, "qmake_all"); ProcessArgs::addArg(&args, "qmake_all");
return args; return args;
} }
@@ -453,7 +453,7 @@ QStringList QMakeStep::parserArguments()
QStringList result = m_extraParserArgs; QStringList result = m_extraParserArgs;
BaseQtVersion *qt = QtKitAspect::qtVersion(kit()); BaseQtVersion *qt = QtKitAspect::qtVersion(kit());
QTC_ASSERT(qt, return QStringList()); QTC_ASSERT(qt, return QStringList());
for (QtcProcess::ConstArgIterator ait(allArguments(qt, ArgumentFlag::Expand)); ait.next(); ) { for (ProcessArgs::ConstArgIterator ait(allArguments(qt, ArgumentFlag::Expand)); ait.next(); ) {
if (ait.isSimple()) if (ait.isSimple())
result << ait.value(); result << ait.value();
} }
@@ -468,8 +468,8 @@ QString QMakeStep::userArguments() const
QString QMakeStep::mkspec() const QString QMakeStep::mkspec() const
{ {
QString additionalArguments = userArguments(); QString additionalArguments = userArguments();
QtcProcess::addArgs(&additionalArguments, m_extraArgs); ProcessArgs::addArgs(&additionalArguments, m_extraArgs);
for (QtcProcess::ArgIterator ait(&additionalArguments); ait.next(); ) { for (ProcessArgs::ArgIterator ait(&additionalArguments); ait.next(); ) {
if (ait.value() == "-spec") { if (ait.value() == "-spec") {
if (ait.next()) if (ait.next())
return FilePath::fromUserInput(ait.value()).toString(); return FilePath::fromUserInput(ait.value()).toString();
@@ -148,7 +148,7 @@ LocalQmlPreviewSupport::LocalQmlPreviewSupport(ProjectExplorer::RunControl *runC
} }
} }
Utils::QtcProcess::addArg(&runnable.commandLineArguments, Utils::ProcessArgs::addArg(&runnable.commandLineArguments,
QmlDebug::qmlDebugLocalArguments(QmlDebug::QmlPreviewServices, QmlDebug::qmlDebugLocalArguments(QmlDebug::QmlPreviewServices,
serverUrl.path())); serverUrl.path()));
doStart(runnable, {}); doStart(runnable, {});
@@ -51,7 +51,6 @@
using namespace Core; using namespace Core;
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace QmlProfiler::Internal;
namespace QmlProfiler { namespace QmlProfiler {
namespace Internal { namespace Internal {
@@ -249,7 +248,7 @@ LocalQmlProfilerSupport::LocalQmlProfilerSupport(RunControl *runControl, const Q
else else
QTC_CHECK(false); QTC_CHECK(false);
QString arguments = Utils::QtcProcess::quoteArg( QString arguments = Utils::ProcessArgs::quoteArg(
QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlProfilerServices, code, true)); QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlProfilerServices, code, true));
if (!debuggee.commandLineArguments.isEmpty()) if (!debuggee.commandLineArguments.isEmpty())
@@ -199,26 +199,26 @@ QString QmlProjectRunConfiguration::commandLineArguments() const
const QmlBuildSystem *bs = qobject_cast<QmlBuildSystem *>(target()->buildSystem()); const QmlBuildSystem *bs = qobject_cast<QmlBuildSystem *>(target()->buildSystem());
foreach (const QString &importPath, foreach (const QString &importPath,
QmlBuildSystem::makeAbsolute(bs->targetDirectory(), bs->customImportPaths())) { QmlBuildSystem::makeAbsolute(bs->targetDirectory(), bs->customImportPaths())) {
QtcProcess::addArg(&args, "-I", osType); ProcessArgs::addArg(&args, "-I", osType);
QtcProcess::addArg(&args, importPath, osType); ProcessArgs::addArg(&args, importPath, osType);
} }
for (const QString &fileSelector : bs->customFileSelectors()) { for (const QString &fileSelector : bs->customFileSelectors()) {
QtcProcess::addArg(&args, "-S", osType); ProcessArgs::addArg(&args, "-S", osType);
QtcProcess::addArg(&args, fileSelector, osType); ProcessArgs::addArg(&args, fileSelector, osType);
} }
if (Utils::HostOsInfo::isWindowsHost() && bs->forceFreeType()) { if (HostOsInfo::isWindowsHost() && bs->forceFreeType()) {
Utils::QtcProcess::addArg(&args, "-platform", osType); ProcessArgs::addArg(&args, "-platform", osType);
Utils::QtcProcess::addArg(&args, "windows:fontengine=freetype", osType); ProcessArgs::addArg(&args, "windows:fontengine=freetype", osType);
} }
const QString main = bs->targetFile(FilePath::fromString(mainScript())).toString(); const QString main = bs->targetFile(FilePath::fromString(mainScript())).toString();
if (!main.isEmpty()) if (!main.isEmpty())
QtcProcess::addArg(&args, main, osType); ProcessArgs::addArg(&args, main, osType);
if (m_multiLanguageAspect && m_multiLanguageAspect->value()) if (m_multiLanguageAspect && m_multiLanguageAspect->value())
QtcProcess::addArg(&args, "-qmljsdebugger=file:unused_if_debugger_arguments_added,services:DebugTranslation", osType); ProcessArgs::addArg(&args, "-qmljsdebugger=file:unused_if_debugger_arguments_added,services:DebugTranslation", osType);
return args; return args;
} }
+1 -1
View File
@@ -61,7 +61,7 @@ QnxQmlProfilerSupport::QnxQmlProfilerSupport(RunControl *runControl)
profiler->recordData("QmlServerUrl", serverUrl); profiler->recordData("QmlServerUrl", serverUrl);
Runnable r = runControl->runnable(); Runnable r = runControl->runnable();
QtcProcess::addArg(&r.commandLineArguments, ProcessArgs::addArg(&r.commandLineArguments,
QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, serverUrl), QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, serverUrl),
Utils::OsTypeOtherUnix); Utils::OsTypeOtherUnix);
+2 -2
View File
@@ -116,8 +116,8 @@ public:
arguments.append(QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices, arguments.append(QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices,
portsGatherer->qmlServer())); portsGatherer->qmlServer()));
} }
arguments.append(QtcProcess::splitArgs(r.commandLineArguments)); arguments.append(ProcessArgs::splitArgs(r.commandLineArguments));
r.commandLineArguments = QtcProcess::joinArgs(arguments); r.commandLineArguments = ProcessArgs::joinArgs(arguments);
doStart(r, runControl->device()); doStart(r, runControl->device());
}); });
+5 -6
View File
@@ -46,17 +46,16 @@ QnxDeviceProcess::QnxDeviceProcess(const QSharedPointer<const IDevice> &device,
QString QnxDeviceProcess::fullCommandLine(const Runnable &runnable) const QString QnxDeviceProcess::fullCommandLine(const Runnable &runnable) const
{ {
QStringList args = QtcProcess::splitArgs(runnable.commandLineArguments); QStringList args = ProcessArgs::splitArgs(runnable.commandLineArguments);
args.prepend(runnable.executable.toString()); args.prepend(runnable.executable.toString());
QString cmd = QtcProcess::Arguments::createUnixArgs(args).toString(); QString cmd = ProcessArgs::createUnixArgs(args).toString();
QString fullCommandLine = QLatin1String( QString fullCommandLine =
"test -f /etc/profile && . /etc/profile ; " "test -f /etc/profile && . /etc/profile ; "
"test -f $HOME/profile && . $HOME/profile ; " "test -f $HOME/profile && . $HOME/profile ; ";
);
if (!runnable.workingDirectory.isEmpty()) if (!runnable.workingDirectory.isEmpty())
fullCommandLine += QString::fromLatin1("cd %1 ; ").arg(QtcProcess::quoteArg(runnable.workingDirectory)); fullCommandLine += QString::fromLatin1("cd %1 ; ").arg(ProcessArgs::quoteArg(runnable.workingDirectory));
const Environment env = runnable.environment; const Environment env = runnable.environment;
for (auto it = env.constBegin(); it != env.constEnd(); ++it) { for (auto it = env.constBegin(); it != env.constEnd(); ++it) {
@@ -198,7 +198,7 @@ void GenericDirectUploadService::stopDeployment()
void GenericDirectUploadService::runStat(const DeployableFile &file) void GenericDirectUploadService::runStat(const DeployableFile &file)
{ {
// We'd like to use --format=%Y, but it's not supported by busybox. // We'd like to use --format=%Y, but it's not supported by busybox.
const QString statCmd = "stat -t " + Utils::QtcProcess::quoteArgUnix(file.remoteFilePath()); const QString statCmd = "stat -t " + Utils::ProcessArgs::quoteArgUnix(file.remoteFilePath());
SshRemoteProcess * const statProc = connection()->createRemoteProcess(statCmd).release(); SshRemoteProcess * const statProc = connection()->createRemoteProcess(statCmd).release();
statProc->setParent(this); statProc->setParent(this);
connect(statProc, &SshRemoteProcess::done, this, connect(statProc, &SshRemoteProcess::done, this,
@@ -344,7 +344,7 @@ void GenericDirectUploadService::chmod()
if (!f.isExecutable()) if (!f.isExecutable())
continue; continue;
const QString command = QLatin1String("chmod a+x ") const QString command = QLatin1String("chmod a+x ")
+ Utils::QtcProcess::quoteArgUnix(f.remoteFilePath()); + Utils::ProcessArgs::quoteArgUnix(f.remoteFilePath());
SshRemoteProcess * const chmodProc SshRemoteProcess * const chmodProc
= connection()->createRemoteProcess(command).release(); = connection()->createRemoteProcess(command).release();
chmodProc->setParent(this); chmodProc->setParent(this);
+4 -4
View File
@@ -241,7 +241,7 @@ void MakeInstallStep::updateArgsFromAspect()
{ {
if (customCommandLineAspect()->isChecked()) if (customCommandLineAspect()->isChecked())
return; return;
setUserArguments(QtcProcess::joinArgs(target()->makeInstallCommand( setUserArguments(ProcessArgs::joinArgs(target()->makeInstallCommand(
static_cast<StringAspect *>(aspect(InstallRootAspectId))->filePath().toString()) static_cast<StringAspect *>(aspect(InstallRootAspectId))->filePath().toString())
.arguments)); .arguments));
updateFullCommandLine(); updateFullCommandLine();
@@ -252,7 +252,7 @@ void MakeInstallStep::updateFullCommandLine()
// FIXME: Only executable? // FIXME: Only executable?
static_cast<StringAspect *>(aspect(FullCommandLineAspectId))->setValue( static_cast<StringAspect *>(aspect(FullCommandLineAspectId))->setValue(
QDir::toNativeSeparators( QDir::toNativeSeparators(
QtcProcess::quoteArg(makeExecutable().toString())) ProcessArgs::quoteArg(makeExecutable().toString()))
+ ' ' + userArguments()); + ' ' + userArguments());
} }
@@ -261,9 +261,9 @@ void MakeInstallStep::updateFromCustomCommandLineAspect()
const StringAspect * const aspect = customCommandLineAspect(); const StringAspect * const aspect = customCommandLineAspect();
if (!aspect->isChecked()) if (!aspect->isChecked())
return; return;
const QStringList tokens = QtcProcess::splitArgs(aspect->value()); const QStringList tokens = ProcessArgs::splitArgs(aspect->value());
setMakeCommand(tokens.isEmpty() ? FilePath() : FilePath::fromString(tokens.first())); setMakeCommand(tokens.isEmpty() ? FilePath() : FilePath::fromString(tokens.first()));
setUserArguments(QtcProcess::joinArgs(tokens.mid(1))); setUserArguments(ProcessArgs::joinArgs(tokens.mid(1)));
} }
StringAspect *MakeInstallStep::customCommandLineAspect() const StringAspect *MakeInstallStep::customCommandLineAspect() const
@@ -58,7 +58,7 @@ RemoteLinuxQmlToolingSupport::RemoteLinuxQmlToolingSupport(RunControl *runContro
QmlDebug::QmlDebugServicesPreset services = QmlDebug::servicesForRunMode(runControl->runMode()); QmlDebug::QmlDebugServicesPreset services = QmlDebug::servicesForRunMode(runControl->runMode());
Runnable r = runControl->runnable(); Runnable r = runControl->runnable();
QtcProcess::addArg(&r.commandLineArguments, ProcessArgs::addArg(&r.commandLineArguments,
QmlDebug::qmlDebugTcpArguments(services, serverUrl), QmlDebug::qmlDebugTcpArguments(services, serverUrl),
OsTypeLinux); OsTypeLinux);
+3 -3
View File
@@ -103,8 +103,8 @@ void RsyncDeployService::createRemoteDirectories()
remoteDirs << f.remoteDirectory(); remoteDirs << f.remoteDirectory();
remoteDirs.sort(); remoteDirs.sort();
remoteDirs.removeDuplicates(); remoteDirs.removeDuplicates();
m_mkdir = connection()->createRemoteProcess("mkdir -p " + QtcProcess::Arguments m_mkdir = connection()->createRemoteProcess("mkdir -p " +
::createUnixArgs(remoteDirs).toString()); ProcessArgs::createUnixArgs(remoteDirs).toString());
connect(m_mkdir.get(), &SshRemoteProcess::done, this, [this](const QString &error) { connect(m_mkdir.get(), &SshRemoteProcess::done, this, [this](const QString &error) {
QString userError; QString userError;
if (!error.isEmpty()) if (!error.isEmpty())
@@ -237,7 +237,7 @@ QString RsyncDeployStep::defaultFlags()
RsyncCommandLine RsyncDeployStep::rsyncCommand(const SshConnection &sshConnection, RsyncCommandLine RsyncDeployStep::rsyncCommand(const SshConnection &sshConnection,
const QString &flags) const QString &flags)
{ {
const QString sshCmdLine = QtcProcess::joinArgs( const QString sshCmdLine = ProcessArgs::joinArgs(
QStringList{SshSettings::sshFilePath().toUserOutput()} QStringList{SshSettings::sshFilePath().toUserOutput()}
<< sshConnection.connectionOptions(SshSettings::sshFilePath()), OsTypeLinux); << sshConnection.connectionOptions(SshSettings::sshFilePath()), OsTypeLinux);
const SshConnectionParameters sshParams = sshConnection.connectionParameters(); const SshConnectionParameters sshParams = sshConnection.connectionParameters();
+1 -1
View File
@@ -97,7 +97,7 @@ QStringList CallgrindToolRunner::toolArguments() const
if (!m_argumentForToggleCollect.isEmpty()) if (!m_argumentForToggleCollect.isEmpty())
arguments << m_argumentForToggleCollect; arguments << m_argumentForToggleCollect;
arguments << Utils::QtcProcess::splitArgs(m_settings.callgrindArguments.value()); arguments << Utils::ProcessArgs::splitArgs(m_settings.callgrindArguments.value());
return arguments; return arguments;
} }
+1 -1
View File
@@ -220,7 +220,7 @@ QStringList MemcheckToolRunner::toolArguments() const
if (m_withGdb) if (m_withGdb)
arguments << "--vgdb=yes" << "--vgdb-error=0"; arguments << "--vgdb=yes" << "--vgdb-error=0";
arguments << Utils::QtcProcess::splitArgs(m_settings.memcheckArguments.value()); arguments << Utils::ProcessArgs::splitArgs(m_settings.memcheckArguments.value());
return arguments; return arguments;
} }
+4 -4
View File
@@ -448,12 +448,12 @@ static inline QString formatArguments(const QStringList &args)
if (i) if (i)
str << ' '; str << ' ';
if (arg.startsWith(QString::fromLatin1(passwordOptionC) + '=')) { if (arg.startsWith(QString::fromLatin1(passwordOptionC) + '=')) {
str << QtcProcess::quoteArg("--password=********"); str << ProcessArgs::quoteArg("--password=********");
continue; continue;
} }
str << QtcProcess::quoteArg(arg); str << ProcessArgs::quoteArg(arg);
if (arg == passwordOptionC) { if (arg == passwordOptionC) {
str << ' ' << QtcProcess::quoteArg("********"); str << ' ' << ProcessArgs::quoteArg("********");
i++; i++;
} }
} }
@@ -463,7 +463,7 @@ static inline QString formatArguments(const QStringList &args)
QString VcsOutputWindow::msgExecutionLogEntry(const QString &workingDir, const CommandLine &command) QString VcsOutputWindow::msgExecutionLogEntry(const QString &workingDir, const CommandLine &command)
{ {
const QString args = formatArguments(command.splitArguments()); const QString args = formatArguments(command.splitArguments());
const QString nativeExecutable = QtcProcess::quoteArg(command.executable().toUserOutput()); const QString nativeExecutable = ProcessArgs::quoteArg(command.executable().toUserOutput());
if (workingDir.isEmpty()) if (workingDir.isEmpty())
return tr("Running: %1 %2").arg(nativeExecutable, args) + '\n'; return tr("Running: %1 %2").arg(nativeExecutable, args) + '\n';
return tr("Running in %1: %2 %3"). return tr("Running in %1: %2 %3").
@@ -346,8 +346,8 @@ void WinRtPackageDeploymentStep::stdOutput(const QString &line)
QString WinRtPackageDeploymentStep::defaultWinDeployQtArguments() const QString WinRtPackageDeploymentStep::defaultWinDeployQtArguments() const
{ {
QString args; QString args;
QtcProcess::addArg(&args, QStringLiteral("--qmldir")); ProcessArgs::addArg(&args, QStringLiteral("--qmldir"));
QtcProcess::addArg(&args, project()->projectDirectory().toUserOutput()); ProcessArgs::addArg(&args, project()->projectDirectory().toUserOutput());
return args; return args;
} }
@@ -37,7 +37,7 @@
static QList<QByteArray> splitArgs(QString &argsString) static QList<QByteArray> splitArgs(QString &argsString)
{ {
QList<QByteArray> result; QList<QByteArray> result;
Utils::QtcProcess::ArgIterator it(&argsString); Utils::ProcessArgs::ArgIterator it(&argsString);
while (it.next()) while (it.next())
result.append(it.value().toUtf8()); result.append(it.value().toUtf8());
return result; return result;
@@ -112,7 +112,7 @@ const char *CommandLineArguments::at(int position) const
static Utf8String maybeQuoted(const char *argumentAsCString) static Utf8String maybeQuoted(const char *argumentAsCString)
{ {
const QString argumentAsQString = QString::fromUtf8(argumentAsCString); const QString argumentAsQString = QString::fromUtf8(argumentAsCString);
const QString quotedArgument = Utils::QtcProcess::quoteArg(argumentAsQString); const QString quotedArgument = Utils::ProcessArgs::quoteArg(argumentAsQString);
return Utf8String::fromString(quotedArgument); return Utf8String::fromString(quotedArgument);
} }
+2 -2
View File
@@ -82,14 +82,14 @@ static bool generateEnvironmentSettings(Utils::Environment &env,
Utils::TempFileSaver saver(QDir::tempPath() + "/XXXXXX.bat"); Utils::TempFileSaver saver(QDir::tempPath() + "/XXXXXX.bat");
QByteArray call = "call "; QByteArray call = "call ";
call += Utils::QtcProcess::quoteArg(batchFile).toLocal8Bit(); call += Utils::ProcessArgs::quoteArg(batchFile).toLocal8Bit();
if (!batchArgs.isEmpty()) { if (!batchArgs.isEmpty()) {
call += ' '; call += ' ';
call += batchArgs.toLocal8Bit(); call += batchArgs.toLocal8Bit();
} }
saver.write(call + "\r\n"); saver.write(call + "\r\n");
const QByteArray redirect = "set > " + Utils::QtcProcess::quoteArg( const QByteArray redirect = "set > " + Utils::ProcessArgs::quoteArg(
QDir::toNativeSeparators(tempOutFile)).toLocal8Bit() + "\r\n"; QDir::toNativeSeparators(tempOutFile)).toLocal8Bit() + "\r\n";
saver.write(redirect); saver.write(redirect);
if (!saver.finalize()) { if (!saver.finalize()) {
+139 -139
View File
@@ -130,55 +130,55 @@ void tst_QtcProcess::initTestCase()
} }
Q_DECLARE_METATYPE(QtcProcess::SplitError) Q_DECLARE_METATYPE(ProcessArgs::SplitError)
Q_DECLARE_METATYPE(Utils::OsType) Q_DECLARE_METATYPE(Utils::OsType)
void tst_QtcProcess::splitArgs_data() void tst_QtcProcess::splitArgs_data()
{ {
QTest::addColumn<QString>("in"); QTest::addColumn<QString>("in");
QTest::addColumn<QString>("out"); QTest::addColumn<QString>("out");
QTest::addColumn<QtcProcess::SplitError>("err"); QTest::addColumn<ProcessArgs::SplitError>("err");
QTest::addColumn<Utils::OsType>("os"); QTest::addColumn<Utils::OsType>("os");
static const struct { static const struct {
const char * const in; const char * const in;
const char * const out; const char * const out;
const QtcProcess::SplitError err; const ProcessArgs::SplitError err;
const OsType os; const OsType os;
} vals[] = { } vals[] = {
{"", "", QtcProcess::SplitOk, OsTypeWindows}, {"", "", ProcessArgs::SplitOk, OsTypeWindows},
{" ", "", QtcProcess::SplitOk, OsTypeWindows}, {" ", "", ProcessArgs::SplitOk, OsTypeWindows},
{"hi", "hi", QtcProcess::SplitOk, OsTypeWindows}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeWindows},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeWindows}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{" hi ho ", "hi ho", QtcProcess::SplitOk, OsTypeWindows}, {" hi ho ", "hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi ho\" \"hi\" ho ", "\"hi ho\" hi ho", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi ho\" \"hi\" ho ", "\"hi ho\" hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"\\", "\\", QtcProcess::SplitOk, OsTypeWindows}, {"\\", "\\", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\"", "\"\"\\^\"\"\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\"", "\"\"\\^\"\"\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi\"\"\"ho\"", "\"hi\"\\^\"\"ho\"", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi\"\"\"ho\"", "\"hi\"\\^\"\"ho\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\\\\\"", "\"\"\\\\\\^\"\"\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\\\\\"", "\"\"\\\\\\^\"\"\"", ProcessArgs::SplitOk, OsTypeWindows},
{" ^^ ", "\"^^\"", QtcProcess::SplitOk, OsTypeWindows}, {" ^^ ", "\"^^\"", ProcessArgs::SplitOk, OsTypeWindows},
{"hi\"", "", QtcProcess::BadQuoting, OsTypeWindows}, {"hi\"", "", ProcessArgs::BadQuoting, OsTypeWindows},
{"hi\"dood", "", QtcProcess::BadQuoting, OsTypeWindows}, {"hi\"dood", "", ProcessArgs::BadQuoting, OsTypeWindows},
{"%var%", "%var%", QtcProcess::SplitOk, OsTypeWindows}, {"%var%", "%var%", ProcessArgs::SplitOk, OsTypeWindows},
{"", "", QtcProcess::SplitOk, OsTypeLinux}, {"", "", ProcessArgs::SplitOk, OsTypeLinux},
{" ", "", QtcProcess::SplitOk, OsTypeLinux}, {" ", "", ProcessArgs::SplitOk, OsTypeLinux},
{"hi", "hi", QtcProcess::SplitOk, OsTypeLinux}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" hi ho ", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {" hi ho ", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{"'hi ho' \"hi\" ho ", "'hi ho' hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"'hi ho' \"hi\" ho ", "'hi ho' hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" \\ ", "' '", QtcProcess::SplitOk, OsTypeLinux}, {" \\ ", "' '", ProcessArgs::SplitOk, OsTypeLinux},
{" \\\" ", "'\"'", QtcProcess::SplitOk, OsTypeLinux}, {" \\\" ", "'\"'", ProcessArgs::SplitOk, OsTypeLinux},
{" '\"' ", "'\"'", QtcProcess::SplitOk, OsTypeLinux}, {" '\"' ", "'\"'", ProcessArgs::SplitOk, OsTypeLinux},
{" \"\\\"\" ", "'\"'", QtcProcess::SplitOk, OsTypeLinux}, {" \"\\\"\" ", "'\"'", ProcessArgs::SplitOk, OsTypeLinux},
{"hi'", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi'", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"hi\"dood", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi\"dood", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"$var", "'$var'", QtcProcess::SplitOk, OsTypeLinux}, {"$var", "'$var'", ProcessArgs::SplitOk, OsTypeLinux},
{"~", "@HOME@", QtcProcess::SplitOk, OsTypeLinux}, {"~", "@HOME@", ProcessArgs::SplitOk, OsTypeLinux},
{"~ foo", "@HOME@ foo", QtcProcess::SplitOk, OsTypeLinux}, {"~ foo", "@HOME@ foo", ProcessArgs::SplitOk, OsTypeLinux},
{"foo ~", "foo @HOME@", QtcProcess::SplitOk, OsTypeLinux}, {"foo ~", "foo @HOME@", ProcessArgs::SplitOk, OsTypeLinux},
{"~/foo", "@HOME@/foo", QtcProcess::SplitOk, OsTypeLinux}, {"~/foo", "@HOME@/foo", ProcessArgs::SplitOk, OsTypeLinux},
{"~foo", "'~foo'", QtcProcess::SplitOk, OsTypeLinux} {"~foo", "'~foo'", ProcessArgs::SplitOk, OsTypeLinux}
}; };
for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
@@ -194,13 +194,13 @@ void tst_QtcProcess::splitArgs()
{ {
QFETCH(QString, in); QFETCH(QString, in);
QFETCH(QString, out); QFETCH(QString, out);
QFETCH(QtcProcess::SplitError, err); QFETCH(ProcessArgs::SplitError, err);
QFETCH(Utils::OsType, os); QFETCH(Utils::OsType, os);
QtcProcess::SplitError outerr; ProcessArgs::SplitError outerr;
QString outstr = QtcProcess::joinArgs(QtcProcess::splitArgs(in, os, false, &outerr), os); QString outstr = ProcessArgs::joinArgs(ProcessArgs::splitArgs(in, os, false, &outerr), os);
QCOMPARE(outerr, err); QCOMPARE(outerr, err);
if (err == QtcProcess::SplitOk) if (err == ProcessArgs::SplitOk)
QCOMPARE(outstr, out); QCOMPARE(outstr, out);
} }
@@ -208,45 +208,45 @@ void tst_QtcProcess::prepareArgs_data()
{ {
QTest::addColumn<QString>("in"); QTest::addColumn<QString>("in");
QTest::addColumn<QString>("out"); QTest::addColumn<QString>("out");
QTest::addColumn<QtcProcess::SplitError>("err"); QTest::addColumn<ProcessArgs::SplitError>("err");
QTest::addColumn<OsType>("os"); QTest::addColumn<OsType>("os");
static const struct { static const struct {
const char * const in; const char * const in;
const char * const out; const char * const out;
const QtcProcess::SplitError err; const ProcessArgs::SplitError err;
const OsType os; const OsType os;
} vals[] = { } vals[] = {
{" ", " ", QtcProcess::SplitOk, OsTypeWindows}, {" ", " ", ProcessArgs::SplitOk, OsTypeWindows},
{"", "", QtcProcess::SplitOk, OsTypeWindows}, {"", "", ProcessArgs::SplitOk, OsTypeWindows},
{"hi", "hi", QtcProcess::SplitOk, OsTypeWindows}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeWindows},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeWindows}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{" hi ho ", " hi ho ", QtcProcess::SplitOk, OsTypeWindows}, {" hi ho ", " hi ho ", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi ho\" \"hi\" ho ", "\"hi ho\" \"hi\" ho ", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi ho\" \"hi\" ho ", "\"hi ho\" \"hi\" ho ", ProcessArgs::SplitOk, OsTypeWindows},
{"\\", "\\", QtcProcess::SplitOk, OsTypeWindows}, {"\\", "\\", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\"", "\\\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\"", "\\\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi\"\"ho\"", "\"hi\"\"ho\"", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi\"\"ho\"", "\"hi\"\"ho\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\\\\\"", "\\\\\\\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\\\\\"", "\\\\\\\"", ProcessArgs::SplitOk, OsTypeWindows},
{"^^", "^", QtcProcess::SplitOk, OsTypeWindows}, {"^^", "^", ProcessArgs::SplitOk, OsTypeWindows},
{"hi\"", "hi\"", QtcProcess::SplitOk, OsTypeWindows}, {"hi\"", "hi\"", ProcessArgs::SplitOk, OsTypeWindows},
{"hi\"dood", "hi\"dood", QtcProcess::SplitOk, OsTypeWindows}, {"hi\"dood", "hi\"dood", ProcessArgs::SplitOk, OsTypeWindows},
{"%var%", "", QtcProcess::FoundMeta, OsTypeWindows}, {"%var%", "", ProcessArgs::FoundMeta, OsTypeWindows},
{"echo hi > file", "", QtcProcess::FoundMeta, OsTypeWindows}, {"echo hi > file", "", ProcessArgs::FoundMeta, OsTypeWindows},
{"", "", QtcProcess::SplitOk, OsTypeLinux}, {"", "", ProcessArgs::SplitOk, OsTypeLinux},
{" ", "", QtcProcess::SplitOk, OsTypeLinux}, {" ", "", ProcessArgs::SplitOk, OsTypeLinux},
{"hi", "hi", QtcProcess::SplitOk, OsTypeLinux}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" hi ho ", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {" hi ho ", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{"'hi ho' \"hi\" ho ", "'hi ho' hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"'hi ho' \"hi\" ho ", "'hi ho' hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" \\ ", "' '", QtcProcess::SplitOk, OsTypeLinux}, {" \\ ", "' '", ProcessArgs::SplitOk, OsTypeLinux},
{"hi'", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi'", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"hi\"dood", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi\"dood", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"$var", "", QtcProcess::FoundMeta, OsTypeLinux}, {"$var", "", ProcessArgs::FoundMeta, OsTypeLinux},
{"~", "@HOME@", QtcProcess::SplitOk, OsTypeLinux}, {"~", "@HOME@", ProcessArgs::SplitOk, OsTypeLinux},
{"~ foo", "@HOME@ foo", QtcProcess::SplitOk, OsTypeLinux}, {"~ foo", "@HOME@ foo", ProcessArgs::SplitOk, OsTypeLinux},
{"~/foo", "@HOME@/foo", QtcProcess::SplitOk, OsTypeLinux}, {"~/foo", "@HOME@/foo", ProcessArgs::SplitOk, OsTypeLinux},
{"~foo", "", QtcProcess::FoundMeta, OsTypeLinux} {"~foo", "", ProcessArgs::FoundMeta, OsTypeLinux}
}; };
for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
@@ -262,15 +262,15 @@ void tst_QtcProcess::prepareArgs()
{ {
QFETCH(QString, in); QFETCH(QString, in);
QFETCH(QString, out); QFETCH(QString, out);
QFETCH(QtcProcess::SplitError, err); QFETCH(ProcessArgs::SplitError, err);
QFETCH(OsType, os); QFETCH(OsType, os);
QtcProcess::SplitError outerr; ProcessArgs::SplitError outerr;
QtcProcess::Arguments args = QtcProcess::prepareArgs(in, &outerr, os); ProcessArgs args = ProcessArgs::prepareArgs(in, &outerr, os);
QString outstr = args.toString(); QString outstr = args.toString();
QCOMPARE(outerr, err); QCOMPARE(outerr, err);
if (err == QtcProcess::SplitOk) if (err == ProcessArgs::SplitOk)
QCOMPARE(outstr, out); QCOMPARE(outstr, out);
} }
@@ -278,65 +278,65 @@ void tst_QtcProcess::prepareArgsEnv_data()
{ {
QTest::addColumn<QString>("in"); QTest::addColumn<QString>("in");
QTest::addColumn<QString>("out"); QTest::addColumn<QString>("out");
QTest::addColumn<QtcProcess::SplitError>("err"); QTest::addColumn<ProcessArgs::SplitError>("err");
QTest::addColumn<OsType>("os"); QTest::addColumn<OsType>("os");
static const struct { static const struct {
const char * const in; const char * const in;
const char * const out; const char * const out;
const QtcProcess::SplitError err; const ProcessArgs::SplitError err;
const OsType os; const OsType os;
} vals[] = { } vals[] = {
{" ", " ", QtcProcess::SplitOk, OsTypeWindows}, {" ", " ", ProcessArgs::SplitOk, OsTypeWindows},
{"", "", QtcProcess::SplitOk, OsTypeWindows}, {"", "", ProcessArgs::SplitOk, OsTypeWindows},
{"hi", "hi", QtcProcess::SplitOk, OsTypeWindows}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeWindows},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeWindows}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{" hi ho ", " hi ho ", QtcProcess::SplitOk, OsTypeWindows}, {" hi ho ", " hi ho ", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi ho\" \"hi\" ho ", "\"hi ho\" \"hi\" ho ", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi ho\" \"hi\" ho ", "\"hi ho\" \"hi\" ho ", ProcessArgs::SplitOk, OsTypeWindows},
{"\\", "\\", QtcProcess::SplitOk, OsTypeWindows}, {"\\", "\\", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\"", "\\\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\"", "\\\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\"hi\"\"ho\"", "\"hi\"\"ho\"", QtcProcess::SplitOk, OsTypeWindows}, {"\"hi\"\"ho\"", "\"hi\"\"ho\"", ProcessArgs::SplitOk, OsTypeWindows},
{"\\\\\\\"", "\\\\\\\"", QtcProcess::SplitOk, OsTypeWindows}, {"\\\\\\\"", "\\\\\\\"", ProcessArgs::SplitOk, OsTypeWindows},
{"^^", "^", QtcProcess::SplitOk, OsTypeWindows}, {"^^", "^", ProcessArgs::SplitOk, OsTypeWindows},
{"hi\"", "hi\"", QtcProcess::SplitOk, OsTypeWindows}, {"hi\"", "hi\"", ProcessArgs::SplitOk, OsTypeWindows},
{"hi\"dood", "hi\"dood", QtcProcess::SplitOk, OsTypeWindows}, {"hi\"dood", "hi\"dood", ProcessArgs::SplitOk, OsTypeWindows},
{"%empty%", "%empty%", QtcProcess::SplitOk, OsTypeWindows}, // Yep, no empty variables on Windows. {"%empty%", "%empty%", ProcessArgs::SplitOk, OsTypeWindows}, // Yep, no empty variables on Windows.
{"%word%", "hi", QtcProcess::SplitOk, OsTypeWindows}, {"%word%", "hi", ProcessArgs::SplitOk, OsTypeWindows},
{" %word% ", " hi ", QtcProcess::SplitOk, OsTypeWindows}, {" %word% ", " hi ", ProcessArgs::SplitOk, OsTypeWindows},
{"%words%", "hi ho", QtcProcess::SplitOk, OsTypeWindows}, {"%words%", "hi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"%nonsense%words%", "%nonsensehi ho", QtcProcess::SplitOk, OsTypeWindows}, {"%nonsense%words%", "%nonsensehi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"fail%nonsense%words%", "fail%nonsensehi ho", QtcProcess::SplitOk, OsTypeWindows}, {"fail%nonsense%words%", "fail%nonsensehi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"%words%words%", "hi howords%", QtcProcess::SplitOk, OsTypeWindows}, {"%words%words%", "hi howords%", ProcessArgs::SplitOk, OsTypeWindows},
{"%words%%words%", "hi hohi ho", QtcProcess::SplitOk, OsTypeWindows}, {"%words%%words%", "hi hohi ho", ProcessArgs::SplitOk, OsTypeWindows},
{"echo hi > file", "", QtcProcess::FoundMeta, OsTypeWindows}, {"echo hi > file", "", ProcessArgs::FoundMeta, OsTypeWindows},
{"", "", QtcProcess::SplitOk, OsTypeLinux}, {"", "", ProcessArgs::SplitOk, OsTypeLinux},
{" ", "", QtcProcess::SplitOk, OsTypeLinux}, {" ", "", ProcessArgs::SplitOk, OsTypeLinux},
{"hi", "hi", QtcProcess::SplitOk, OsTypeLinux}, {"hi", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{"hi ho", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"hi ho", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" hi ho ", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {" hi ho ", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{"'hi ho' \"hi\" ho ", "'hi ho' hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"'hi ho' \"hi\" ho ", "'hi ho' hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{" \\ ", "' '", QtcProcess::SplitOk, OsTypeLinux}, {" \\ ", "' '", ProcessArgs::SplitOk, OsTypeLinux},
{"hi'", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi'", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"hi\"dood", "", QtcProcess::BadQuoting, OsTypeLinux}, {"hi\"dood", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"$empty", "", QtcProcess::SplitOk, OsTypeLinux}, {"$empty", "", ProcessArgs::SplitOk, OsTypeLinux},
{"$word", "hi", QtcProcess::SplitOk, OsTypeLinux}, {"$word", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{" $word ", "hi", QtcProcess::SplitOk, OsTypeLinux}, {" $word ", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{"${word}", "hi", QtcProcess::SplitOk, OsTypeLinux}, {"${word}", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{" ${word} ", "hi", QtcProcess::SplitOk, OsTypeLinux}, {" ${word} ", "hi", ProcessArgs::SplitOk, OsTypeLinux},
{"$words", "hi ho", QtcProcess::SplitOk, OsTypeLinux}, {"$words", "hi ho", ProcessArgs::SplitOk, OsTypeLinux},
{"$spacedwords", "hi ho sucker", QtcProcess::SplitOk, OsTypeLinux}, {"$spacedwords", "hi ho sucker", ProcessArgs::SplitOk, OsTypeLinux},
{"hi${empty}ho", "hiho", QtcProcess::SplitOk, OsTypeLinux}, {"hi${empty}ho", "hiho", ProcessArgs::SplitOk, OsTypeLinux},
{"hi${words}ho", "hihi hoho", QtcProcess::SplitOk, OsTypeLinux}, {"hi${words}ho", "hihi hoho", ProcessArgs::SplitOk, OsTypeLinux},
{"hi${spacedwords}ho", "hi hi ho sucker ho", QtcProcess::SplitOk, OsTypeLinux}, {"hi${spacedwords}ho", "hi hi ho sucker ho", ProcessArgs::SplitOk, OsTypeLinux},
{"${", "", QtcProcess::BadQuoting, OsTypeLinux}, {"${", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"${var", "", QtcProcess::BadQuoting, OsTypeLinux}, {"${var", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"${var ", "", QtcProcess::FoundMeta, OsTypeLinux}, {"${var ", "", ProcessArgs::FoundMeta, OsTypeLinux},
{"\"hi${words}ho\"", "'hihi hoho'", QtcProcess::SplitOk, OsTypeLinux}, {"\"hi${words}ho\"", "'hihi hoho'", ProcessArgs::SplitOk, OsTypeLinux},
{"\"hi${spacedwords}ho\"", "'hi hi ho sucker ho'", QtcProcess::SplitOk, OsTypeLinux}, {"\"hi${spacedwords}ho\"", "'hi hi ho sucker ho'", ProcessArgs::SplitOk, OsTypeLinux},
{"\"${", "", QtcProcess::BadQuoting, OsTypeLinux}, {"\"${", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"\"${var", "", QtcProcess::BadQuoting, OsTypeLinux}, {"\"${var", "", ProcessArgs::BadQuoting, OsTypeLinux},
{"\"${var ", "", QtcProcess::FoundMeta, OsTypeLinux}, {"\"${var ", "", ProcessArgs::FoundMeta, OsTypeLinux},
}; };
for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
@@ -352,15 +352,15 @@ void tst_QtcProcess::prepareArgsEnv()
{ {
QFETCH(QString, in); QFETCH(QString, in);
QFETCH(QString, out); QFETCH(QString, out);
QFETCH(QtcProcess::SplitError, err); QFETCH(ProcessArgs::SplitError, err);
QFETCH(OsType, os); QFETCH(OsType, os);
QtcProcess::SplitError outerr; ProcessArgs::SplitError outerr;
QtcProcess::Arguments args = QtcProcess::prepareArgs(in, &outerr, os, os == OsTypeLinux ? &envLinux : &envWindows); ProcessArgs args = ProcessArgs::prepareArgs(in, &outerr, os, os == OsTypeLinux ? &envLinux : &envWindows);
QString outstr = args.toString(); QString outstr = args.toString();
QCOMPARE(outerr, err); QCOMPARE(outerr, err);
if (err == QtcProcess::SplitOk) if (err == ProcessArgs::SplitOk)
QCOMPARE(outstr, out); QCOMPARE(outstr, out);
} }
@@ -605,9 +605,9 @@ void tst_QtcProcess::expandMacros()
QFETCH(OsType, os); QFETCH(OsType, os);
if (os == OsTypeWindows) if (os == OsTypeWindows)
QtcProcess::expandMacros(&in, &mxWin, os); ProcessArgs::expandMacros(&in, &mxWin, os);
else else
QtcProcess::expandMacros(&in, &mxUnix, os); ProcessArgs::expandMacros(&in, &mxUnix, os);
QCOMPARE(in, out); QCOMPARE(in, out);
} }
@@ -673,11 +673,11 @@ void tst_QtcProcess::iterations()
QFETCH(OsType, os); QFETCH(OsType, os);
QString outstr; QString outstr;
for (QtcProcess::ArgIterator ait(&in, os); ait.next(); ) { for (ProcessArgs::ArgIterator ait(&in, os); ait.next(); ) {
if (ait.isSimple()) if (ait.isSimple())
QtcProcess::addArg(&outstr, ait.value(), os); ProcessArgs::addArg(&outstr, ait.value(), os);
else else
QtcProcess::addArgs(&outstr, "{}"); ProcessArgs::addArgs(&outstr, "{}");
} }
QCOMPARE(outstr, out); QCOMPARE(outstr, out);
} }
@@ -686,7 +686,7 @@ void tst_QtcProcess::iteratorEditsHelper(OsType osType)
{ {
QString in1 = "one two three", in2 = in1, in3 = in1, in4 = in1, in5 = in1; QString in1 = "one two three", in2 = in1, in3 = in1, in4 = in1, in5 = in1;
QtcProcess::ArgIterator ait1(&in1, osType); ProcessArgs::ArgIterator ait1(&in1, osType);
QVERIFY(ait1.next()); QVERIFY(ait1.next());
ait1.deleteArg(); ait1.deleteArg();
QVERIFY(ait1.next()); QVERIFY(ait1.next());
@@ -696,7 +696,7 @@ void tst_QtcProcess::iteratorEditsHelper(OsType osType)
ait1.appendArg("four"); ait1.appendArg("four");
QCOMPARE(in1, QString::fromLatin1("two three four")); QCOMPARE(in1, QString::fromLatin1("two three four"));
QtcProcess::ArgIterator ait2(&in2, osType); ProcessArgs::ArgIterator ait2(&in2, osType);
QVERIFY(ait2.next()); QVERIFY(ait2.next());
QVERIFY(ait2.next()); QVERIFY(ait2.next());
ait2.deleteArg(); ait2.deleteArg();
@@ -705,7 +705,7 @@ void tst_QtcProcess::iteratorEditsHelper(OsType osType)
QVERIFY(!ait2.next()); QVERIFY(!ait2.next());
QCOMPARE(in2, QString::fromLatin1("one three four")); QCOMPARE(in2, QString::fromLatin1("one three four"));
QtcProcess::ArgIterator ait3(&in3, osType); ProcessArgs::ArgIterator ait3(&in3, osType);
QVERIFY(ait3.next()); QVERIFY(ait3.next());
ait3.appendArg("one-b"); ait3.appendArg("one-b");
QVERIFY(ait3.next()); QVERIFY(ait3.next());
@@ -714,7 +714,7 @@ void tst_QtcProcess::iteratorEditsHelper(OsType osType)
QVERIFY(!ait3.next()); QVERIFY(!ait3.next());
QCOMPARE(in3, QString::fromLatin1("one one-b two")); QCOMPARE(in3, QString::fromLatin1("one one-b two"));
QtcProcess::ArgIterator ait4(&in4, osType); ProcessArgs::ArgIterator ait4(&in4, osType);
ait4.appendArg("pre-one"); ait4.appendArg("pre-one");
QVERIFY(ait4.next()); QVERIFY(ait4.next());
QVERIFY(ait4.next()); QVERIFY(ait4.next());
@@ -723,7 +723,7 @@ void tst_QtcProcess::iteratorEditsHelper(OsType osType)
QVERIFY(!ait4.next()); QVERIFY(!ait4.next());
QCOMPARE(in4, QString::fromLatin1("pre-one one two")); QCOMPARE(in4, QString::fromLatin1("pre-one one two"));
QtcProcess::ArgIterator ait5(&in5, osType); ProcessArgs::ArgIterator ait5(&in5, osType);
QVERIFY(ait5.next()); QVERIFY(ait5.next());
QVERIFY(ait5.next()); QVERIFY(ait5.next());
QVERIFY(ait5.next()); QVERIFY(ait5.next());