From 2fc0ce4843299ea1587b167184c397ad0a99446d Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 9 Sep 2021 23:03:39 +0200 Subject: [PATCH] Utils: Introduce QtcProcess::toStandaloneCommandLine() The goal is to make a QtcProcess incl. environment, working directory, executable and arguments testable, e.g. in a terminal. The new toStandaloneCommandLine() returns a string containing the command line for a call of "env" the data of the QtcProcess instance as parameters. To be used like: qDebug().noquote() << qtcProc.toStandaloneCommandLine(); ..and the debug output can be pasted into a terminal. Change-Id: Ib6cbea290e1eff3279d6e0a67076a624312af879 Reviewed-by: hjk --- src/libs/utils/qtcprocess.cpp | 19 +++++++++++++++++++ src/libs/utils/qtcprocess.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index bd44b2d8235..f4b715eece6 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -832,6 +832,25 @@ void QtcProcess::setStandardInputFile(const QString &inputFile) d->m_process->setStandardInputFile(inputFile); } +QString QtcProcess::toStandaloneCommandLine() const +{ + QStringList parts; + parts.append("/usr/bin/env"); + if (!d->m_workingDirectory.isEmpty()) { + parts.append("-C"); + d->m_workingDirectory.path(); + } + parts.append("-i"); + if (d->m_environment.size() > 0) { + const QStringList envVars = d->m_environment.toStringList(); + std::transform(envVars.cbegin(), envVars.cend(), + std::back_inserter(parts), ProcessArgs::quoteArgUnix); + } + parts.append(d->m_commandLine.executable().path()); + parts.append(d->m_commandLine.splitArguments()); + return parts.join(" "); +} + void QtcProcess::setRemoteProcessHooks(const DeviceProcessHooks &hooks) { s_deviceHooks = hooks; diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 2fc610d8f85..8e12c0cc977 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -193,6 +193,8 @@ public: void setStandardInputFile(const QString &inputFile); + QString toStandaloneCommandLine() const; + signals: void started(); void finished();