private static async Task RunAsync(this TargetCollection targets, List <string> names, Options options, Logger log, Func <Exception, bool> messageOnly, List <string> args) { if (options.UnknownOptions.Count > 0) { throw new InvalidUsageException($"Unknown option{(options.UnknownOptions.Count > 1 ? "s" : "")} {options.UnknownOptions.Spaced()}. \"--help\" for usage."); } await log.Verbose($"Args: {string.Join(" ", args)}").ConfigureAwait(false); if (options.ShowHelp) { await log.Usage().ConfigureAwait(false); return; } if (options.ListTree || options.ListDependencies || options.ListInputs || options.ListTargets) { var rootTargets = names.Any() ? names : targets.Select(target => target.Name).OrderBy(name => name).ToList(); var maxDepth = options.ListTree ? int.MaxValue : options.ListDependencies ? 1 : 0; var maxDepthToShowInputs = options.ListTree ? int.MaxValue : 0; await log.Targets(targets, rootTargets, maxDepth, maxDepthToShowInputs, options.ListInputs).ConfigureAwait(false); return; } if (names.Count == 0) { names.Add("default"); } await targets.RunAsync(names, options.SkipDependencies, options.DryRun, options.Parallel, log, messageOnly).ConfigureAwait(false); }