Index: sdk/lib/_internal/pub/lib/src/command/serve.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/command/serve.dart b/sdk/lib/_internal/pub/lib/src/command/serve.dart |
index f7c140a778f7d45b40f6ae85490627ec882459c9..a2cc64e5400ae0c72e417f373f0818f08a8720a6 100644 |
--- a/sdk/lib/_internal/pub/lib/src/command/serve.dart |
+++ b/sdk/lib/_internal/pub/lib/src/command/serve.dart |
@@ -8,25 +8,22 @@ import 'dart:async'; |
import 'dart:math' as math; |
import 'package:barback/barback.dart'; |
-import 'package:path/path.dart' as p; |
import '../barback/build_environment.dart'; |
import '../barback/pub_package_provider.dart'; |
-import '../command.dart'; |
-import '../io.dart'; |
import '../log.dart' as log; |
import '../utils.dart'; |
+import 'barback.dart'; |
final _arrow = getSpecial('\u2192', '=>'); |
/// Handles the `serve` pub command. |
-class ServeCommand extends PubCommand { |
+class ServeCommand extends BarbackCommand { |
String get description => |
'Run a local web development server.\n\n' |
'By default, this serves "web/" and "test/", but an explicit list of \n' |
'directories to serve can be provided as well.'; |
String get usage => "pub serve [directories...]"; |
- final takesArguments = true; |
PubPackageProvider _provider; |
@@ -51,8 +48,9 @@ class ServeCommand extends PubCommand { |
/// `true` if the admin server URL should be displayed on startup. |
bool get logAdminUrl => commandOptions['log-admin-url']; |
- /// The build mode. |
- BarbackMode get mode => new BarbackMode(commandOptions['mode']); |
+ BarbackMode get defaultMode => BarbackMode.DEBUG; |
+ |
+ List<String> get defaultSourceDirectories => ["web", "test"]; |
/// This completer is used to keep pub running (by not completing) and to |
/// pipe fatal errors to pub's top-level error-handling machinery. |
@@ -78,24 +76,20 @@ class ServeCommand extends PubCommand { |
help: 'Compile Dart to JavaScript.'); |
commandParser.addFlag('force-poll', defaultsTo: false, |
help: 'Force the use of a polling filesystem watcher.'); |
- commandParser.addOption('mode', defaultsTo: BarbackMode.DEBUG.toString(), |
- help: 'Mode to run transformers in.'); |
} |
- Future onRun() { |
+ Future onRunTransformerCommand() { |
var port = parseInt(commandOptions['port'], 'port'); |
var adminPort = commandOptions['admin-port'] == null ? null : |
parseInt(commandOptions['admin-port'], 'admin port'); |
- var directories = _parseDirectoriesToServe(); |
- |
var watcherType = commandOptions['force-poll'] ? |
WatcherType.POLLING : WatcherType.AUTO; |
return BuildEnvironment.create(entrypoint, hostname, port, mode, |
watcherType, useDart2JS: useDart2JS).then((environment) { |
- var directoryLength = directories.map((dir) => dir.length) |
+ var directoryLength = sourceDirectories.map((dir) => dir.length) |
.reduce(math.max); |
return environment.startAdminServer(adminPort).then((server) { |
@@ -113,7 +107,7 @@ class ServeCommand extends PubCommand { |
// that we don't log spurious build results in the middle of listing |
// out the bound servers. |
environment.pauseUpdates(); |
- return Future.forEach(directories, (directory) { |
+ return Future.forEach(sourceDirectories, (directory) { |
return _startServer(environment, directory, directoryLength); |
}); |
}).then((_) { |
@@ -178,50 +172,6 @@ class ServeCommand extends PubCommand { |
}); |
} |
- /// Returns the set of directories that will be served from servers exposed |
- /// to the user. |
- /// |
- /// Throws a [UsageException] if the command-line arguments are invalid. |
- List<String> _parseDirectoriesToServe() { |
- if (commandOptions.rest.isEmpty) { |
- var directories = ['web', 'test'].where(dirExists).toList(); |
- if (directories.isNotEmpty) return directories; |
- usageError( |
- 'Your package must have "web" and/or "test" directories to serve,\n' |
- 'or you must pass in directories to serve explicitly.'); |
- } |
- |
- var directories = commandOptions.rest.map(p.normalize).toList(); |
- var invalid = directories.where((dir) => !p.isWithin('.', dir)); |
- if (invalid.isNotEmpty) { |
- usageError("${_directorySentence(invalid, "isn't", "aren't")} in this " |
- "package."); |
- } |
- |
- var nonExistent = directories.where((dir) => !dirExists(dir)); |
- if (nonExistent.isNotEmpty) { |
- usageError("${_directorySentence(nonExistent, "doesn't", "don't")} " |
- "exist."); |
- } |
- |
- return directories; |
- } |
- |
- /// Converts a list of [directoryNames] to a sentence. |
- /// |
- /// After the list of directories, [singularVerb] will be used if there is |
- /// only one directory and [pluralVerb] will be used if there are more than |
- /// one. |
- String _directorySentence(Iterable<String> directoryNames, |
- String singularVerb, String pluralVerb) { |
- var directories = pluralize('Directory', directoryNames.length, |
- plural: 'Directories'); |
- var names = toSentence(ordered(directoryNames).map((dir) => '"$dir"')); |
- var verb = pluralize(singularVerb, directoryNames.length, |
- plural: pluralVerb); |
- return "$directories $names $verb"; |
- } |
- |
/// Reports [error] and exits the server. |
void _fatalError(error, [stackTrace]) { |
if (_completer.isCompleted) return; |