From 8e3850395a78874ab4e5ce82b9a7555c6d7f2036 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Fri, 28 Feb 2020 23:22:30 +0000 Subject: [PATCH] [dartdev] refactor the dartdev pub command - delegate to the pub snapshot Change-Id: If0221ba6472271a186fc8628416ddca73e951a80 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137653 Commit-Queue: Devon Carew Reviewed-by: Jaime Wren --- DEPS | 2 +- pkg/dartdev/lib/src/commands/pub.dart | 77 +++++-------------------- pkg/dartdev/test/commands/pub_test.dart | 36 +++++------- utils/dartdev/BUILD.gn | 8 +++ 4 files changed, 40 insertions(+), 83 deletions(-) diff --git a/DEPS b/DEPS index 1524713b0a0..b0780a6808c 100644 --- a/DEPS +++ b/DEPS @@ -56,7 +56,7 @@ vars = { "gperftools_revision": "e9ab4c53041ac62feefbbb076d326e9a77dd1567", # Revisions of /third_party/* dependencies. - "args_tag": "1.5.2", + "args_tag": "1.5.3", "async_tag": "2.0.8", "bazel_worker_tag": "v0.1.22", "benchmark_harness_tag": "81641290dea44c34138a109a37e215482f405f81", diff --git a/pkg/dartdev/lib/src/commands/pub.dart b/pkg/dartdev/lib/src/commands/pub.dart index ec7d5bc6f89..acc8e398616 100644 --- a/pkg/dartdev/lib/src/commands/pub.dart +++ b/pkg/dartdev/lib/src/commands/pub.dart @@ -3,75 +3,30 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; +import 'dart:io'; -import 'package:pub/src/command/cache.dart'; -import 'package:pub/src/command/deps.dart'; -import 'package:pub/src/command/downgrade.dart'; -import 'package:pub/src/command/get.dart'; -import 'package:pub/src/command/global.dart'; -import 'package:pub/src/command/lish.dart'; -import 'package:pub/src/command/list_package_dirs.dart'; -import 'package:pub/src/command/logout.dart'; -import 'package:pub/src/command/run.dart'; -import 'package:pub/src/command/serve.dart'; -import 'package:pub/src/command/upgrade.dart'; -import 'package:pub/src/command/uploader.dart'; -import 'package:pub/src/command_runner.dart'; +import 'package:args/args.dart'; import '../core.dart'; -import '../utils.dart'; +import '../sdk.dart'; class PubCommand extends DartdevCommand { - var pubCommandRunner = PubCommandRunner(); + PubCommand({bool verbose = false}) : super('pub', 'Work with packages.'); - PubCommand({bool verbose = false}) : super('pub', 'Work with packages.') { - argParser.addFlag('version', negatable: false, help: 'Print pub version.'); - argParser.addFlag('trace', - help: 'Print debugging information when an error occurs.'); - argParser - .addOption('verbosity', help: 'Control output verbosity.', allowed: [ - 'error', - 'warning', - 'normal', - 'io', - 'solver', - 'all' - ], allowedHelp: { - 'error': 'Show only errors.', - 'warning': 'Show only errors and warnings.', - 'normal': 'Show errors, warnings, and user messages.', - 'io': 'Also show IO operations.', - 'solver': 'Show steps during version resolution.', - 'all': 'Show all output including internal tracing messages.' - }); - argParser.addFlag('verbose', - abbr: 'v', negatable: false, help: 'Shortcut for "--verbosity=all".'); - argParser.addFlag('with-prejudice', - hide: !isAprilFools, - negatable: false, - help: 'Execute commands with prejudice.'); - argParser.addFlag('sparkle', - hide: !isAprilFools, - negatable: false, - help: 'A more sparkly experience.'); - - addSubcommand(CacheCommand()); - addSubcommand(DepsCommand()); - addSubcommand(DowngradeCommand()); - addSubcommand(GlobalCommand()); - addSubcommand(GetCommand()); - addSubcommand(ListPackageDirsCommand()); - addSubcommand(LishCommand()); - addSubcommand(RunCommand()); - addSubcommand(ServeCommand()); - addSubcommand(UpgradeCommand()); - addSubcommand(UploaderCommand()); - addSubcommand(LogoutCommand()); - } + final ArgParser argParser = ArgParser.allowAnything(); @override FutureOr run() async { - await pubCommandRunner.run(argResults.arguments); - return 0; + final command = sdk.pub; + final args = argResults.arguments; + + log.trace('$command ${args.join(' ')}'); + + // Starting in ProcessStartMode.inheritStdio mode means the child process + // can detect support for ansi chars. + var process = + await Process.start(command, args, mode: ProcessStartMode.inheritStdio); + + return process.exitCode; } } diff --git a/pkg/dartdev/test/commands/pub_test.dart b/pkg/dartdev/test/commands/pub_test.dart index 7507df41517..fa49271f395 100644 --- a/pkg/dartdev/test/commands/pub_test.dart +++ b/pkg/dartdev/test/commands/pub_test.dart @@ -18,11 +18,10 @@ void pub() { test('implicit --help', () { p = project(); var result = p.runSync('pub', []); - expect(result.exitCode, 64); - expect(result.stdout, isEmpty); - expect(result.stderr, contains('Usage: dart pub [arguments]')); - expect(result.stderr, - contains('Print debugging information when an error occurs.')); + expect(result.exitCode, 0); + expect(result.stdout, contains('Pub is a package manager for Dart')); + expect(result.stdout, contains('Available commands:')); + expect(result.stderr, isEmpty); }); test('--help', () { @@ -30,29 +29,24 @@ void pub() { var result = p.runSync('pub', ['--help']); expect(result.exitCode, 0); + expect(result.stdout, contains('Pub is a package manager for Dart')); + expect(result.stdout, contains('Available commands:')); expect(result.stderr, isEmpty); - expect(result.stdout, contains('Work with packages')); - expect(result.stdout, contains('Usage: dart pub [arguments]')); - expect(result.stdout, - contains('Print debugging information when an error occurs.')); - }); - - test('success', () { - p = project(mainSrc: 'int get foo => 1;\n'); - var result = p.runSync('pub', ['deps']); - expect(result.exitCode, 1); - expect( - result.stderr, - startsWith( - '''No pubspec.lock file found, please run "pub get" first.''')); - expect(result.stdout, isEmpty); }); test('failure', () { + p = project(mainSrc: 'int get foo => 1;\n'); + var result = p.runSync('pub', ['deps']); + expect(result.exitCode, 65); + expect(result.stdout, isEmpty); + expect(result.stderr, contains('No pubspec.lock file found')); + }); + + test('failure unknown option', () { p = project(mainSrc: 'int get foo => 1;\n'); var result = p.runSync('pub', ['deps', '--foo']); expect(result.exitCode, 64); - expect(result.stderr, startsWith('Could not find an option named "foo".')); expect(result.stdout, isEmpty); + expect(result.stderr, startsWith('Could not find an option named "foo".')); }); } diff --git a/utils/dartdev/BUILD.gn b/utils/dartdev/BUILD.gn index 3a6e1a8638d..e41e7a4f74c 100644 --- a/utils/dartdev/BUILD.gn +++ b/utils/dartdev/BUILD.gn @@ -4,7 +4,15 @@ import("../application_snapshot.gni") +dartdev_files = exec_script("../../tools/list_dart_files.py", + [ + "absolute", + rebase_path("../../pkg/dartdev"), + ], + "list lines") + application_snapshot("dartdev") { main_dart = "../../pkg/dartdev/bin/dartdev.dart" training_args = [ "--help" ] + inputs = dartdev_files }