blob: e9d76acc7d9b147d626d0a5639a3a107bccf39ca [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Support for automated upgrades.
///
/// For now this is not a finalized interface. Don't rely on this.
library dependency_services;
import 'dart:async';
import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:pub/src/command.dart';
import 'package:pub/src/command/dependency_services.dart';
import 'package:pub/src/exit_codes.dart' as exit_codes;
import 'package:pub/src/io.dart';
import 'package:pub/src/log.dart' as log;
class _DependencyServicesCommandRunner extends CommandRunner<int>
implements PubTopLevel {
@override
String get directory => argResults['directory'];
@override
bool get captureStackChains => argResults['verbose'];
@override
bool get trace => argResults['verbose'];
ArgResults? _argResults;
/// The top-level options parsed by the command runner.
@override
ArgResults get argResults {
final a = _argResults;
if (a == null) {
throw StateError(
'argResults cannot be used before Command.run is called.',
);
}
return a;
}
_DependencyServicesCommandRunner()
: super(
'dependency_services',
'Support for automatic upgrades',
usageLineLength: lineLength,
) {
argParser.addFlag(
'verbose',
abbr: 'v',
negatable: false,
help: 'Shortcut for "--verbosity=all".',
);
PubTopLevel.addColorFlag(argParser);
argParser.addOption(
'directory',
abbr: 'C',
help: 'Run the subcommand in the directory<dir>.',
defaultsTo: '.',
valueHelp: 'dir',
);
addCommand(DependencyServicesListCommand());
addCommand(DependencyServicesReportCommand());
addCommand(DependencyServicesApplyCommand());
}
@override
Future<int> run(Iterable<String> args) async {
try {
_argResults = parse(args);
return await runCommand(argResults) ?? exit_codes.SUCCESS;
} on UsageException catch (error) {
log.exception(error);
return exit_codes.USAGE;
}
}
@override
void printUsage() {
log.message(usage);
}
@override
log.Verbosity get verbosity => log.Verbosity.normal;
}
Future<void> main(List<String> arguments) async {
await flushThenExit(await _DependencyServicesCommandRunner().run(arguments));
}