compareByDependsOn function

int compareByDependsOn(
  1. Task t1,
  2. Task t2
)

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