From bb9bfa1cd4345cfc5bc0a22166b075e7a1ccccf8 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 Sep 2021 13:58:45 +0200 Subject: [PATCH] ProjectExplorer: Allow devices to report tasks in validate And use it to report a hard error when docker devices don't have a shared directory set. While this is possibly too harsh in the long run it fits the current situation where we want to use the container for building projects. Change-Id: I1430716b5722fba537bb964463ce25c7001be6a4 Reviewed-by: Christian Stenger --- src/plugins/docker/dockerdevice.cpp | 12 ++++++++++++ src/plugins/docker/dockerdevice.h | 1 + .../projectexplorer/devicesupport/idevice.cpp | 5 +++++ src/plugins/projectexplorer/devicesupport/idevice.h | 2 ++ src/plugins/projectexplorer/kitinformation.cpp | 3 +++ 5 files changed, 23 insertions(+) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index e3a97214d3b..40efac7f541 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -473,6 +473,18 @@ IDeviceWidget *DockerDevice::createWidget() return new DockerDeviceWidget(sharedFromThis()); } +Tasks DockerDevice::validate() const +{ + Tasks result; + if (d->m_data.mounts.isEmpty()) { + result << Task(Task::Error, + tr("The Docker device has not set up shared directories." + "This will not work for building."), + {}, -1, {}); + } + return result; +} + // DockerDevice diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index 64d5bb17ac3..ded9a93b063 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -62,6 +62,7 @@ public: static Ptr create(const DockerDeviceData &data) { return Ptr(new DockerDevice(data)); } ProjectExplorer::IDeviceWidget *createWidget() override; + QVector validate() const override; bool canCreateProcess() const override { return true; } ProjectExplorer::DeviceProcess *createProcess(QObject *parent) const override; diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 03f7e8b281c..5fae1d38631 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -532,6 +532,11 @@ bool IDevice::isCompatibleWith(const Kit *k) const return DeviceTypeKitAspect::deviceTypeId(k) == type(); } +QVector IDevice::validate() const +{ + return {}; +} + void IDevice::addDeviceAction(const DeviceAction &deviceAction) { d->deviceActions.append(deviceAction); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index e9d488667f0..873eb380bb3 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -65,6 +65,7 @@ class DeviceProcess; class DeviceProcessList; class Kit; class Runnable; +class Task; namespace Internal { class IDevicePrivate; } @@ -159,6 +160,7 @@ public: Utils::Id id() const; virtual bool isCompatibleWith(const Kit *k) const; + virtual QVector validate() const; QString displayType() const; Utils::OsType osType() const; diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index eb02496a326..91a90a65981 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -1005,6 +1005,9 @@ Tasks DeviceKitAspect::validate(const Kit *k) const else if (!dev->isCompatibleWith(k)) result.append(BuildSystemTask(Task::Error, tr("Device is incompatible with this kit."))); + if (dev) + result.append(dev->validate()); + return result; }