// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import '../base/common.dart'; import '../base/os.dart'; import '../dart/pub.dart'; import '../runner/flutter_command.dart'; class PackagesCommand extends FlutterCommand { PackagesCommand() { addSubcommand(new PackagesGetCommand('get', false)); addSubcommand(new PackagesGetCommand('upgrade', true)); } @override final String name = 'packages'; @override List<String> get aliases => const <String>['pub']; @override final String description = 'Commands for managing Flutter packages.'; @override Future<Null> verifyThenRunCommand() async { commandValidator(); return super.verifyThenRunCommand(); } @override Future<Null> runCommand() async { } } class PackagesGetCommand extends FlutterCommand { @override final String name; final bool upgrade; PackagesGetCommand(this.name, this.upgrade); // TODO: implement description @override String get description => (upgrade ? 'Upgrade' : 'Get') + ' packages in a Flutter project.'; @override String get invocation => "${runner.executableName} packages $name [<target directory>]"; @override Future<Null> runCommand() async { if (argResults.rest.length > 1) throwToolExit('Too many arguments.\n$usage'); String target = findProjectRoot( argResults.rest.length == 1 ? argResults.rest[0] : null); if (target == null) throwToolExit( 'Expected to find project root starting at ' + (argResults.rest.length == 1 ? argResults.rest[0] : 'current working directory') + '$usage'); // TODO: If the user is using a local build, we should use the packages from their build instead of the cache. await pubGet(directory: target, upgrade: upgrade, checkLastModified: false); } }