| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library pub.command.serve; | 5 library pub.command.serve; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:math' as math; | 8 import 'dart:math' as math; |
| 9 | 9 |
| 10 import 'package:barback/barback.dart'; | 10 import 'package:barback/barback.dart'; |
| 11 | 11 |
| 12 import '../barback/asset_environment.dart'; | 12 import '../barback/asset_environment.dart'; |
| 13 import '../barback/pub_package_provider.dart'; | 13 import '../barback/pub_package_provider.dart'; |
| 14 import '../log.dart' as log; | 14 import '../log.dart' as log; |
| 15 import '../utils.dart'; | 15 import '../utils.dart'; |
| 16 import 'barback.dart'; | 16 import 'barback.dart'; |
| 17 | 17 |
| 18 final _arrow = getSpecial('\u2192', '=>'); | 18 final _arrow = getSpecial('\u2192', '=>'); |
| 19 | 19 |
| 20 /// Handles the `serve` pub command. | 20 /// Handles the `serve` pub command. |
| 21 class ServeCommand extends BarbackCommand { | 21 class ServeCommand extends BarbackCommand { |
| 22 String get name => "serve"; |
| 22 String get description => | 23 String get description => |
| 23 'Run a local web development server.\n\n' | 24 'Run a local web development server.\n\n' |
| 24 'By default, this serves "web/" and "test/", but an explicit list of \n' | 25 'By default, this serves "web/" and "test/", but an explicit list of \n' |
| 25 'directories to serve can be provided as well.'; | 26 'directories to serve can be provided as well.'; |
| 26 String get usage => "pub serve [directories...]"; | 27 String get invocation => "pub serve [directories...]"; |
| 27 String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-serve.html"; | 28 String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-serve.html"; |
| 28 | 29 |
| 29 PubPackageProvider _provider; | 30 PubPackageProvider _provider; |
| 30 | 31 |
| 31 String get hostname => commandOptions['hostname']; | 32 String get hostname => argResults['hostname']; |
| 32 | 33 |
| 33 /// The base port for the servers. | 34 /// The base port for the servers. |
| 34 /// | 35 /// |
| 35 /// This will print a usage error and exit if the specified port is invalid. | 36 /// This will print a usage error and exit if the specified port is invalid. |
| 36 int get port => parseInt(commandOptions['port'], 'port'); | 37 int get port => parseInt(argResults['port'], 'port'); |
| 37 | 38 |
| 38 /// The port for the admin UI. | 39 /// The port for the admin UI. |
| 39 /// | 40 /// |
| 40 /// This will print a usage error and exit if the specified port is invalid. | 41 /// This will print a usage error and exit if the specified port is invalid. |
| 41 int get adminPort { | 42 int get adminPort { |
| 42 var adminPort = commandOptions['admin-port']; | 43 var adminPort = argResults['admin-port']; |
| 43 return adminPort == null ? null : parseInt(adminPort, 'admin port'); | 44 return adminPort == null ? null : parseInt(adminPort, 'admin port'); |
| 44 } | 45 } |
| 45 | 46 |
| 46 /// `true` if Dart entrypoints should be compiled to JavaScript. | 47 /// `true` if Dart entrypoints should be compiled to JavaScript. |
| 47 bool get useDart2JS => commandOptions['dart2js']; | 48 bool get useDart2JS => argResults['dart2js']; |
| 48 | 49 |
| 49 /// `true` if the admin server URL should be displayed on startup. | 50 /// `true` if the admin server URL should be displayed on startup. |
| 50 bool get logAdminUrl => commandOptions['log-admin-url']; | 51 bool get logAdminUrl => argResults['log-admin-url']; |
| 51 | 52 |
| 52 BarbackMode get defaultMode => BarbackMode.DEBUG; | 53 BarbackMode get defaultMode => BarbackMode.DEBUG; |
| 53 | 54 |
| 54 List<String> get defaultSourceDirectories => ["web", "test"]; | 55 List<String> get defaultSourceDirectories => ["web", "test"]; |
| 55 | 56 |
| 56 /// This completer is used to keep pub running (by not completing) and to | 57 /// This completer is used to keep pub running (by not completing) and to |
| 57 /// pipe fatal errors to pub's top-level error-handling machinery. | 58 /// pipe fatal errors to pub's top-level error-handling machinery. |
| 58 final _completer = new Completer(); | 59 final _completer = new Completer(); |
| 59 | 60 |
| 60 ServeCommand() { | 61 ServeCommand() { |
| 61 commandParser.addOption('hostname', defaultsTo: 'localhost', | 62 argParser.addOption('hostname', defaultsTo: 'localhost', |
| 62 help: 'The hostname to listen on.'); | 63 help: 'The hostname to listen on.'); |
| 63 commandParser.addOption('port', defaultsTo: '8080', | 64 argParser.addOption('port', defaultsTo: '8080', |
| 64 help: 'The base port to listen on.'); | 65 help: 'The base port to listen on.'); |
| 65 | 66 |
| 66 // TODO(rnystrom): A hidden option to print the URL that the admin server | 67 // TODO(rnystrom): A hidden option to print the URL that the admin server |
| 67 // is bound to on startup. Since this is currently only used for the Web | 68 // is bound to on startup. Since this is currently only used for the Web |
| 68 // Socket interface, we don't want to show it to users, but the tests and | 69 // Socket interface, we don't want to show it to users, but the tests and |
| 69 // Editor need this logged to know what port to bind to. | 70 // Editor need this logged to know what port to bind to. |
| 70 // Remove this (and always log) when #16954 is fixed. | 71 // Remove this (and always log) when #16954 is fixed. |
| 71 commandParser.addFlag('log-admin-url', defaultsTo: false, hide: true); | 72 argParser.addFlag('log-admin-url', defaultsTo: false, hide: true); |
| 72 | 73 |
| 73 // TODO(nweiz): Make this public when issue 16954 is fixed. | 74 // TODO(nweiz): Make this public when issue 16954 is fixed. |
| 74 commandParser.addOption('admin-port', hide: true); | 75 argParser.addOption('admin-port', hide: true); |
| 75 | 76 |
| 76 commandParser.addFlag('dart2js', defaultsTo: true, | 77 argParser.addFlag('dart2js', defaultsTo: true, |
| 77 help: 'Compile Dart to JavaScript.'); | 78 help: 'Compile Dart to JavaScript.'); |
| 78 commandParser.addFlag('force-poll', defaultsTo: false, | 79 argParser.addFlag('force-poll', defaultsTo: false, |
| 79 help: 'Force the use of a polling filesystem watcher.'); | 80 help: 'Force the use of a polling filesystem watcher.'); |
| 80 } | 81 } |
| 81 | 82 |
| 82 Future onRunTransformerCommand() async { | 83 Future onRunTransformerCommand() async { |
| 83 var port = parseInt(commandOptions['port'], 'port'); | 84 var port = parseInt(argResults['port'], 'port'); |
| 84 var adminPort = commandOptions['admin-port'] == null ? null : | 85 var adminPort = argResults['admin-port'] == null ? null : |
| 85 parseInt(commandOptions['admin-port'], 'admin port'); | 86 parseInt(argResults['admin-port'], 'admin port'); |
| 86 | 87 |
| 87 var watcherType = commandOptions['force-poll'] ? | 88 var watcherType = argResults['force-poll'] ? |
| 88 WatcherType.POLLING : WatcherType.AUTO; | 89 WatcherType.POLLING : WatcherType.AUTO; |
| 89 | 90 |
| 90 var environment = await AssetEnvironment.create(entrypoint, mode, | 91 var environment = await AssetEnvironment.create(entrypoint, mode, |
| 91 watcherType: watcherType, hostname: hostname, basePort: port, | 92 watcherType: watcherType, hostname: hostname, basePort: port, |
| 92 useDart2JS: useDart2JS); | 93 useDart2JS: useDart2JS); |
| 93 var directoryLength = sourceDirectories.map((dir) => dir.length) | 94 var directoryLength = sourceDirectories.map((dir) => dir.length) |
| 94 .reduce(math.max); | 95 .reduce(math.max); |
| 95 | 96 |
| 96 var server = await environment.startAdminServer(adminPort); | 97 var server = await environment.startAdminServer(adminPort); |
| 97 server.results.listen((_) { | 98 server.results.listen((_) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 "${padRight(server.rootDirectory, directoryLength)} " | 170 "${padRight(server.rootDirectory, directoryLength)} " |
| 170 "on ${log.bold('http://$hostname:${server.port}')}"); | 171 "on ${log.bold('http://$hostname:${server.port}')}"); |
| 171 } | 172 } |
| 172 | 173 |
| 173 /// Reports [error] and exits the server. | 174 /// Reports [error] and exits the server. |
| 174 void _fatalError(error, [stackTrace]) { | 175 void _fatalError(error, [stackTrace]) { |
| 175 if (_completer.isCompleted) return; | 176 if (_completer.isCompleted) return; |
| 176 _completer.completeError(error, stackTrace); | 177 _completer.completeError(error, stackTrace); |
| 177 } | 178 } |
| 178 } | 179 } |
| OLD | NEW |