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(); }
|
~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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user