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

Side by Side Diff: sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart

Issue 599993004: Don't load transformers that aren't going to be used for an executable. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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.barback.asset_environment; 5 library pub.barback.asset_environment;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:barback/barback.dart'; 10 import 'package:barback/barback.dart';
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 /// 46 ///
47 /// Loads all used transformers using [mode] (including dart2js if 47 /// Loads all used transformers using [mode] (including dart2js if
48 /// [useDart2JS] is true). 48 /// [useDart2JS] is true).
49 /// 49 ///
50 /// This will only add the root package's "lib" directory to the environment. 50 /// This will only add the root package's "lib" directory to the environment.
51 /// Other directories can be added to the environment using [serveDirectory]. 51 /// Other directories can be added to the environment using [serveDirectory].
52 /// 52 ///
53 /// If [watcherType] is not [WatcherType.NONE] (the default), watches source 53 /// If [watcherType] is not [WatcherType.NONE] (the default), watches source
54 /// assets for modification. 54 /// assets for modification.
55 /// 55 ///
56 /// If [packages] is passed, only those packages' assets will be loaded and 56 /// If [packages] is passed, only those packages' assets are loaded and
57 /// served. 57 /// served.
58 /// 58 ///
59 /// If [entrypoints] is passed, only transformers necessary to run those
60 /// entrypoints are loaded. Each entrypoint is expected to refer to a Dart
61 /// library.
62 ///
59 /// Returns a [Future] that completes to the environment once the inputs, 63 /// Returns a [Future] that completes to the environment once the inputs,
60 /// transformers, and server are loaded and ready. 64 /// transformers, and server are loaded and ready.
61 static Future<AssetEnvironment> create(Entrypoint entrypoint, 65 static Future<AssetEnvironment> create(Entrypoint entrypoint,
62 BarbackMode mode, {WatcherType watcherType, String hostname, int basePort, 66 BarbackMode mode, {WatcherType watcherType, String hostname, int basePort,
63 Iterable<String> packages, bool useDart2JS: true}) { 67 Iterable<String> packages, Iterable<AssetId> entrypoints,
68 bool useDart2JS: true}) {
64 if (watcherType == null) watcherType = WatcherType.NONE; 69 if (watcherType == null) watcherType = WatcherType.NONE;
65 if (hostname == null) hostname = "localhost"; 70 if (hostname == null) hostname = "localhost";
66 if (basePort == null) basePort = 0; 71 if (basePort == null) basePort = 0;
67 72
68 return entrypoint.loadPackageGraph().then((graph) { 73 return entrypoint.loadPackageGraph().then((graph) {
69 log.fine("Loaded package graph."); 74 log.fine("Loaded package graph.");
70 graph = _adjustPackageGraph(graph, mode, packages); 75 graph = _adjustPackageGraph(graph, mode, packages);
71 var barback = new Barback(new PubPackageProvider(graph)); 76 var barback = new Barback(new PubPackageProvider(graph));
72 barback.log.listen(_log); 77 barback.log.listen(_log);
73 78
74 var environment = new AssetEnvironment._(graph, barback, mode, 79 var environment = new AssetEnvironment._(graph, barback, mode,
75 watcherType, hostname, basePort); 80 watcherType, hostname, basePort);
76 81
77 return environment._load(useDart2JS: useDart2JS) 82 return environment._load(entrypoints: entrypoints, useDart2JS: useDart2JS)
78 .then((_) => environment); 83 .then((_) => environment);
79 }); 84 });
80 } 85 }
81 86
82 /// Return a version of [graph] that's restricted to [packages] (if passed) 87 /// Return a version of [graph] that's restricted to [packages] (if passed)
83 /// and loads cached packages (if [mode] is [BarbackMode.DEBUG]). 88 /// and loads cached packages (if [mode] is [BarbackMode.DEBUG]).
84 static PackageGraph _adjustPackageGraph(PackageGraph graph, 89 static PackageGraph _adjustPackageGraph(PackageGraph graph,
85 BarbackMode mode, Iterable<String> packages) { 90 BarbackMode mode, Iterable<String> packages) {
86 if (mode != BarbackMode.DEBUG && packages == null) return graph; 91 if (mode != BarbackMode.DEBUG && packages == null) return graph;
87 packages = (packages == null ? graph.packages.keys : packages).toSet(); 92 packages = (packages == null ? graph.packages.keys : packages).toSet();
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 /// Loads the assets and transformers for this environment. 443 /// Loads the assets and transformers for this environment.
439 /// 444 ///
440 /// This transforms and serves all library and asset files in all packages in 445 /// This transforms and serves all library and asset files in all packages in
441 /// the environment's package graph. It loads any transformer plugins defined 446 /// the environment's package graph. It loads any transformer plugins defined
442 /// in packages in [graph] and re-runs them as necessary when any input files 447 /// in packages in [graph] and re-runs them as necessary when any input files
443 /// change. 448 /// change.
444 /// 449 ///
445 /// If [useDart2JS] is `true`, then the [Dart2JSTransformer] is implicitly 450 /// If [useDart2JS] is `true`, then the [Dart2JSTransformer] is implicitly
446 /// added to end of the root package's transformer phases. 451 /// added to end of the root package's transformer phases.
447 /// 452 ///
453 /// If [entrypoints] is passed, only transformers necessary to run those
454 /// entrypoints will be loaded.
455 ///
448 /// Returns a [Future] that completes once all inputs and transformers are 456 /// Returns a [Future] that completes once all inputs and transformers are
449 /// loaded. 457 /// loaded.
450 Future _load({bool useDart2JS}) { 458 Future _load({Iterable<AssetId> entrypoints, bool useDart2JS}) {
451 return log.progress("Initializing barback", () { 459 return log.progress("Initializing barback", () async {
452 // If the entrypoint package manually configures the dart2js 460 // If the entrypoint package manually configures the dart2js
453 // transformer, don't include it in the built-in transformer list. 461 // transformer, don't include it in the built-in transformer list.
454 // 462 //
455 // TODO(nweiz): if/when we support more built-in transformers, make 463 // TODO(nweiz): if/when we support more built-in transformers, make
456 // this more general. 464 // this more general.
457 var containsDart2JS = graph.entrypoint.root.pubspec.transformers 465 var containsDart2JS = graph.entrypoint.root.pubspec.transformers
458 .any((transformers) => 466 .any((transformers) =>
459 transformers.any((config) => config.id.package == '\$dart2js')); 467 transformers.any((config) => config.id.package == '\$dart2js'));
460 468
461 if (!containsDart2JS && useDart2JS) { 469 if (!containsDart2JS && useDart2JS) {
462 _builtInTransformers.addAll([ 470 _builtInTransformers.addAll([
463 new Dart2JSTransformer(this, mode), 471 new Dart2JSTransformer(this, mode),
464 new DartForwardingTransformer(mode) 472 new DartForwardingTransformer(mode)
465 ]); 473 ]);
466 } 474 }
467 475
468 // Bind a server that we can use to load the transformers. 476 // Bind a server that we can use to load the transformers.
469 var transformerServer; 477 var transformerServer = await BarbackServer.bind(this, _hostname, 0);
470 return BarbackServer.bind(this, _hostname, 0).then((server) {
471 transformerServer = server;
472 478
473 var errorStream = barback.errors.map((error) { 479 var errorStream = barback.errors.map((error) {
474 // Even most normally non-fatal barback errors should take down pub if 480 // Even most normally non-fatal barback errors should take down pub if
475 // they happen during the initial load process. 481 // they happen during the initial load process.
476 if (error is! AssetLoadException) throw error; 482 if (error is! AssetLoadException) throw error;
477 483
478 log.error(log.red(error.message)); 484 log.error(log.red(error.message));
479 log.fine(error.stackTrace.terse); 485 log.fine(error.stackTrace.terse);
480 }); 486 });
481 487
482 return _withStreamErrors(() { 488 await _withStreamErrors(() {
483 return log.progress("Loading source assets", _provideSources); 489 return log.progress("Loading source assets", _provideSources);
484 }, [errorStream, barback.results]); 490 }, [errorStream, barback.results]);
485 }).then((_) {
486 log.fine("Provided sources.");
487 var completer = new Completer();
488 491
489 var errorStream = barback.errors.map((error) { 492 log.fine("Provided sources.");
490 // Now that we're loading transformers, errors they log shouldn't be
491 // fatal, since we're starting to run them on real user assets which
492 // may have e.g. syntax errors. If an error would cause a transformer
493 // to fail to load, the load failure will cause us to exit.
494 if (error is! TransformerException) throw error;
495 493
496 var message = error.error.toString(); 494 var errorStream = barback.errors.map((error) {
497 if (error.stackTrace != null) { 495 // Now that we're loading transformers, errors they log shouldn't be
498 message += "\n" + error.stackTrace.terse.toString(); 496 // fatal, since we're starting to run them on real user assets which
499 } 497 // may have e.g. syntax errors. If an error would cause a transformer
498 // to fail to load, the load failure will cause us to exit.
499 if (error is! TransformerException) throw error;
500 500
501 _log(new LogEntry(error.transform, error.transform.primaryId, 501 var message = error.error.toString();
502 LogLevel.ERROR, message, null)); 502 if (error.stackTrace != null) {
503 }); 503 message += "\n" + error.stackTrace.terse.toString();
504 }
504 505
505 return _withStreamErrors(() { 506 _log(new LogEntry(error.transform, error.transform.primaryId,
506 return log.progress("Loading transformers", () { 507 LogLevel.ERROR, message, null));
507 return loadAllTransformers(this, transformerServer)
508 .then((_) => transformerServer.close());
509 }, fine: true);
510 }, [errorStream, barback.results, transformerServer.results]);
511 }); 508 });
509
510 await _withStreamErrors(() async {
511 return log.progress("Loading transformers", () {
512 await loadAllTransformers(this, transformerServer,
513 entrypoints: entrypoints);
514 transformerServer.close();
515 }, fine: true);
516 }, [errorStream, barback.results, transformerServer.results]);
512 }, fine: true); 517 }, fine: true);
513 } 518 }
514 519
515 /// Provides the public source assets in the environment to barback. 520 /// Provides the public source assets in the environment to barback.
516 /// 521 ///
517 /// If [watcherType] is not [WatcherType.NONE], enables watching on them. 522 /// If [watcherType] is not [WatcherType.NONE], enables watching on them.
518 Future _provideSources() async { 523 Future _provideSources() async {
519 // Just include the "lib" directory from each package. We'll add the 524 // Just include the "lib" directory from each package. We'll add the
520 // other build directories in the root package by calling 525 // other build directories in the root package by calling
521 // [serveDirectory]. 526 // [serveDirectory].
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 String toString() => "polling"; 788 String toString() => "polling";
784 } 789 }
785 790
786 class _NoneWatcherType implements WatcherType { 791 class _NoneWatcherType implements WatcherType {
787 const _NoneWatcherType(); 792 const _NoneWatcherType();
788 793
789 DirectoryWatcher create(String directory) => null; 794 DirectoryWatcher create(String directory) => null;
790 795
791 String toString() => "none"; 796 String toString() => "none";
792 } 797 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698