| OLD | NEW |
| 1 library pub.entrypoint; | 1 library pub.entrypoint; |
| 2 import 'dart:async'; | 2 import 'dart:async'; |
| 3 import 'package:path/path.dart' as path; | 3 import 'package:path/path.dart' as path; |
| 4 import 'package:barback/barback.dart'; | 4 import 'package:barback/barback.dart'; |
| 5 import 'barback/asset_environment.dart'; | 5 import 'barback/asset_environment.dart'; |
| 6 import 'io.dart'; | 6 import 'io.dart'; |
| 7 import 'lock_file.dart'; | 7 import 'lock_file.dart'; |
| 8 import 'log.dart' as log; | 8 import 'log.dart' as log; |
| 9 import 'package.dart'; | 9 import 'package.dart'; |
| 10 import 'package_graph.dart'; | 10 import 'package_graph.dart'; |
| 11 import 'sdk.dart' as sdk; | 11 import 'sdk.dart' as sdk; |
| 12 import 'solver/version_solver.dart'; | 12 import 'solver/version_solver.dart'; |
| 13 import 'source/cached.dart'; | 13 import 'source/cached.dart'; |
| 14 import 'system_cache.dart'; | 14 import 'system_cache.dart'; |
| 15 import 'utils.dart'; | 15 import 'utils.dart'; |
| 16 class Entrypoint { | 16 class Entrypoint { |
| 17 final Package root; | 17 final Package root; |
| 18 final SystemCache cache; | 18 final SystemCache cache; |
| 19 final bool _packageSymlinks; | 19 final bool _packageSymlinks; |
| 20 LockFile _lockFile; | 20 LockFile _lockFile; |
| 21 PackageGraph _packageGraph; | 21 PackageGraph _packageGraph; |
| 22 Entrypoint(String rootDir, SystemCache cache, {bool packageSymlinks: true}) | 22 Entrypoint(String rootDir, SystemCache cache, {bool packageSymlinks: true}) |
| 23 : root = new Package.load(null, rootDir, cache.sources), | 23 : root = new Package.load(null, rootDir, cache.sources), |
| 24 cache = cache, | 24 cache = cache, |
| 25 _packageSymlinks = packageSymlinks; | 25 _packageSymlinks = packageSymlinks; |
| 26 Entrypoint.inMemory(this.root, this._lockFile, this.cache) | 26 Entrypoint.inMemory(this.root, this._lockFile, this.cache) |
| 27 : _packageSymlinks = false; | 27 : _packageSymlinks = false; |
| 28 String get packagesDir => path.join(root.dir, 'packages'); | 28 String get packagesDir => root.path('packages'); |
| 29 bool get lockFileExists => _lockFile != null || entryExists(lockFilePath); | 29 bool get lockFileExists => _lockFile != null || entryExists(lockFilePath); |
| 30 LockFile get lockFile { | 30 LockFile get lockFile { |
| 31 if (_lockFile != null) return _lockFile; | 31 if (_lockFile != null) return _lockFile; |
| 32 if (!lockFileExists) { | 32 if (!lockFileExists) { |
| 33 _lockFile = new LockFile.empty(); | 33 _lockFile = new LockFile.empty(); |
| 34 } else { | 34 } else { |
| 35 _lockFile = new LockFile.load(lockFilePath, cache.sources); | 35 _lockFile = new LockFile.load(lockFilePath, cache.sources); |
| 36 } | 36 } |
| 37 return _lockFile; | 37 return _lockFile; |
| 38 } | 38 } |
| 39 String get pubspecPath => path.join(root.dir, 'pubspec.yaml'); | 39 String get pubspecPath => root.path('pubspec.yaml'); |
| 40 String get lockFilePath => path.join(root.dir, 'pubspec.lock'); | 40 String get lockFilePath => root.path('pubspec.lock'); |
| 41 Future acquireDependencies(SolveType type, {List<String> useLatest, | 41 Future acquireDependencies(SolveType type, {List<String> useLatest, |
| 42 bool dryRun: false}) { | 42 bool dryRun: false}) { |
| 43 final completer0 = new Completer(); | 43 final completer0 = new Completer(); |
| 44 scheduleMicrotask(() { | 44 scheduleMicrotask(() { |
| 45 try { | 45 try { |
| 46 resolveVersions( | 46 resolveVersions( |
| 47 type, | 47 type, |
| 48 cache.sources, | 48 cache.sources, |
| 49 root, | 49 root, |
| 50 lockFile: lockFile, | 50 lockFile: lockFile, |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 changed); | 147 changed); |
| 148 })).map(((package) => package.name)).toSet(); | 148 })).map(((package) => package.name)).toSet(); |
| 149 join1() { | 149 join1() { |
| 150 log.progress("Precompiling dependencies", (() { | 150 log.progress("Precompiling dependencies", (() { |
| 151 final completer0 = new Completer(); | 151 final completer0 = new Completer(); |
| 152 scheduleMicrotask(() { | 152 scheduleMicrotask(() { |
| 153 try { | 153 try { |
| 154 var packagesToLoad = unionAll( | 154 var packagesToLoad = unionAll( |
| 155 dependenciesToPrecompile.map( | 155 dependenciesToPrecompile.map( |
| 156 graph.transitiveDependencies)).map(((package) => p
ackage.name)).toSet(); | 156 graph.transitiveDependencies)).map(((package) => p
ackage.name)).toSet(); |
| 157 AssetEnvironment.create( | 157 var it0 = dependenciesToPrecompile.iterator; |
| 158 this, | 158 break0(x4) { |
| 159 BarbackMode.DEBUG, | 159 AssetEnvironment.create( |
| 160 packages: packagesToLoad, | 160 this, |
| 161 useDart2JS: false).then((x0) { | 161 BarbackMode.DEBUG, |
| 162 try { | 162 packages: packagesToLoad, |
| 163 var environment = x0; | 163 useDart2JS: false).then((x0) { |
| 164 environment.barback.errors.listen(((_) {})); | 164 try { |
| 165 var it0 = dependenciesToPrecompile.iterator; | 165 var environment = x0; |
| 166 break0(x4) { | 166 environment.barback.errors.listen(((_) {})); |
| 167 environment.barback.getAllAssets().then((x1) { | 167 environment.barback.getAllAssets().then((x1) { |
| 168 try { | 168 try { |
| 169 var assets = x1; | 169 var assets = x1; |
| 170 waitAndPrintErrors(assets.map(((asset) { | 170 waitAndPrintErrors(assets.map(((asset) { |
| 171 final completer0 = new Completer(); | 171 final completer0 = new Completer(); |
| 172 scheduleMicrotask(() { | 172 scheduleMicrotask(() { |
| 173 try { | 173 try { |
| 174 join0() { | 174 join0() { |
| 175 var destPath = | 175 var destPath = |
| 176 path.join(depsDir, asset.id.package,
path.fromUri(asset.id.path)); | 176 path.join(depsDir, asset.id.package,
path.fromUri(asset.id.path)); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 } | 212 } |
| 213 }, onError: (e3) { | 213 }, onError: (e3) { |
| 214 completer0.completeError(e3); | 214 completer0.completeError(e3); |
| 215 }); | 215 }); |
| 216 } catch (e1) { | 216 } catch (e1) { |
| 217 completer0.completeError(e1); | 217 completer0.completeError(e1); |
| 218 } | 218 } |
| 219 }, onError: (e4) { | 219 }, onError: (e4) { |
| 220 completer0.completeError(e4); | 220 completer0.completeError(e4); |
| 221 }); | 221 }); |
| 222 } catch (e0) { |
| 223 completer0.completeError(e0); |
| 222 } | 224 } |
| 223 continue0(x5) { | 225 }, onError: (e5) { |
| 224 if (it0.moveNext()) { | 226 completer0.completeError(e5); |
| 225 Future.wait([]).then((x3) { | 227 }); |
| 226 var package = it0.current; | 228 } |
| 227 cleanDir(path.join(depsDir, package)); | 229 continue0(x5) { |
| 228 continue0(null); | 230 if (it0.moveNext()) { |
| 229 }); | 231 Future.wait([]).then((x3) { |
| 230 } else { | 232 var package = it0.current; |
| 231 break0(null); | 233 deleteEntry(path.join(depsDir, package)); |
| 232 } | 234 continue0(null); |
| 233 } | 235 }); |
| 234 continue0(null); | 236 } else { |
| 235 } catch (e0) { | 237 break0(null); |
| 236 completer0.completeError(e0); | |
| 237 } | 238 } |
| 238 }, onError: (e5) { | 239 } |
| 239 completer0.completeError(e5); | 240 continue0(null); |
| 240 }); | |
| 241 } catch (e6) { | 241 } catch (e6) { |
| 242 completer0.completeError(e6); | 242 completer0.completeError(e6); |
| 243 } | 243 } |
| 244 }); | 244 }); |
| 245 return completer0.future; | 245 return completer0.future; |
| 246 })).catchError(((error) { | 246 })).catchError(((error) { |
| 247 for (var package in dependenciesToPrecompile) { | 247 for (var package in dependenciesToPrecompile) { |
| 248 deleteEntry(path.join(depsDir, package)); | 248 deleteEntry(path.join(depsDir, package)); |
| 249 } | 249 } |
| 250 throw error; | 250 throw error; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 dir, | 323 dir, |
| 324 executableIds: executables[package]); | 324 executableIds: executables[package]); |
| 325 })); | 325 })); |
| 326 }); | 326 }); |
| 327 }); | 327 }); |
| 328 }); | 328 }); |
| 329 } | 329 } |
| 330 List<AssetId> _executablesForPackage(PackageGraph graph, String packageName, | 330 List<AssetId> _executablesForPackage(PackageGraph graph, String packageName, |
| 331 Set<String> changed) { | 331 Set<String> changed) { |
| 332 var package = graph.packages[packageName]; | 332 var package = graph.packages[packageName]; |
| 333 var binDir = path.join(package.dir, 'bin'); | 333 var binDir = package.path('bin'); |
| 334 if (!dirExists(binDir)) return []; | 334 if (!dirExists(binDir)) return []; |
| 335 if (graph.isPackageMutable(packageName)) return []; | 335 if (graph.isPackageMutable(packageName)) return []; |
| 336 var executables = package.executableIds; | 336 var executables = package.executableIds; |
| 337 if (changed == null) return executables; | 337 if (changed == null) return executables; |
| 338 if (graph.transitiveDependencies( | 338 if (graph.transitiveDependencies( |
| 339 packageName).any((package) => changed.contains(package.name))) { | 339 packageName).any((package) => changed.contains(package.name))) { |
| 340 return executables; | 340 return executables; |
| 341 } | 341 } |
| 342 var executablesExist = executables.every( | 342 var executablesExist = executables.every( |
| 343 (executable) => | 343 (executable) => |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 }); | 436 }); |
| 437 }); | 437 }); |
| 438 } | 438 } |
| 439 }).then((graph) { | 439 }).then((graph) { |
| 440 _packageGraph = graph; | 440 _packageGraph = graph; |
| 441 return graph; | 441 return graph; |
| 442 }); | 442 }); |
| 443 } | 443 } |
| 444 void _saveLockFile(List<PackageId> packageIds) { | 444 void _saveLockFile(List<PackageId> packageIds) { |
| 445 _lockFile = new LockFile(packageIds); | 445 _lockFile = new LockFile(packageIds); |
| 446 var lockFilePath = path.join(root.dir, 'pubspec.lock'); | 446 var lockFilePath = root.path('pubspec.lock'); |
| 447 writeTextFile(lockFilePath, _lockFile.serialize(root.dir, cache.sources)); | 447 writeTextFile(lockFilePath, _lockFile.serialize(root.dir, cache.sources)); |
| 448 } | 448 } |
| 449 void _linkSelf() { | 449 void _linkSelf() { |
| 450 var linkPath = path.join(packagesDir, root.name); | 450 var linkPath = path.join(packagesDir, root.name); |
| 451 if (entryExists(linkPath)) return; | 451 if (entryExists(linkPath)) return; |
| 452 ensureDir(packagesDir); | 452 ensureDir(packagesDir); |
| 453 createPackageSymlink( | 453 createPackageSymlink( |
| 454 root.name, | 454 root.name, |
| 455 root.dir, | 455 root.dir, |
| 456 linkPath, | 456 linkPath, |
| 457 isSelfLink: true, | 457 isSelfLink: true, |
| 458 relative: true); | 458 relative: true); |
| 459 } | 459 } |
| 460 void _linkOrDeleteSecondaryPackageDirs() { | 460 void _linkOrDeleteSecondaryPackageDirs() { |
| 461 var binDir = path.join(root.dir, 'bin'); | 461 var binDir = root.path('bin'); |
| 462 if (dirExists(binDir)) _linkOrDeleteSecondaryPackageDir(binDir); | 462 if (dirExists(binDir)) _linkOrDeleteSecondaryPackageDir(binDir); |
| 463 for (var dir in ['benchmark', 'example', 'test', 'tool', 'web']) { | 463 for (var dir in ['benchmark', 'example', 'test', 'tool', 'web']) { |
| 464 _linkOrDeleteSecondaryPackageDirsRecursively(path.join(root.dir, dir)); | 464 _linkOrDeleteSecondaryPackageDirsRecursively(root.path(dir)); |
| 465 } | 465 } |
| 466 } | 466 } |
| 467 void _linkOrDeleteSecondaryPackageDirsRecursively(String dir) { | 467 void _linkOrDeleteSecondaryPackageDirsRecursively(String dir) { |
| 468 if (!dirExists(dir)) return; | 468 if (!dirExists(dir)) return; |
| 469 _linkOrDeleteSecondaryPackageDir(dir); | 469 _linkOrDeleteSecondaryPackageDir(dir); |
| 470 _listDirWithoutPackages( | 470 _listDirWithoutPackages( |
| 471 dir).where(dirExists).forEach(_linkOrDeleteSecondaryPackageDir); | 471 dir).where(dirExists).forEach(_linkOrDeleteSecondaryPackageDir); |
| 472 } | 472 } |
| 473 List<String> _listDirWithoutPackages(dir) { | 473 List<String> _listDirWithoutPackages(dir) { |
| 474 return flatten(listDir(dir).map((file) { | 474 return flatten(listDir(dir).map((file) { |
| 475 if (path.basename(file) == 'packages') return []; | 475 if (path.basename(file) == 'packages') return []; |
| 476 if (!dirExists(file)) return []; | 476 if (!dirExists(file)) return []; |
| 477 var fileAndSubfiles = [file]; | 477 var fileAndSubfiles = [file]; |
| 478 fileAndSubfiles.addAll(_listDirWithoutPackages(file)); | 478 fileAndSubfiles.addAll(_listDirWithoutPackages(file)); |
| 479 return fileAndSubfiles; | 479 return fileAndSubfiles; |
| 480 })); | 480 })); |
| 481 } | 481 } |
| 482 void _linkOrDeleteSecondaryPackageDir(String dir) { | 482 void _linkOrDeleteSecondaryPackageDir(String dir) { |
| 483 var symlink = path.join(dir, 'packages'); | 483 var symlink = path.join(dir, 'packages'); |
| 484 if (entryExists(symlink)) deleteEntry(symlink); | 484 if (entryExists(symlink)) deleteEntry(symlink); |
| 485 if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true); | 485 if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true); |
| 486 } | 486 } |
| 487 } | 487 } |
| OLD | NEW |