LCOV - code coverage report
Current view: top level - src/commands - packages.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 27 27 100.0 %
Date: 2023-09-28 16:36:22 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:args/args.dart';
       2             : import 'package:args/command_runner.dart';
       3             : import 'package:mason/mason.dart';
       4             : import 'package:meta/meta.dart';
       5             : import 'package:path/path.dart' as path;
       6             : import 'package:universal_io/io.dart';
       7             : import 'package:very_good_cli/src/cli/cli.dart';
       8             : 
       9             : /// {@template packages_command}
      10             : /// `very_good packages` command for managing packages.
      11             : /// {@endtemplate}
      12             : class PackagesCommand extends Command<int> {
      13             :   /// {@macro packages_command}
      14           1 :   PackagesCommand({Logger? logger}) {
      15           2 :     addSubcommand(PackagesGetCommand(logger: logger));
      16             :   }
      17             : 
      18           1 :   @override
      19             :   String get description => 'Command for managing packages.';
      20             : 
      21           1 :   @override
      22             :   String get name => 'packages';
      23             : }
      24             : 
      25             : /// {@template packages_get_command}
      26             : /// `very_good packages get` command for installing packages.
      27             : /// {@endtemplate}
      28             : class PackagesGetCommand extends Command<int> {
      29             :   /// {@macro packages_get_command}
      30           1 :   PackagesGetCommand({Logger? logger}) : _logger = logger ?? Logger() {
      31           1 :     argParser
      32           1 :       ..addFlag(
      33             :         'recursive',
      34             :         abbr: 'r',
      35             :         help: 'Install dependencies recursively for all nested packages.',
      36             :         negatable: false,
      37             :       )
      38           1 :       ..addMultiOption(
      39             :         'ignore',
      40             :         help: 'Exclude packages from installing dependencies.',
      41             :       );
      42             :   }
      43             : 
      44             :   final Logger _logger;
      45             : 
      46           1 :   @override
      47             :   String get description => 'Get packages in a Dart or Flutter project.';
      48             : 
      49           1 :   @override
      50             :   String get name => 'get';
      51             : 
      52             :   /// [ArgResults] which can be overridden for testing.
      53             :   @visibleForTesting
      54             :   ArgResults? argResultOverrides;
      55             : 
      56           3 :   ArgResults get _argResults => argResultOverrides ?? argResults!;
      57             : 
      58           1 :   @override
      59             :   Future<int> run() async {
      60           4 :     if (_argResults.rest.length > 1) {
      61           1 :       usageException('Too many arguments');
      62             :     }
      63             : 
      64           2 :     final recursive = _argResults['recursive'] as bool;
      65           3 :     final ignore = (_argResults['ignore'] as List<String>).toSet();
      66           7 :     final target = _argResults.rest.length == 1 ? _argResults.rest[0] : '.';
      67           4 :     final targetPath = path.normalize(Directory(target).absolute.path);
      68           2 :     final isFlutterInstalled = await Flutter.installed(logger: _logger);
      69             :     if (isFlutterInstalled) {
      70             :       try {
      71           1 :         await Flutter.packagesGet(
      72             :           cwd: targetPath,
      73             :           recursive: recursive,
      74             :           ignore: ignore,
      75           1 :           logger: _logger,
      76             :         );
      77           1 :       } on PubspecNotFound catch (_) {
      78           3 :         _logger.err('Could not find a pubspec.yaml in $targetPath');
      79           1 :         return ExitCode.noInput.code;
      80             :       } catch (error) {
      81           3 :         _logger.err('$error');
      82           1 :         return ExitCode.unavailable.code;
      83             :       }
      84             :     }
      85           1 :     return ExitCode.success.code;
      86             :   }
      87             : }

Generated by: LCOV version 1.15