OLD | NEW |
1 library pub.package_graph; | 1 library pub.package_graph; |
2 import 'barback/transformer_cache.dart'; | 2 import 'barback/transformer_cache.dart'; |
3 import 'entrypoint.dart'; | 3 import 'entrypoint.dart'; |
4 import 'lock_file.dart'; | 4 import 'lock_file.dart'; |
5 import 'package.dart'; | 5 import 'package.dart'; |
| 6 import 'source/cached.dart'; |
| 7 import 'source/hosted.dart'; |
6 import 'utils.dart'; | 8 import 'utils.dart'; |
7 class PackageGraph { | 9 class PackageGraph { |
8 final Entrypoint entrypoint; | 10 final Entrypoint entrypoint; |
9 final LockFile lockFile; | 11 final LockFile lockFile; |
10 final Map<String, Package> packages; | 12 final Map<String, Package> packages; |
11 Map<String, Set<Package>> _transitiveDependencies; | 13 Map<String, Set<Package>> _transitiveDependencies; |
12 TransformerCache _transformerCache; | 14 TransformerCache _transformerCache; |
13 PackageGraph(this.entrypoint, this.lockFile, this.packages); | 15 PackageGraph(this.entrypoint, this.lockFile, this.packages); |
14 TransformerCache loadTransformerCache() { | 16 TransformerCache loadTransformerCache() { |
15 if (_transformerCache == null) { | 17 if (_transformerCache == null) { |
(...skipping 12 matching lines...) Expand all Loading... |
28 var closure = transitiveClosure( | 30 var closure = transitiveClosure( |
29 mapMap( | 31 mapMap( |
30 packages, | 32 packages, |
31 value: (_, package) => package.dependencies.map((dep) => dep.name)
)); | 33 value: (_, package) => package.dependencies.map((dep) => dep.name)
)); |
32 _transitiveDependencies = mapMap( | 34 _transitiveDependencies = mapMap( |
33 closure, | 35 closure, |
34 value: (_, names) => names.map((name) => packages[name]).toSet()); | 36 value: (_, names) => names.map((name) => packages[name]).toSet()); |
35 } | 37 } |
36 return _transitiveDependencies[package]; | 38 return _transitiveDependencies[package]; |
37 } | 39 } |
| 40 bool isPackageMutable(String package) { |
| 41 var id = lockFile.packages[package]; |
| 42 if (id == null) return true; |
| 43 var source = entrypoint.cache.sources[id.source]; |
| 44 if (source is! CachedSource) return true; |
| 45 return transitiveDependencies(package).any((dep) { |
| 46 var depId = lockFile.packages[dep.name]; |
| 47 if (depId == null) return true; |
| 48 return entrypoint.cache.sources[depId.source] is! CachedSource; |
| 49 }); |
| 50 } |
38 } | 51 } |
OLD | NEW |