Unverified Commit f22dd30c authored by Kevin Moore's avatar Kevin Moore Committed by GitHub

tool-web: use ProcessUtil.run to invoke child processes (#126109)

All invocations are logged on verbose
Better, more detailed exceptions are thrown on errors
A lot less boilerplate
parent 0b657236
...@@ -9,7 +9,7 @@ import 'package:package_config/package_config.dart'; ...@@ -9,7 +9,7 @@ import 'package:package_config/package_config.dart';
import '../../artifacts.dart'; import '../../artifacts.dart';
import '../../base/file_system.dart'; import '../../base/file_system.dart';
import '../../base/io.dart'; import '../../base/process.dart';
import '../../build_info.dart'; import '../../build_info.dart';
import '../../cache.dart'; import '../../cache.dart';
import '../../convert.dart'; import '../../convert.dart';
...@@ -100,8 +100,7 @@ class WebEntrypointTarget extends Target { ...@@ -100,8 +100,7 @@ class WebEntrypointTarget extends Target {
pluginRegistrantEntrypoint: generatedImport, pluginRegistrantEntrypoint: generatedImport,
); );
environment.buildDir.childFile('main.dart') environment.buildDir.childFile('main.dart').writeAsStringSync(contents);
.writeAsStringSync(contents);
} }
} }
...@@ -129,16 +128,6 @@ abstract class Dart2WebTarget extends Target { ...@@ -129,16 +128,6 @@ abstract class Dart2WebTarget extends Target {
@override @override
List<Source> get outputs => const <Source>[]; List<Source> get outputs => const <Source>[];
String _collectOutput(ProcessResult result) {
final String stdout = result.stdout is List<int>
? utf8.decode(result.stdout as List<int>)
: result.stdout as String;
final String stderr = result.stderr is List<int>
? utf8.decode(result.stderr as List<int>)
: result.stderr as String;
return stdout + stderr;
}
} }
class Dart2JSTarget extends Dart2WebTarget { class Dart2JSTarget extends Dart2WebTarget {
...@@ -189,33 +178,35 @@ class Dart2JSTarget extends Dart2WebTarget { ...@@ -189,33 +178,35 @@ class Dart2JSTarget extends Dart2WebTarget {
'--cfe-only', '--cfe-only',
environment.buildDir.childFile('main.dart').path, // dartfile environment.buildDir.childFile('main.dart').path, // dartfile
]; ];
globals.printTrace('compiling dart code to kernel with command "${compilationArgs.join(' ')}"');
final ProcessUtils processUtils = ProcessUtils(
logger: environment.logger,
processManager: environment.processManager,
);
// Run the dart2js compilation in two stages, so that icon tree shaking can // Run the dart2js compilation in two stages, so that icon tree shaking can
// parse the kernel file for web builds. // parse the kernel file for web builds.
final ProcessResult kernelResult = await globals.processManager.run(compilationArgs); await processUtils.run(compilationArgs, throwOnError: true);
if (kernelResult.exitCode != 0) {
throw Exception(_collectOutput(kernelResult));
}
final File outputJSFile = environment.buildDir.childFile('main.dart.js'); final File outputJSFile = environment.buildDir.childFile('main.dart.js');
final ProcessResult javaScriptResult = await environment.processManager.run(<String>[ await processUtils.run(
throwOnError: true,
<String>[
...sharedCommandOptions, ...sharedCommandOptions,
if (buildMode == BuildMode.profile) '--no-minify', if (buildMode == BuildMode.profile) '--no-minify',
...compilerConfig.toCommandOptions(), ...compilerConfig.toCommandOptions(),
'-o', '-o',
outputJSFile.path, outputJSFile.path,
environment.buildDir.childFile('app.dill').path, // dartfile environment.buildDir.childFile('app.dill').path, // dartfile
]); ],
if (javaScriptResult.exitCode != 0) { );
throw Exception(_collectOutput(javaScriptResult)); final File dart2jsDeps = environment.buildDir.childFile('app.dill.deps');
}
final File dart2jsDeps = environment.buildDir
.childFile('app.dill.deps');
if (!dart2jsDeps.existsSync()) { if (!dart2jsDeps.existsSync()) {
environment.logger.printWarning('Warning: dart2js did not produced expected deps list at ' environment.logger.printWarning(
'${dart2jsDeps.path}'); 'Warning: dart2js did not produced expected deps list at '
'${dart2jsDeps.path}',
);
return; return;
} }
final DepfileService depFileService = environment.depFileService; final DepfileService depFileService = environment.depFileService;
...@@ -281,11 +272,16 @@ class Dart2WasmTarget extends Dart2WebTarget { ...@@ -281,11 +272,16 @@ class Dart2WasmTarget extends Dart2WebTarget {
environment.buildDir.childFile('main.dart').path, // dartfile environment.buildDir.childFile('main.dart').path, // dartfile
outputWasmFile.path, outputWasmFile.path,
]; ];
globals.printTrace('compiling dart code to wasm with command "${compilationArgs.join(' ')}"');
final ProcessResult compileResult = await globals.processManager.run(compilationArgs); final ProcessUtils processUtils = ProcessUtils(
if (compileResult.exitCode != 0) { logger: environment.logger,
throw Exception(_collectOutput(compileResult)); processManager: environment.processManager,
} );
await processUtils.run(
throwOnError: true,
compilationArgs,
);
if (compilerConfig.runWasmOpt) { if (compilerConfig.runWasmOpt) {
final String wasmOptBinary = artifacts.getArtifactPath( final String wasmOptBinary = artifacts.getArtifactPath(
Artifact.wasmOptBinary, Artifact.wasmOptBinary,
...@@ -308,10 +304,10 @@ class Dart2WasmTarget extends Dart2WebTarget { ...@@ -308,10 +304,10 @@ class Dart2WasmTarget extends Dart2WebTarget {
'-o', '-o',
optimizedOutput.path, optimizedOutput.path,
]; ];
final ProcessResult optimizeResult = await globals.processManager.run(optimizeArgs); await processUtils.run(
if (optimizeResult.exitCode != 0) { throwOnError: true,
throw Exception(_collectOutput(optimizeResult)); optimizeArgs,
} );
// Rename the .mjs file not to have the `.unopt` bit // Rename the .mjs file not to have the `.unopt` bit
final File jsRuntimeFile = environment.buildDir.childFile('main.dart.unopt.mjs'); final File jsRuntimeFile = environment.buildDir.childFile('main.dart.unopt.mjs');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment