summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@theqtcompany.com>2015-03-10 17:01:26 +0100
committerJarek Kobus <jaroslaw.kobus@theqtcompany.com>2015-03-11 09:53:38 +0000
commit8c2941ae5892826520cccc946d13c17c8cc347f0 (patch)
treed93f36c190c653a77981e0da2ba4f98c211a67da
parentdd2c70b10ddf0424ee96a30efcf0df93e88ef491 (diff)
Issue a warning when a component depends on auto dependent one.
Task-number: QTIFW-510 Change-Id: I57eff879deebf8f31a472a6c66a7e275e34447bd Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com> Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
-rw-r--r--src/libs/installer/componentchecker.cpp8
-rw-r--r--tests/auto/installer/solver/tst_solver.cpp25
2 files changed, 30 insertions, 3 deletions
diff --git a/src/libs/installer/componentchecker.cpp b/src/libs/installer/componentchecker.cpp
index 381fcf9c1..6b2487668 100644
--- a/src/libs/installer/componentchecker.cpp
+++ b/src/libs/installer/componentchecker.cpp
@@ -42,6 +42,7 @@ namespace QInstaller {
QStringList ComponentChecker::checkComponent(Component *component)
{
+ PackageManagerCore *core = component->packageManagerCore();
QStringList checkResult;
const bool defaultPropertyScriptValue = component->variables().value(scDefault).compare(scScript, Qt::CaseInsensitive) == 0;
@@ -62,6 +63,11 @@ QStringList ComponentChecker::checkComponent(Component *component)
"with \"AutoDependOn\" list. This combination of states may not work properly.")
.arg(component->name());
}
+ if (!core->dependees(component).isEmpty()) {
+ checkResult << QString::fromLatin1("Other components depend on auto dependent "
+ "component %1. This may not work properly.")
+ .arg(component->name());
+ }
}
if (component->packageManagerCore()->isInstaller()) {
if (component->isTristate()) {
@@ -105,7 +111,6 @@ QStringList ComponentChecker::checkComponent(Component *component)
.arg(component->name());
}
- PackageManagerCore *core = component->packageManagerCore();
if (!core->dependees(component).isEmpty()) {
checkResult << QString::fromLatin1("Other components depend on component %1 "
"which has children components. This will not work properly.")
@@ -113,6 +118,7 @@ QStringList ComponentChecker::checkComponent(Component *component)
}
}
}
+
return checkResult;
}
diff --git a/tests/auto/installer/solver/tst_solver.cpp b/tests/auto/installer/solver/tst_solver.cpp
index b661d3158..460ed4323 100644
--- a/tests/auto/installer/solver/tst_solver.cpp
+++ b/tests/auto/installer/solver/tst_solver.cpp
@@ -269,15 +269,36 @@ private slots:
componentB->setValue(QLatin1String("AutoDependOn"), QLatin1String("A"));
componentB->setValue(QLatin1String("Default"), QLatin1String("true"));
+ core->appendRootComponent(componentA);
+ core->appendRootComponent(componentB);
ComponentToStringList result;
result[componentB].append(QLatin1String("Component B specifies \"Default\" property "
- "together with \"AutoDependOn\" list. This combination of states "
- "may not work properly."));
+ "together with \"AutoDependOn\" list. This combination of states "
+ "may not work properly."));
QTest::newRow("AutoDepend and default")
<< (QList<Component *>() << componentA << componentB)
<< result;
+
+ NamedComponent *componentC = new NamedComponent(core, QLatin1String("C"));
+ NamedComponent *componentD = new NamedComponent(core, QLatin1String("D"));
+ NamedComponent *componentE = new NamedComponent(core, QLatin1String("E"));
+
+ componentD->setValue(QLatin1String("AutoDependOn"), QLatin1String("C"));
+ componentE->addDependency(QLatin1String("D"));
+ core->appendRootComponent(componentC);
+ core->appendRootComponent(componentD);
+ core->appendRootComponent(componentE);
+
+ result.clear();
+ result[componentD].append(QLatin1String("Other components depend on auto dependent "
+ "component D. This may not work properly."));
+
+ QTest::newRow("AutoDepend and dependency")
+ << (QList<Component *>() << componentC << componentD << componentE)
+ << result;
+
}
void checkComponent()