| OLD | NEW |
| 1 library pub.executable; | 1 library pub.executable; |
| 2 import 'dart:async'; | 2 import 'dart:async'; |
| 3 import 'dart:io'; | 3 import 'dart:io'; |
| 4 import 'package:barback/barback.dart'; | 4 import 'package:barback/barback.dart'; |
| 5 import 'package:path/path.dart' as p; | 5 import 'package:path/path.dart' as p; |
| 6 import 'package:stack_trace/stack_trace.dart'; | 6 import 'package:stack_trace/stack_trace.dart'; |
| 7 import 'barback/asset_environment.dart'; | 7 import 'barback/asset_environment.dart'; |
| 8 import 'entrypoint.dart'; | 8 import 'entrypoint.dart'; |
| 9 import 'exit_codes.dart' as exit_codes; | 9 import 'exit_codes.dart' as exit_codes; |
| 10 import 'io.dart'; | 10 import 'io.dart'; |
| 11 import 'log.dart' as log; | 11 import 'log.dart' as log; |
| 12 import 'utils.dart'; | 12 import 'utils.dart'; |
| 13 Future<int> runExecutable(Entrypoint entrypoint, String package, | 13 Future<int> runExecutable(Entrypoint entrypoint, String package, |
| 14 String executable, Iterable<String> args, {bool isGlobal: false, | 14 String executable, Iterable<String> args, {bool isGlobal: false, |
| 15 BarbackMode mode}) { | 15 BarbackMode mode}) { |
| 16 final completer0 = new Completer(); | 16 final completer0 = new Completer(); |
| 17 scheduleMicrotask(() { | 17 scheduleMicrotask(() { |
| 18 try { | 18 try { |
| 19 join0() { | 19 join0() { |
| 20 join1() { | 20 join1() { |
| 21 join2() { | 21 join2() { |
| 22 var localSnapshotPath = | |
| 23 p.join(".pub", "bin", package, "${executable}.dart.snapshot"); | |
| 24 join3() { | 22 join3() { |
| 25 var rootDir = "bin"; | 23 var localSnapshotPath = |
| 26 var parts = p.split(executable); | 24 p.join(".pub", "bin", package, "${executable}.dart.snapshot"); |
| 27 join4() { | 25 join4() { |
| 28 AssetEnvironment.create( | 26 var rootDir = "bin"; |
| 29 entrypoint, | 27 var parts = p.split(executable); |
| 30 mode, | 28 join5() { |
| 31 useDart2JS: false).then((x0) { | 29 var assetPath = "${p.url.joinAll(p.split(executable))}.dart"; |
| 32 try { | 30 var id = new AssetId(package, assetPath); |
| 33 var environment = x0; | 31 AssetEnvironment.create( |
| 34 environment.barback.errors.listen(((error) { | 32 entrypoint, |
| 35 log.error(log.red("Build error:\n$error")); | 33 mode, |
| 36 })); | 34 useDart2JS: false, |
| 37 var server; | 35 entrypoints: [id]).then((x0) { |
| 38 join5() { | 36 try { |
| 39 var assetPath = | 37 var environment = x0; |
| 40 "${p.url.joinAll(p.split(executable))}.dart"; | 38 environment.barback.errors.listen(((error) { |
| 41 var id = new AssetId(server.package, assetPath); | 39 log.error(log.red("Build error:\n$error")); |
| 42 completer0.complete( | 40 })); |
| 43 environment.barback.getAssetById(id).then(((_) { | 41 var server; |
| 44 final completer0 = new Completer(); | 42 join6() { |
| 45 scheduleMicrotask(() { | 43 completer0.complete( |
| 44 environment.barback.getAssetById(id).then(((_) { |
| 45 final completer0 = new Completer(); |
| 46 scheduleMicrotask(() { |
| 47 try { |
| 48 var vmArgs = []; |
| 49 vmArgs.add("--checked"); |
| 50 var relativePath = |
| 51 p.url.relative(assetPath, from: p.url.joinAll(
p.split(server.rootDirectory))); |
| 52 vmArgs.add( |
| 53 server.url.resolve(relativePath).toString()); |
| 54 vmArgs.addAll(args); |
| 55 Process.start( |
| 56 Platform.executable, |
| 57 vmArgs).then((x0) { |
| 58 try { |
| 59 var process = x0; |
| 60 process.stderr.listen(stderr.add); |
| 61 process.stdout.listen(stdout.add); |
| 62 stdin.listen(process.stdin.add); |
| 63 completer0.complete(process.exitCode); |
| 64 } catch (e0) { |
| 65 completer0.completeError(e0); |
| 66 } |
| 67 }, onError: (e1) { |
| 68 completer0.completeError(e1); |
| 69 }); |
| 70 } catch (e2) { |
| 71 completer0.completeError(e2); |
| 72 } |
| 73 }); |
| 74 return completer0.future; |
| 75 })).catchError(((error, stackTrace) { |
| 76 if (error is! AssetNotFoundException) throw error; |
| 77 var message = |
| 78 "Could not find ${log.bold(executable + ".dart")}"
; |
| 79 if (package != entrypoint.root.name) { |
| 80 message += |
| 81 " in package ${log.bold(server.package)}"; |
| 82 } |
| 83 log.error("$message."); |
| 84 log.fine(new Chain.forTrace(stackTrace)); |
| 85 return exit_codes.NO_INPUT; |
| 86 }))); |
| 87 } |
| 88 if (package == entrypoint.root.name) { |
| 89 environment.serveDirectory(rootDir).then((x1) { |
| 46 try { | 90 try { |
| 47 var vmArgs = []; | 91 server = x1; |
| 48 vmArgs.add("--checked"); | 92 join6(); |
| 49 var relativePath = | 93 } catch (e1) { |
| 50 p.url.relative(assetPath, from: p.url.joinAll(p.
split(server.rootDirectory))); | 94 completer0.completeError(e1); |
| 51 vmArgs.add( | |
| 52 server.url.resolve(relativePath).toString()); | |
| 53 vmArgs.addAll(args); | |
| 54 Process.start( | |
| 55 Platform.executable, | |
| 56 vmArgs).then((x0) { | |
| 57 try { | |
| 58 var process = x0; | |
| 59 process.stderr.listen(stderr.add); | |
| 60 process.stdout.listen(stdout.add); | |
| 61 stdin.listen(process.stdin.add); | |
| 62 completer0.complete(process.exitCode); | |
| 63 } catch (e0) { | |
| 64 completer0.completeError(e0); | |
| 65 } | |
| 66 }, onError: (e1) { | |
| 67 completer0.completeError(e1); | |
| 68 }); | |
| 69 } catch (e2) { | |
| 70 completer0.completeError(e2); | |
| 71 } | 95 } |
| 96 }, onError: (e2) { |
| 97 completer0.completeError(e2); |
| 72 }); | 98 }); |
| 73 return completer0.future; | 99 } else { |
| 74 })).catchError(((error, stackTrace) { | |
| 75 if (error is! AssetNotFoundException) throw error; | |
| 76 var message = | |
| 77 "Could not find ${log.bold(executable + ".dart")}"; | |
| 78 if (package != entrypoint.root.name) { | |
| 79 message += " in package ${log.bold(server.package)}"; | |
| 80 } | |
| 81 log.error("$message."); | |
| 82 log.fine(new Chain.forTrace(stackTrace)); | |
| 83 return exit_codes.NO_INPUT; | |
| 84 }))); | |
| 85 } | |
| 86 if (package == entrypoint.root.name) { | |
| 87 environment.serveDirectory(rootDir).then((x1) { | |
| 88 try { | |
| 89 server = x1; | |
| 90 join5(); | |
| 91 } catch (e1) { | |
| 92 completer0.completeError(e1); | |
| 93 } | |
| 94 }, onError: (e2) { | |
| 95 completer0.completeError(e2); | |
| 96 }); | |
| 97 } else { | |
| 98 var dep = | |
| 99 entrypoint.root.immediateDependencies.firstWhere( | |
| 100 ((dep) => dep.name == package), | |
| 101 orElse: (() => null)); | |
| 102 join6() { | |
| 103 environment.servePackageBinDirectory( | 100 environment.servePackageBinDirectory( |
| 104 package).then((x2) { | 101 package).then((x2) { |
| 105 try { | 102 try { |
| 106 server = x2; | 103 server = x2; |
| 107 join5(); | 104 join6(); |
| 108 } catch (e3) { | 105 } catch (e3) { |
| 109 completer0.completeError(e3); | 106 completer0.completeError(e3); |
| 110 } | 107 } |
| 111 }, onError: (e4) { | 108 }, onError: (e4) { |
| 112 completer0.completeError(e4); | 109 completer0.completeError(e4); |
| 113 }); | 110 }); |
| 114 } | 111 } |
| 115 if (dep == null) { | 112 } catch (e0) { |
| 116 join7() { | 113 completer0.completeError(e0); |
| 117 join6(); | |
| 118 } | |
| 119 if (environment.graph.packages.containsKey(package)) { | |
| 120 dataError( | |
| 121 'Package "${package}" is not an immediate dependen
cy.\n' | |
| 122 'Cannot run executables in transitive dependen
cies.'); | |
| 123 join7(); | |
| 124 } else { | |
| 125 dataError( | |
| 126 'Could not find package "${package}". Did you forg
et to ' 'add a dependency?'); | |
| 127 join7(); | |
| 128 } | |
| 129 } else { | |
| 130 join6(); | |
| 131 } | |
| 132 } | 114 } |
| 133 } catch (e0) { | 115 }, onError: (e5) { |
| 134 completer0.completeError(e0); | 116 completer0.completeError(e5); |
| 135 } | 117 }); |
| 136 }, onError: (e5) { | 118 } |
| 137 completer0.completeError(e5); | 119 if (parts.length > 1) { |
| 138 }); | 120 assert(!isGlobal && package == entrypoint.root.name); |
| 121 rootDir = parts.first; |
| 122 join5(); |
| 123 } else { |
| 124 executable = p.join("bin", executable); |
| 125 join5(); |
| 126 } |
| 139 } | 127 } |
| 140 if (parts.length > 1) { | 128 if (!isGlobal && |
| 141 assert(!isGlobal && package == entrypoint.root.name); | 129 fileExists(localSnapshotPath) && |
| 142 rootDir = parts.first; | 130 mode == BarbackMode.RELEASE) { |
| 143 join4(); | 131 completer0.complete( |
| 132 _runCachedExecutable(entrypoint, localSnapshotPath, args)); |
| 144 } else { | 133 } else { |
| 145 executable = p.join("bin", executable); | |
| 146 join4(); | 134 join4(); |
| 147 } | 135 } |
| 148 } | 136 } |
| 149 if (!isGlobal && | 137 if (p.extension(executable) == ".dart") { |
| 150 fileExists(localSnapshotPath) && | 138 executable = p.withoutExtension(executable); |
| 151 mode == BarbackMode.RELEASE) { | 139 join3(); |
| 152 completer0.complete( | |
| 153 _runCachedExecutable(entrypoint, localSnapshotPath, args)); | |
| 154 } else { | 140 } else { |
| 155 join3(); | 141 join3(); |
| 156 } | 142 } |
| 157 } | 143 } |
| 158 if (p.extension(executable) == ".dart") { | 144 if (log.verbosity == log.Verbosity.NORMAL) { |
| 159 executable = p.withoutExtension(executable); | 145 log.verbosity = log.Verbosity.WARNING; |
| 160 join2(); | 146 join2(); |
| 161 } else { | 147 } else { |
| 162 join2(); | 148 join2(); |
| 163 } | 149 } |
| 164 } | 150 } |
| 165 if (log.verbosity == log.Verbosity.NORMAL) { | 151 if (entrypoint.root.name != package && |
| 166 log.verbosity = log.Verbosity.WARNING; | 152 !entrypoint.root.immediateDependencies.any(((dep) => dep.name == pac
kage))) { |
| 167 join1(); | 153 entrypoint.loadPackageGraph().then((x3) { |
| 154 try { |
| 155 var graph = x3; |
| 156 join7() { |
| 157 join1(); |
| 158 } |
| 159 if (graph.packages.containsKey(package)) { |
| 160 dataError( |
| 161 'Package "${package}" is not an immediate dependency.\n' |
| 162 'Cannot run executables in transitive dependencies.'); |
| 163 join7(); |
| 164 } else { |
| 165 dataError( |
| 166 'Could not find package "${package}". Did you forget to add
a ' 'dependency?'); |
| 167 join7(); |
| 168 } |
| 169 } catch (e6) { |
| 170 completer0.completeError(e6); |
| 171 } |
| 172 }, onError: (e7) { |
| 173 completer0.completeError(e7); |
| 174 }); |
| 168 } else { | 175 } else { |
| 169 join1(); | 176 join1(); |
| 170 } | 177 } |
| 171 } | 178 } |
| 172 if (mode == null) { | 179 if (mode == null) { |
| 173 mode = BarbackMode.RELEASE; | 180 mode = BarbackMode.RELEASE; |
| 174 join0(); | 181 join0(); |
| 175 } else { | 182 } else { |
| 176 join0(); | 183 join0(); |
| 177 } | 184 } |
| 178 } catch (e6) { | 185 } catch (e8) { |
| 179 completer0.completeError(e6); | 186 completer0.completeError(e8); |
| 180 } | 187 } |
| 181 }); | 188 }); |
| 182 return completer0.future; | 189 return completer0.future; |
| 183 } | 190 } |
| 184 Future<int> runSnapshot(String path, Iterable<String> args, {recompile(), | 191 Future<int> runSnapshot(String path, Iterable<String> args, {recompile(), |
| 185 bool checked: false}) { | 192 bool checked: false}) { |
| 186 final completer0 = new Completer(); | 193 final completer0 = new Completer(); |
| 187 scheduleMicrotask(() { | 194 scheduleMicrotask(() { |
| 188 try { | 195 try { |
| 189 var vmArgs = [path]..addAll(args); | 196 var vmArgs = [path]..addAll(args); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 }); | 270 }); |
| 264 return completer0.future; | 271 return completer0.future; |
| 265 } | 272 } |
| 266 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath, | 273 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath, |
| 267 List<String> args) { | 274 List<String> args) { |
| 268 return runSnapshot(snapshotPath, args, checked: true, recompile: () { | 275 return runSnapshot(snapshotPath, args, checked: true, recompile: () { |
| 269 log.fine("Precompiled executable is out of date."); | 276 log.fine("Precompiled executable is out of date."); |
| 270 return entrypoint.precompileExecutables(); | 277 return entrypoint.precompileExecutables(); |
| 271 }); | 278 }); |
| 272 } | 279 } |
| OLD | NEW |