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 <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-09-29 13:58:45 +02:00
parent 4bbab39467
commit bb9bfa1cd4
5 changed files with 23 additions and 0 deletions

View File

@@ -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

View File

@@ -62,6 +62,7 @@ public:
static Ptr create(const DockerDeviceData &data) { return Ptr(new DockerDevice(data)); }
ProjectExplorer::IDeviceWidget *createWidget() override;
QVector<ProjectExplorer::Task> validate() const override;
bool canCreateProcess() const override { return true; }
ProjectExplorer::DeviceProcess *createProcess(QObject *parent) const override;

View File

@@ -532,6 +532,11 @@ bool IDevice::isCompatibleWith(const Kit *k) const
return DeviceTypeKitAspect::deviceTypeId(k) == type();
}
QVector<Task> IDevice::validate() const
{
return {};
}
void IDevice::addDeviceAction(const DeviceAction &deviceAction)
{
d->deviceActions.append(deviceAction);

View File

@@ -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<Task> validate() const;
QString displayType() const;
Utils::OsType osType() const;

View File

@@ -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;
}