PlanImpl

mill.exec.PlanImpl
object PlanImpl

Attributes

Source
PlanImpl.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
PlanImpl.type

Members list

Value members

Concrete methods

def groupAroundImportantTasks[T](topoSortedTasks: TopoSorted)(important: PartialFunction[Task[_], T]): MultiBiMap[T, Task[_]]

The values Agg is guaranteed to be topological sorted and cycle free. That's why the constructor is package private.

The values Agg is guaranteed to be topological sorted and cycle free. That's why the constructor is package private.

Attributes

See also
Source
PlanImpl.scala
def groupAroundImportantTasks[T](topoSortedTasks: TopoSorted, cutPoint: Task[_] => Boolean)(important: PartialFunction[Task[_], T]): MultiBiMap[T, Task[_]]

Attributes

Source
PlanImpl.scala
def groupAroundImportantTasks[T](topoSortedTasks: TopoSorted, cutPoint: Task[_] => Boolean, effectiveInputs: Task[_] => Seq[Task[_]])(important: PartialFunction[Task[_], T]): MultiBiMap[T, Task[_]]

cutPoint decides where group traversal stops; important decides which tasks become group terminals in the outer iteration. They differ when an anonymous task can be a goal (group terminal) without acting as a cut point for other groups walking through it.

cutPoint decides where group traversal stops; important decides which tasks become group terminals in the outer iteration. They differ when an anonymous task can be a goal (group terminal) without acting as a cut point for other groups walking through it.

Consequence for anonymous goals: an anon y reachable from a named group's terminal walks into both groups, so its body is evaluated once per containing group. This matches Mill's existing anon-shared-across- groups model (see multiTerminalGroup) and assumes anonymous tasks are pure. If side effects are placed in a Task.Anon and that task is also passed as a goal, it will run twice per launcher.

Attributes

Source
PlanImpl.scala
def plan(goals: Seq[Task[_]]): Plan

Attributes

Source
PlanImpl.scala
def plan(goals: Seq[Task[_]], effectiveInputs: Task[_] => Seq[Task[_]]): Plan

effectiveInputs lets the caller override which inputs are walked when building the plan. This is used to skip dependencies of tasks whose value is supplied entirely by a non-!append YAML config override, since the task body is never run and pulling its dependencies into the build graph would execute unrelated code (see issue #7083).

effectiveInputs lets the caller override which inputs are walked when building the plan. This is used to skip dependencies of tasks whose value is supplied entirely by a non-!append YAML config override, since the task body is never run and pulling its dependencies into the build graph would execute unrelated code (see issue #7083).

Attributes

Source
PlanImpl.scala
def topoSorted(transitiveTasks: IndexedSeq[Task[_]]): TopoSorted

Takes the given tasks, finds all the targets they transitively depend on, and sort them topologically. Fails if there are dependency cycles

Takes the given tasks, finds all the targets they transitively depend on, and sort them topologically. Fails if there are dependency cycles

Attributes

Source
PlanImpl.scala
def topoSorted(transitiveTasks: IndexedSeq[Task[_]], effectiveInputs: Task[_] => Seq[Task[_]]): TopoSorted

Attributes

Source
PlanImpl.scala
def transitiveNamed(sourceTasks: Seq[Task[_]]): Seq[Named[_]]

Attributes

Source
PlanImpl.scala
def transitiveNodes[T](sourceNodes: Seq[T])(inputsFor: T => Seq[T]): IndexedSeq[T]

Collects all transitive dependencies (nodes) of the given nodes, including the given nodes.

Collects all transitive dependencies (nodes) of the given nodes, including the given nodes.

Attributes

Source
PlanImpl.scala
def transitiveTasks(sourceTasks: Seq[Task[_]]): IndexedSeq[Task[_]]

Collects all transitive dependencies (tasks) of the given tasks, including the given tasks.

Collects all transitive dependencies (tasks) of the given tasks, including the given tasks.

Attributes

Source
PlanImpl.scala
def transitiveTasks(sourceTasks: Seq[Task[_]], effectiveInputs: Task[_] => Seq[Task[_]]): IndexedSeq[Task[_]]

Attributes

Source
PlanImpl.scala

Concrete fields

val defaultInputs: Task[_] => Seq[Task[_]]

Default effectiveInputs function that just returns the task's declared inputs.

Default effectiveInputs function that just returns the task's declared inputs.

Attributes

Source
PlanImpl.scala