forked from qt-creator/qt-creator
Docker: Show create command line to user
Change-Id: I740d2647e2033c841fe6926b273b06ce45ecb0e7 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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<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")
|
||||
: QString("host.docker.internal:0");
|
||||
CommandLine dockerCreate{settings().dockerBinaryPath(),
|
||||
@@ -822,9 +826,19 @@ expected_str<QString> DockerDevicePrivate::createContainer()
|
||||
|
||||
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;
|
||||
createProcess.setCommand(dockerCreate);
|
||||
createProcess.setCommand(cmdLine);
|
||||
createProcess.runBlocking();
|
||||
|
||||
if (createProcess.result() != ProcessResult::FinishedWithSuccess) {
|
||||
|
||||
@@ -54,6 +54,8 @@ public:
|
||||
return Ptr(new DockerDevice(std::move(settings)));
|
||||
}
|
||||
|
||||
Utils::CommandLine createCommandLine() const;
|
||||
|
||||
ProjectExplorer::IDeviceWidget *createWidget() override;
|
||||
QList<ProjectExplorer::Task> validate() const override;
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/clangutils.h>
|
||||
#include <utils/commandline.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/layoutbuilder.h>
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user