| // Copyright 2013 The Flutter Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'package:file/file.dart'; | |
| import 'common/package_command.dart'; | |
| import 'common/repository_package.dart'; | |
| /// A command to list different types of repository content. | |
| class ListCommand extends PackageCommand { | |
| /// Creates an instance of the list command, whose behavior depends on the | |
| /// 'type' argument it provides. | |
| ListCommand(super.packagesDir, {super.platform}) { | |
| argParser.addOption( | |
| _type, | |
| defaultsTo: _package, | |
| allowed: <String>[_package, _example, _allPackage, _file], | |
| help: 'What type of file system content to list.', | |
| ); | |
| } | |
| static const String _type = 'type'; | |
| static const String _allPackage = 'package-or-subpackage'; | |
| static const String _example = 'example'; | |
| static const String _package = 'package'; | |
| static const String _file = 'file'; | |
| @override | |
| final String name = 'list'; | |
| @override | |
| final String description = 'Lists packages or files'; | |
| @override | |
| Future<void> run() async { | |
| switch (getStringArg(_type)) { | |
| case _package: | |
| await for (final PackageEnumerationEntry entry in getTargetPackages()) { | |
| print(entry.package.path); | |
| } | |
| case _example: | |
| final Stream<RepositoryPackage> examples = getTargetPackages().expand<RepositoryPackage>( | |
| (PackageEnumerationEntry entry) => entry.package.getExamples(), | |
| ); | |
| await for (final RepositoryPackage package in examples) { | |
| print(package.path); | |
| } | |
| case _allPackage: | |
| await for (final PackageEnumerationEntry entry in getTargetPackagesAndSubpackages()) { | |
| print(entry.package.path); | |
| } | |
| case _file: | |
| await for (final File file in getFiles()) { | |
| print(file.path); | |
| } | |
| } | |
| } | |
| } |