| OLD | NEW |
| 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.dependency_computer; | 5 library pub.barback.dependency_computer; |
| 6 | 6 |
| 7 import 'package:barback/barback.dart'; | 7 import 'package:barback/barback.dart'; |
| 8 import 'package:path/path.dart' as p; | 8 import 'package:path/path.dart' as p; |
| 9 | 9 |
| 10 import '../dart.dart'; | 10 import '../dart.dart'; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 | 36 |
| 37 /// A cache of the results of [transformersNeededByPackage]. | 37 /// A cache of the results of [transformersNeededByPackage]. |
| 38 final _transformersNeededByPackages = new Map<String, Set<TransformerId>>(); | 38 final _transformersNeededByPackages = new Map<String, Set<TransformerId>>(); |
| 39 | 39 |
| 40 /// The set of all packages that neither use transformers themselves nor | 40 /// The set of all packages that neither use transformers themselves nor |
| 41 /// import packages that use transformers. | 41 /// import packages that use transformers. |
| 42 /// | 42 /// |
| 43 /// This is precomputed before any package computers are loaded. | 43 /// This is precomputed before any package computers are loaded. |
| 44 final _untransformedPackages = new Set<String>(); | 44 final _untransformedPackages = new Set<String>(); |
| 45 | 45 |
| 46 /// Creates a dependency computer for [graph]. |
| 47 /// |
| 48 /// If [rootDevDependencies] is true, this includes the root package's dev |
| 49 /// dependencies in the computation. |
| 46 DependencyComputer(this._graph) { | 50 DependencyComputer(this._graph) { |
| 47 for (var package in ordered(_graph.packages.keys)) { | 51 for (var package in ordered(_graph.packages.keys)) { |
| 48 if (_graph.transitiveDependencies(package).every((dependency) => | 52 if (_graph.transitiveDependencies(package).every((dependency) => |
| 49 dependency.pubspec.transformers.isEmpty)) { | 53 dependency.pubspec.transformers.isEmpty)) { |
| 50 _untransformedPackages.add(package); | 54 _untransformedPackages.add(package); |
| 51 } | 55 } |
| 52 } | 56 } |
| 53 | 57 |
| 54 ordered(_graph.packages.keys).forEach(_loadPackageComputer); | 58 ordered(_graph.packages.keys).forEach(_loadPackageComputer); |
| 55 } | 59 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 } | 182 } |
| 179 | 183 |
| 180 if (_loadingPackageComputers.contains(id.package)) { | 184 if (_loadingPackageComputers.contains(id.package)) { |
| 181 throw new CycleException("$packageName is transformed by $id"); | 185 throw new CycleException("$packageName is transformed by $id"); |
| 182 } | 186 } |
| 183 | 187 |
| 184 results.add(id); | 188 results.add(id); |
| 185 } | 189 } |
| 186 } | 190 } |
| 187 | 191 |
| 188 var dependencies = packageName == _graph.entrypoint.root.name ? | 192 var dependencies = |
| 189 package.immediateDependencies : package.dependencies; | 193 !_graph.entrypoint.isGlobal && |
| 194 packageName == _graph.entrypoint.root.name |
| 195 ? package.immediateDependencies |
| 196 : package.dependencies; |
| 190 for (var dep in dependencies) { | 197 for (var dep in dependencies) { |
| 191 try { | 198 try { |
| 192 traversePackage(dep.name); | 199 traversePackage(dep.name); |
| 193 } on CycleException catch (error) { | 200 } on CycleException catch (error) { |
| 194 throw error.prependStep("$packageName depends on ${dep.name}"); | 201 throw error.prependStep("$packageName depends on ${dep.name}"); |
| 195 } | 202 } |
| 196 } | 203 } |
| 197 } | 204 } |
| 198 | 205 |
| 199 traversePackage(rootPackage); | 206 traversePackage(rootPackage); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 /// [DependencyComputer._transformersNeededByPackage]). | 335 /// [DependencyComputer._transformersNeededByPackage]). |
| 329 Set<TransformerId> transformersNeededByLibrary(String library) { | 336 Set<TransformerId> transformersNeededByLibrary(String library) { |
| 330 library = p.normalize(library); | 337 library = p.normalize(library); |
| 331 if (_activeLibraries.contains(library)) return new Set(); | 338 if (_activeLibraries.contains(library)) return new Set(); |
| 332 _activeLibraries.add(library); | 339 _activeLibraries.add(library); |
| 333 | 340 |
| 334 try { | 341 try { |
| 335 var externalDirectives = _getTransitiveExternalDirectives(library); | 342 var externalDirectives = _getTransitiveExternalDirectives(library); |
| 336 if (externalDirectives == null) { | 343 if (externalDirectives == null) { |
| 337 var rootName = _dependencyComputer._graph.entrypoint.root.name; | 344 var rootName = _dependencyComputer._graph.entrypoint.root.name; |
| 338 var dependencies = _package.name == rootName ? | 345 var dependencies = |
| 339 _package.immediateDependencies : _package.dependencies; | 346 !_dependencyComputer._graph.entrypoint.isGlobal && |
| 347 _package.name == rootName |
| 348 ? _package.immediateDependencies |
| 349 : _package.dependencies; |
| 340 | 350 |
| 341 // If anything transitively imported/exported by [library] within this | 351 // If anything transitively imported/exported by [library] within this |
| 342 // package is modified by a transformer, we don't know what it will | 352 // package is modified by a transformer, we don't know what it will |
| 343 // load, so we take the conservative approach and say it depends on | 353 // load, so we take the conservative approach and say it depends on |
| 344 // everything. | 354 // everything. |
| 345 return _applicableTransformers.map((config) => config.id).toSet().union( | 355 return _applicableTransformers.map((config) => config.id).toSet().union( |
| 346 unionAll(dependencies.map((dep) { | 356 unionAll(dependencies.map((dep) { |
| 347 try { | 357 try { |
| 348 return _dependencyComputer._transformersNeededByPackage(dep.name); | 358 return _dependencyComputer._transformersNeededByPackage(dep.name); |
| 349 } on CycleException catch (error) { | 359 } on CycleException catch (error) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 return null; | 454 return null; |
| 445 } | 455 } |
| 446 | 456 |
| 447 _directives[libraryUri] = | 457 _directives[libraryUri] = |
| 448 parseImportsAndExports(readTextFile(library), name: library) | 458 parseImportsAndExports(readTextFile(library), name: library) |
| 449 .map((directive) => Uri.parse(directive.uri.stringValue)) | 459 .map((directive) => Uri.parse(directive.uri.stringValue)) |
| 450 .toSet(); | 460 .toSet(); |
| 451 return _directives[libraryUri]; | 461 return _directives[libraryUri]; |
| 452 } | 462 } |
| 453 } | 463 } |
| OLD | NEW |