From ed2e2bafbd6442bd59565c9871f57a04e0568c58 Mon Sep 17 00:00:00 2001 From: Nicholas Shahan Date: Thu, 11 Jan 2018 15:52:47 -0800 Subject: [PATCH 1/2] Add initial support for build_runner serve Refactor shared arguments into abstract class. --- webdev/lib/src/command/build_command.dart | 18 ++-------- .../command/build_runner_command_base.dart | 18 ++++++++++ webdev/lib/src/command/serve_command.dart | 35 +++++++++++++++++++ webdev/lib/src/webdev_command_runner.dart | 2 ++ 4 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 webdev/lib/src/command/build_runner_command_base.dart create mode 100644 webdev/lib/src/command/serve_command.dart diff --git a/webdev/lib/src/command/build_command.dart b/webdev/lib/src/command/build_command.dart index a09bb441f..9965c27bc 100644 --- a/webdev/lib/src/command/build_command.dart +++ b/webdev/lib/src/command/build_command.dart @@ -1,29 +1,17 @@ import 'dart:async'; + import 'package:io/io.dart'; -import 'package:args/command_runner.dart'; +import 'build_runner_command_base.dart'; /// Command to execute pub run build_runner build. -class BuildCommand extends Command { +class BuildCommand extends BuildRunnerCommandBase { @override final name = 'build'; @override final description = 'Run builders to build a package.'; - BuildCommand() { - // TODO(nshahan) Expose more args passed to build_runner build. - // build_runner might expose args for use in wrapping scripts like this one. - argParser - ..addOption('output', - abbr: 'o', help: 'A directory to write the result of a build to.') - ..addFlag('verbose', - abbr: 'v', - defaultsTo: false, - negatable: false, - help: 'Enables verbose logging.'); - } - @override Future run() async { final manager = new ProcessManager(); diff --git a/webdev/lib/src/command/build_runner_command_base.dart b/webdev/lib/src/command/build_runner_command_base.dart new file mode 100644 index 000000000..d66f7904c --- /dev/null +++ b/webdev/lib/src/command/build_runner_command_base.dart @@ -0,0 +1,18 @@ +import 'package:args/command_runner.dart'; + +/// Extend to get a command with the arguments common to all build_runner +/// commands. +abstract class BuildRunnerCommandBase extends Command { + BuildRunnerCommandBase() { + // TODO(nshahan) Expose more common args passed to build_runner commands. + // build_runner might expose args for use in wrapping scripts like this one. + argParser + ..addOption('output', + abbr: 'o', help: 'A directory to write the result of a build to.') + ..addFlag('verbose', + abbr: 'v', + defaultsTo: false, + negatable: false, + help: 'Enables verbose logging.'); + } +} diff --git a/webdev/lib/src/command/serve_command.dart b/webdev/lib/src/command/serve_command.dart new file mode 100644 index 000000000..221a98909 --- /dev/null +++ b/webdev/lib/src/command/serve_command.dart @@ -0,0 +1,35 @@ +import 'dart:async'; + +import 'package:io/io.dart'; + +import 'build_runner_command_base.dart'; + +/// Command to execute pub run build_runner serve. +class ServeCommand extends BuildRunnerCommandBase { + @override + final name = 'serve'; + + @override + final description = 'Run a local web development server and a file system' + ' watcher that re-builds on changes.'; + + ServeCommand() { + // TODO(nshahan) Expose more args passed to build_runner serve. + // build_runner might expose args for use in wrapping scripts like this one. + argParser + ..addOption('hostname', + defaultsTo: 'localhost', help: 'Specify the hostname to serve on.'); + } + + @override + Future run() async { + final manager = new ProcessManager(); + final executable = 'pub'; + final arguments = ['run', 'build_runner', 'serve', '--assume-tty']; + arguments.addAll(argResults.arguments); + var spawn = await manager.spawn(executable, arguments); + + await spawn.exitCode; + await sharedStdIn.terminate(); + } +} diff --git a/webdev/lib/src/webdev_command_runner.dart b/webdev/lib/src/webdev_command_runner.dart index fd90bfb0c..a6d904d51 100644 --- a/webdev/lib/src/webdev_command_runner.dart +++ b/webdev/lib/src/webdev_command_runner.dart @@ -1,6 +1,7 @@ import 'package:args/command_runner.dart'; import 'command/build_command.dart'; +import 'command/serve_command.dart'; /// All available top level commands. CommandRunner webdevCommandRunner() { @@ -8,6 +9,7 @@ CommandRunner webdevCommandRunner() { new CommandRunner('webdev', 'A tool to develop Dart web projects.'); commandRunner.addCommand(new BuildCommand()); + commandRunner.addCommand(new ServeCommand()); return commandRunner; } From 775cd3bce2d1da2a0b33312562433ef371d0e123 Mon Sep 17 00:00:00 2001 From: Nicholas Shahan Date: Fri, 12 Jan 2018 14:51:57 -0800 Subject: [PATCH 2/2] Prefer cascade operator --- webdev/lib/src/webdev_command_runner.dart | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/webdev/lib/src/webdev_command_runner.dart b/webdev/lib/src/webdev_command_runner.dart index a6d904d51..1dbdd4133 100644 --- a/webdev/lib/src/webdev_command_runner.dart +++ b/webdev/lib/src/webdev_command_runner.dart @@ -4,12 +4,7 @@ import 'command/build_command.dart'; import 'command/serve_command.dart'; /// All available top level commands. -CommandRunner webdevCommandRunner() { - final commandRunner = - new CommandRunner('webdev', 'A tool to develop Dart web projects.'); - - commandRunner.addCommand(new BuildCommand()); - commandRunner.addCommand(new ServeCommand()); - - return commandRunner; -} +CommandRunner webdevCommandRunner() => + new CommandRunner('webdev', 'A tool to develop Dart web projects.') + ..addCommand(new BuildCommand()) + ..addCommand(new ServeCommand());