Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: sdk/lib/_internal/pub/lib/src/barback.dart

Issue 141113011: Support directories other than "web" in pub build. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/pub/bin/pub.dart ('k') | sdk/lib/_internal/pub/lib/src/barback/build_environment.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/lib/src/barback.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback.dart b/sdk/lib/_internal/pub/lib/src/barback.dart
index 785d32f1426a0bad0d30c0e80b76283ee3e939fe..ae69197fc24f97290d681c6390b6cb7ebe647a2c 100644
--- a/sdk/lib/_internal/pub/lib/src/barback.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback.dart
@@ -8,20 +8,10 @@ import 'dart:async';
import 'package:barback/barback.dart';
import 'package:path/path.dart' as path;
-import 'package:stack_trace/stack_trace.dart';
-
-import 'barback/dart2js_transformer.dart';
-import 'barback/load_all_transformers.dart';
-import 'barback/pub_package_provider.dart';
-import 'barback/server.dart';
-import 'barback/sources.dart';
-import 'log.dart' as log;
-import 'package_graph.dart';
+
import 'utils.dart';
import 'version.dart';
-export 'barback/sources.dart' show WatcherType;
-
/// The currently supported version of the Barback package that this version of
/// pub works with.
///
@@ -124,85 +114,6 @@ class TransformerId {
}
}
-/// Creates a [BarbackServer] serving on [host] and [port].
-///
-/// This transforms and serves all library and asset files in all packages in
-/// [graph]. It loads any transformer plugins defined in packages in [graph] and
-/// re-runs them as necessary when any input files change.
-///
-/// If [builtInTransformers] is provided, then a phase is added to the end of
-/// each package's cascade including those transformers.
-///
-/// If [watchForUpdates] is true (the default), the server will continually
-/// monitor the app and its dependencies for any updates. Otherwise the state of
-/// the app when the server is started will be maintained.
-Future<BarbackServer> createServer(String host, int port, PackageGraph graph,
- BarbackMode mode, {Iterable<Transformer> builtInTransformers,
- WatcherType watcher: WatcherType.AUTO}) {
-
- // If the entrypoint package manually configures the dart2js transformer,
- // remove it from the built-in transformer list.
- //
- // TODO(nweiz): if/when we support more built-in transformers, make this more
- // general.
- var containsDart2Js = graph.entrypoint.root.pubspec.transformers.any(
- (transformers) => transformers.any((id) => id.package == '\$dart2js'));
- if (containsDart2Js) {
- builtInTransformers = builtInTransformers.where(
- (transformer) => transformer is! Dart2JSTransformer);
- }
-
- var provider = new PubPackageProvider(graph);
- var barback = new Barback(provider);
-
- barback.log.listen(_log);
-
- return BarbackServer.bind(host, port, barback, graph.entrypoint.root.name)
- .then((server) {
- return syncFuture(() {
- if (watcher != WatcherType.NONE) {
- return watchSources(graph, barback, watcher);
- }
-
- loadSources(graph, barback);
- }).then((_) {
- var completer = new Completer();
-
- // If any errors get emitted either by barback or by the server, including
- // non-programmatic barback errors, they should take down the whole
- // program.
- var subscriptions = [
- server.barback.errors.listen((error) {
- if (error is TransformerException) error = error.error;
- if (!completer.isCompleted) {
- completer.completeError(error, new Chain.current());
- }
- }),
- server.barback.results.listen((_) {}, onError: (error, stackTrace) {
- if (completer.isCompleted) return;
- completer.completeError(error, stackTrace);
- }),
- server.results.listen((_) {}, onError: (error, stackTrace) {
- if (completer.isCompleted) return;
- completer.completeError(error, stackTrace);
- })
- ];
-
- loadAllTransformers(server, graph, mode, builtInTransformers).then((_) {
- if (!completer.isCompleted) completer.complete(server);
- }).catchError((error, stackTrace) {
- if (!completer.isCompleted) completer.completeError(error, stackTrace);
- });
-
- return completer.future.whenComplete(() {
- for (var subscription in subscriptions) {
- subscription.cancel();
- }
- });
- });
- });
-}
-
/// Converts [id] to a "package:" URI.
///
/// This will throw an [ArgumentError] if [id] doesn't represent a library in
@@ -268,7 +179,9 @@ AssetId specialUrlToId(Uri url) {
/// foo|web/
///
/// Throws a [FormatException] if [id] is not a valid public asset.
-String idtoUrlPath(String entrypoint, AssetId id) {
+// TODO(rnystrom): Get rid of [useWebAsRoot] once pub serve also serves out of
+// the package root directory.
+String idtoUrlPath(String entrypoint, AssetId id, {bool useWebAsRoot: true}) {
var parts = path.url.split(id.path);
if (parts.length < 2) {
@@ -276,78 +189,37 @@ String idtoUrlPath(String entrypoint, AssetId id) {
"Can not serve assets from top-level directory.");
}
- // Each top-level directory gets handled differently.
+ // Map "asset" and "lib" to their shared directories.
var dir = parts[0];
- parts = parts.skip(1);
-
- switch (dir) {
- case "asset":
- return path.url.join("/", "assets", id.package, path.url.joinAll(parts));
-
- case "lib":
- return path.url.join("/", "packages", id.package, path.url.joinAll(parts));
+ var rest = parts.skip(1);
- case "web":
- if (id.package != entrypoint) {
- throw new FormatException(
- 'Cannot access "web" directory of non-root packages.');
- }
- return path.url.join("/", path.url.joinAll(parts));
-
- default:
- throw new FormatException('Cannot access assets from "$dir".');
+ if (dir == "asset") {
+ return path.url.join("/", "assets", id.package, path.url.joinAll(rest));
}
-}
-/// Log [entry] using Pub's logging infrastructure.
-///
-/// Since both [LogEntry] objects and the message itself often redundantly
-/// show the same context like the file where an error occurred, this tries
-/// to avoid showing redundant data in the entry.
-void _log(LogEntry entry) {
- messageMentions(String text) {
- return entry.message.toLowerCase().contains(text.toLowerCase());
- }
-
- var prefixParts = [];
-
- // Show the level (unless the message mentions it).
- if (!messageMentions(entry.level.name)) {
- prefixParts.add("${entry.level} from");
+ if (dir == "lib") {
+ return path.url.join("/", "packages", id.package, path.url.joinAll(rest));
}
- // Show the transformer.
- prefixParts.add(entry.transform.transformer);
+ if (useWebAsRoot) {
+ if (dir != "web") {
+ throw new FormatException('Cannot access assets from "$dir".');
+ }
- // Mention the primary input of the transform unless the message seems to.
- if (!messageMentions(entry.transform.primaryId.path)) {
- prefixParts.add("on ${entry.transform.primaryId}");
- }
+ if (id.package != entrypoint) {
+ throw new FormatException(
+ 'Cannot access "web" directory of non-root packages.');
+ }
- // If the relevant asset isn't the primary input, mention it unless the
- // message already does.
- if (entry.assetId != entry.transform.primaryId &&
- !messageMentions(entry.assetId.path)) {
- prefixParts.add("with input ${entry.assetId}");
+ return path.url.join("/", path.url.joinAll(rest));
}
- var prefix = "[${prefixParts.join(' ')}]:";
- var message = entry.message;
- if (entry.span != null) {
- message = entry.span.getLocationMessage(entry.message);
+ if (id.package != entrypoint) {
+ throw new FormatException(
+ 'Can only access "lib" and "asset" directories of non-entrypoint '
+ 'packages.');
}
- switch (entry.level) {
- case LogLevel.ERROR:
- log.error("${log.red(prefix)}\n$message");
- break;
-
- case LogLevel.WARNING:
- log.warning("${log.yellow(prefix)}\n$message");
- break;
-
- case LogLevel.INFO:
- log.message("${log.cyan(prefix)}\n$message");
- break;
- }
+ // Allow any path in the entrypoint package.
+ return path.url.join("/", path.url.joinAll(parts));
}
« no previous file with comments | « sdk/lib/_internal/pub/bin/pub.dart ('k') | sdk/lib/_internal/pub/lib/src/barback/build_environment.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698