diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index af00987c7d5..8083c5350c7 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -278,6 +278,8 @@ public: ~DockerDevicePrivate() { stopCurrentContainer(); } + CommandLine createCommandLine(); + RunResult runInShell(const CommandLine &cmd, const QByteArray &stdInData = {}); bool updateContainerAccess(); @@ -501,6 +503,11 @@ void DockerProcessImpl::sendControlSignal(ControlSignal controlSignal) } } +CommandLine DockerDevice::createCommandLine() const +{ + return d->createCommandLine(); +} + IDeviceWidget *DockerDevice::createWidget() { return new DockerDeviceWidget(sharedFromThis()); @@ -783,11 +790,8 @@ bool DockerDevicePrivate::isImageAvailable() const return false; } -expected_str DockerDevicePrivate::createContainer() +CommandLine DockerDevicePrivate::createCommandLine() { - if (!isImageAvailable()) - return make_unexpected(Tr::tr("Image \"%1\" is not available.").arg(repoAndTag())); - const QString display = HostOsInfo::isLinuxHost() ? QString(":0") : QString("host.docker.internal:0"); CommandLine dockerCreate{settings().dockerBinaryPath(), @@ -822,9 +826,19 @@ expected_str DockerDevicePrivate::createContainer() dockerCreate.addArg(deviceSettings->repoAndTag()); - qCDebug(dockerDeviceLog).noquote() << "RUNNING: " << dockerCreate.toUserOutput(); + return dockerCreate; +} + +expected_str DockerDevicePrivate::createContainer() +{ + if (!isImageAvailable()) + return make_unexpected(Tr::tr("Image \"%1\" is not available.").arg(repoAndTag())); + + const CommandLine cmdLine = createCommandLine(); + + qCDebug(dockerDeviceLog).noquote() << "RUNNING: " << cmdLine.toUserOutput(); Process createProcess; - createProcess.setCommand(dockerCreate); + createProcess.setCommand(cmdLine); createProcess.runBlocking(); if (createProcess.result() != ProcessResult::FinishedWithSuccess) { diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index 4996a5e95b2..7c170182160 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -54,6 +54,8 @@ public: return Ptr(new DockerDevice(std::move(settings))); } + Utils::CommandLine createCommandLine() const; + ProjectExplorer::IDeviceWidget *createWidget() override; QList validate() const override; diff --git a/src/plugins/docker/dockerdevicewidget.cpp b/src/plugins/docker/dockerdevicewidget.cpp index e4b7ecdcb3f..fbb80bf640e 100644 --- a/src/plugins/docker/dockerdevicewidget.cpp +++ b/src/plugins/docker/dockerdevicewidget.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -137,6 +138,9 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) m_kitItemDetector.listAutoDetected(device->id().toString()); }); + auto createLineLabel = new QLabel(dockerDevice->createCommandLine().toUserOutput()); + createLineLabel->setWordWrap(true); + using namespace Layouting; // clang-format off @@ -156,25 +160,28 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) Tr::tr("Detection log:"), logView }; - - Form { - deviceSettings->repo, br, - deviceSettings->tag, br, - deviceSettings->imageId, br, - daemonStateLabel, m_daemonReset, m_daemonState, br, - Tr::tr("Container State:"), deviceSettings->containerStatus, br, - deviceSettings->useLocalUidGid, br, - deviceSettings->keepEntryPoint, br, - deviceSettings->enableLldbFlags, br, - deviceSettings->clangdExecutable, br, - deviceSettings->network, br, - deviceSettings->extraArgs, br, - Column { - pathListLabel, - deviceSettings->mounts, - }, br, - If { dockerDevice->isAutoDetected(), {}, {detectionControls} }, + Column { noMargin, + Form { + deviceSettings->repo, br, + deviceSettings->tag, br, + deviceSettings->imageId, br, + daemonStateLabel, m_daemonReset, m_daemonState, br, + Tr::tr("Container State:"), deviceSettings->containerStatus, br, + deviceSettings->useLocalUidGid, br, + deviceSettings->keepEntryPoint, br, + deviceSettings->enableLldbFlags, br, + deviceSettings->clangdExecutable, br, + deviceSettings->network, br, + deviceSettings->extraArgs, br, + Column { + pathListLabel, + deviceSettings->mounts, + }, br, + If { dockerDevice->isAutoDetected(), {}, {detectionControls} }, + noMargin, + },br, + Tr::tr("Command Line:"), createLineLabel, br, }.attachTo(this); // clang-format on @@ -185,6 +192,10 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) searchDirsLineEdit->setFocus(); }; QObject::connect(searchDirsComboBox, &QComboBox::activated, this, updateDirectoriesLineEdit); + + connect(deviceSettings, &AspectContainer::applied, this, [createLineLabel, dockerDevice] { + createLineLabel->setText(dockerDevice->createCommandLine().toUserOutput()); + }); } void DockerDeviceWidget::updateDaemonStateTexts()