planRun function

RunPlan planRun({
  1. required Workspace workspace,
  2. List<String>? runInPackages,
  3. List<String> filters = const [],
  4. bool allPackagesByDefault = false,
  5. int? concurrency,
  6. bool failFast = false,
  7. bool dependencyOrder = false,
})

Chooses the packages a command runs in.

  • With neither runInPackages nor filters, it runs in the current package.
  • runInPackages selects workspace packages by name or by a glob over their paths relative to the workspace root (. is the root).
  • filters narrow that selection. Without runInPackages, they select from every package in the workspace.
  • allPackagesByDefault makes an empty selection mean every workspace package, as dpk exec does.

Throws a RunPlanException when a selection matches nothing.

Implementation

RunPlan planRun({
  required Workspace workspace,
  List<String>? runInPackages,
  List<String> filters = const [],
  bool allPackagesByDefault = false,
  int? concurrency,
  bool failFast = false,
  bool dependencyOrder = false,
}) {
  var selected = <WorkspacePackage>[workspace.current];

  if (runInPackages != null) {
    if (!workspace.isWorkspace) {
      throw RunPlanException(
        'run_in_packages needs a workspace, but '
        '${workspace.root.relativePathOrName} has no workspace packages.',
      );
    }
    selected = _select(workspace.allPackages, runInPackages);
    if (selected.isEmpty) {
      throw RunPlanException(
        'run_in_packages (${runInPackages.join(', ')}) matches no workspace '
        'packages. ${_available(workspace)}',
      );
    }
  } else if (filters.isNotEmpty || allPackagesByDefault) {
    selected = workspace.isWorkspace ? workspace.packages : [workspace.root];
  }

  if (filters.isNotEmpty) {
    final candidates = runInPackages == null ? workspace.allPackages : selected;
    selected = _select(candidates, filters);
    if (selected.isEmpty) {
      throw RunPlanException(
        '--filter ${filters.join(', ')} matches no '
        '${runInPackages == null ? 'workspace' : 'selected'} packages. '
        '${_available(workspace)}',
      );
    }
  }

  return planPackages(
    selected,
    concurrency: concurrency,
    failFast: failFast,
    dependencyOrder: dependencyOrder,
  );
}