Docker: Show create command line to user

Change-Id: I740d2647e2033c841fe6926b273b06ce45ecb0e7
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-09-19 13:21:35 +02:00
parent 493d1873d2
commit d3f060a754
3 changed files with 51 additions and 24 deletions

View File

@@ -278,6 +278,8 @@ public:
~DockerDevicePrivate() { stopCurrentContainer(); } ~DockerDevicePrivate() { stopCurrentContainer(); }
CommandLine createCommandLine();
RunResult runInShell(const CommandLine &cmd, const QByteArray &stdInData = {}); RunResult runInShell(const CommandLine &cmd, const QByteArray &stdInData = {});
bool updateContainerAccess(); bool updateContainerAccess();
@@ -501,6 +503,11 @@ void DockerProcessImpl::sendControlSignal(ControlSignal controlSignal)
} }
} }
CommandLine DockerDevice::createCommandLine() const
{
return d->createCommandLine();
}
IDeviceWidget *DockerDevice::createWidget() IDeviceWidget *DockerDevice::createWidget()
{ {
return new DockerDeviceWidget(sharedFromThis()); return new DockerDeviceWidget(sharedFromThis());
@@ -783,11 +790,8 @@ bool DockerDevicePrivate::isImageAvailable() const
return false; return false;
} }
expected_str<QString> 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") const QString display = HostOsInfo::isLinuxHost() ? QString(":0")
: QString("host.docker.internal:0"); : QString("host.docker.internal:0");
CommandLine dockerCreate{settings().dockerBinaryPath(), CommandLine dockerCreate{settings().dockerBinaryPath(),
@@ -822,9 +826,19 @@ expected_str<QString> DockerDevicePrivate::createContainer()
dockerCreate.addArg(deviceSettings->repoAndTag()); dockerCreate.addArg(deviceSettings->repoAndTag());
qCDebug(dockerDeviceLog).noquote() << "RUNNING: " << dockerCreate.toUserOutput(); return dockerCreate;
}
expected_str<QString> 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; Process createProcess;
createProcess.setCommand(dockerCreate); createProcess.setCommand(cmdLine);
createProcess.runBlocking(); createProcess.runBlocking();
if (createProcess.result() != ProcessResult::FinishedWithSuccess) { if (createProcess.result() != ProcessResult::FinishedWithSuccess) {

View File

@@ -54,6 +54,8 @@ public:
return Ptr(new DockerDevice(std::move(settings))); return Ptr(new DockerDevice(std::move(settings)));
} }
Utils::CommandLine createCommandLine() const;
ProjectExplorer::IDeviceWidget *createWidget() override; ProjectExplorer::IDeviceWidget *createWidget() override;
QList<ProjectExplorer::Task> validate() const override; QList<ProjectExplorer::Task> validate() const override;

View File

@@ -9,6 +9,7 @@
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/clangutils.h> #include <utils/clangutils.h>
#include <utils/commandline.h>
#include <utils/environment.h> #include <utils/environment.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
@@ -137,6 +138,9 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device)
m_kitItemDetector.listAutoDetected(device->id().toString()); m_kitItemDetector.listAutoDetected(device->id().toString());
}); });
auto createLineLabel = new QLabel(dockerDevice->createCommandLine().toUserOutput());
createLineLabel->setWordWrap(true);
using namespace Layouting; using namespace Layouting;
// clang-format off // clang-format off
@@ -156,25 +160,28 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device)
Tr::tr("Detection log:"), Tr::tr("Detection log:"),
logView logView
}; };
Column {
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, 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); }.attachTo(this);
// clang-format on // clang-format on
@@ -185,6 +192,10 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device)
searchDirsLineEdit->setFocus(); searchDirsLineEdit->setFocus();
}; };
QObject::connect(searchDirsComboBox, &QComboBox::activated, this, updateDirectoriesLineEdit); QObject::connect(searchDirsComboBox, &QComboBox::activated, this, updateDirectoriesLineEdit);
connect(deviceSettings, &AspectContainer::applied, this, [createLineLabel, dockerDevice] {
createLineLabel->setText(dockerDevice->createCommandLine().toUserOutput());
});
} }
void DockerDeviceWidget::updateDaemonStateTexts() void DockerDeviceWidget::updateDaemonStateTexts()