| <chapter id='dependency-resolution-task-scheduling'> |
| <title>Task Scheduling</title> |
| <sect1 id='dependency-resolution-task-scheduling-dependencies'> |
| <title>Task Dependencies</title> |
| <para> |
| All tasks are executed in an order such |
| that a task's dependencies are satisfied |
| when it is executed. Dependency relationships between tasks |
| form a directed graph. |
| </para> |
| </sect1> |
| <sect1 id='dependency-resolution-task-scheduling-conflict-avoidance'> |
| <title>Conflict Avoidance</title> |
| <para> |
| Sometimes a package installation order exists such that it is |
| possible to avoid having two conflicting packages installed |
| simultaneously. If a currently installed package conflicts with a |
| new package that is planned to be installed, it may be possible to |
| solve the conflict by replacing the installed package with a |
| different package that occupies the same slot. |
| </para> |
| <para> |
| In order to avoid a conflict, a package may need to be uninstalled |
| in advance, rather than through replacement. The following constraints |
| protect inappropriate packages from being chosen for automatic |
| uninstallation: |
| <itemizedlist> |
| <listitem> |
| Installed packages that have been pulled into the current dependency |
| graph will not be uninstalled. Due to |
| <link linkend='dependency-resolution-package-modeling-dependency-neglection'> |
| dependency neglection</link> and special properties of packages |
| in the "system" set, other checks may be necessary in order |
| to protect inappropriate packages from being uninstalled. |
| </listitem> |
| <listitem> |
| An installed package that is matched by a dependency atom from the |
| "system" set will not be uninstalled in advance since it might not |
| be safe. Such a package will only be uninstalled through replacement. |
| </listitem> |
| <listitem> |
| An installed package that is matched by a dependency atom from the |
| "world" set will not be uninstalled if the dependency graph does not |
| contain a replacement package that is matched by the same dependency |
| atom. |
| </listitem> |
| </itemizedlist> |
| </para> |
| </sect1> |
| <sect1 id='dependency-resolution-task-scheduling-circular-dependencies'> |
| <title>Circular Dependencies</title> |
| <para> |
| TODO: Automatically solve circular dependencies by temporarily disabling |
| conditional dependencies and then rebuilding packages with the conditional |
| dependencies enabled. |
| </para> |
| </sect1> |
| <sect1 id='dependency-resolution-task-scheduling-parallel'> |
| <title>Parallel Scheduling</title> |
| <para> |
| TODO: Spawn an appropriate number of tasks in parallel when desired. |
| </para> |
| </sect1> |
| </chapter> |