compareByDependsOn function
Comparator function to sort Tasks based on their dependencies.
Example
Given:
- Task A depends on Task B
- Task B depends on Task C
- Task D depends on nothing
Result: Sorted set in order: Task D, Task C, Task B, Task A.
Implementation
int compareByDependsOn(Task t1, Task t2) {
/// True if Task t1 depends on Task t2.
final t1DependsOnT2 = t1.dependsOn().map((e) {
return e.taskName == t2.taskName && e.scriptName == t2.scriptName;
}).contains(true);
/// True if Task t2 depends on Task t1.
final t2DependsOnT1 = t2.dependsOn().map((e) {
return e.taskName == t1.taskName && e.scriptName == t1.scriptName;
}).contains(true);
/// If Task t1 depends on Task t2, Task t2 has higher priority.
if (t1DependsOnT2) {
return 1;
}
/// If Task t2 depends on Task t1, Task t1 has higher priority.
if (t2DependsOnT1) {
return -1;
}
/// If Task t1 has no dependencies then it has higher priority.
if (t1.dependsOn().isEmpty) {
return -1;
}
/// If Task t2 has no dependencies then it has higher priority
if (t2.dependsOn().isEmpty) {
return 1;
}
/// Keep the current order intact.
return -1;
}