LCOV - code coverage report
Current view: top level - src/commands/packages/commands - get.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 23 23 100.0 %
Date: 2023-11-15 10:29:52 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_get_command}
      10             : /// `very_good packages get` command for installing packages.
      11             : /// {@endtemplate}
      12             : class PackagesGetCommand extends Command<int> {
      13             :   /// {@macro packages_get_command}
      14          15 :   PackagesGetCommand({Logger? logger}) : _logger = logger ?? Logger() {
      15          15 :     argParser
      16          15 :       ..addFlag(
      17             :         'recursive',
      18             :         abbr: 'r',
      19             :         help: 'Install dependencies recursively for all nested packages.',
      20             :         negatable: false,
      21             :       )
      22          15 :       ..addMultiOption(
      23             :         'ignore',
      24             :         help: 'Exclude packages from installing dependencies.',
      25             :       );
      26             :   }
      27             : 
      28             :   final Logger _logger;
      29             : 
      30           2 :   @override
      31             :   String get description => 'Get packages in a Dart or Flutter project.';
      32             : 
      33          15 :   @override
      34             :   String get name => 'get';
      35             : 
      36             :   /// [ArgResults] which can be overridden for testing.
      37             :   @visibleForTesting
      38             :   ArgResults? argResultOverrides;
      39             : 
      40           3 :   ArgResults get _argResults => argResultOverrides ?? argResults!;
      41             : 
      42           1 :   @override
      43             :   Future<int> run() async {
      44           4 :     if (_argResults.rest.length > 1) {
      45           1 :       usageException('Too many arguments');
      46             :     }
      47             : 
      48           2 :     final recursive = _argResults['recursive'] as bool;
      49           3 :     final ignore = (_argResults['ignore'] as List<String>).toSet();
      50           7 :     final target = _argResults.rest.length == 1 ? _argResults.rest[0] : '.';
      51           4 :     final targetPath = path.normalize(Directory(target).absolute.path);
      52           2 :     final isFlutterInstalled = await Flutter.installed(logger: _logger);
      53             :     if (isFlutterInstalled) {
      54             :       try {
      55           1 :         await Flutter.packagesGet(
      56             :           cwd: targetPath,
      57             :           recursive: recursive,
      58             :           ignore: ignore,
      59           1 :           logger: _logger,
      60             :         );
      61           1 :       } on PubspecNotFound catch (_) {
      62           3 :         _logger.err('Could not find a pubspec.yaml in $targetPath');
      63           1 :         return ExitCode.noInput.code;
      64             :       } catch (error) {
      65           3 :         _logger.err('$error');
      66           1 :         return ExitCode.unavailable.code;
      67             :       }
      68             :     }
      69           1 :     return ExitCode.success.code;
      70             :   }
      71             : }

Generated by: LCOV version 1.16