blob: e6162a5d981e1f73ba87860baa1487ed50f10db1 [file] [log] [blame]
// Copyright (c) 2020, 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.
import 'dart:async';
import 'package:args/args.dart';
import '../core.dart';
import '../experiments.dart';
import '../sdk.dart';
import '../vm_interop_handler.dart';
class PubCommand extends DartdevCommand {
static const String cmdName = 'pub';
PubCommand() : super(cmdName, 'Work with packages.');
// TODO(jwren) as soon as pub commands are are implemented directly in
// dartdev, remove this static list.
/// A list of all subcommands, used only for the implementation of
/// [usagePath], see below.
static List<String> pubSubcommands = [
'cache',
'deps',
'downgrade',
'get',
'global',
'logout',
'outdated',
'publish',
'run',
'upgrade',
'uploader',
'version',
];
@override
ArgParser createArgParser() => ArgParser.allowAnything();
@override
void printUsage() {
// Override [printUsage] for invocations of 'dart help pub' which won't
// execute [run] below. Without this, the 'dart help pub' reports the
// command pub with no commands or flags.
if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
return;
}
final command = sdk.pubSnapshot;
final args = ['help'];
log.trace('$command ${args.first}');
// Call 'pub help'
VmInteropHandler.run(command, args, packageConfigOverride: null);
}
@override
FutureOr<int> run() async {
if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
return 255;
}
final command = sdk.pubSnapshot;
var args = argResults.arguments;
// Pass any --enable-experiment options along.
if (args.isNotEmpty && wereExperimentsSpecified) {
List<String> experimentIds = specifiedExperiments;
if (args.first == 'run') {
args = [
...args.sublist(0, 1),
'--$experimentFlagName=${experimentIds.join(',')}',
...args.sublist(1),
];
} else if (args.length > 1 && args[0] == 'global' && args[0] == 'run') {
args = [
...args.sublist(0, 2),
'--$experimentFlagName=${experimentIds.join(',')}',
...args.sublist(2),
];
}
}
log.trace('$command ${args.join(' ')}');
VmInteropHandler.run(command, args, packageConfigOverride: null);
return 0;
}
}