Revert "Use the frontend server to compile pub executables (#2968)" (#3006)
This reverts commit e01e3a41a88e1cfeb0c1c61a61effb02979c3ebc.
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 847cb96..6782f9d 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -70,5 +70,5 @@
cat "$_TESTS_FILE.${{ matrix.shard }}"
shell: bash
- name: Run tests
- run: dart test --use-data-isolate-strategy --preset travis $(cat $_TESTS_FILE.${{ matrix.shard }})
+ run: dart test --preset travis $(cat $_TESTS_FILE.${{ matrix.shard }})
shell: bash
diff --git a/lib/src/dart.dart b/lib/src/dart.dart
index 7b1f55a..f3a9a80 100644
--- a/lib/src/dart.dart
+++ b/lib/src/dart.dart
@@ -18,8 +18,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/error/error.dart';
import 'package:cli_util/cli_util.dart';
-import 'package:frontend_server_client/frontend_server_client.dart';
-import 'package:meta/meta.dart';
import 'package:path/path.dart' as p;
import 'exceptions.dart';
@@ -40,6 +38,41 @@
});
}
+/// Snapshots the Dart executable at [executablePath] to a snapshot at
+/// [snapshotPath].
+///
+/// If [packageConfigFile] is passed, it's used to resolve `package:` URIs in
+/// the executable. Otherwise, a `packages/` directory or a package spec is
+/// inferred from the executable's location.
+///
+/// If [name] is passed, it is used to describe the executable in logs and error
+/// messages.
+Future snapshot(
+ String executablePath,
+ String snapshotPath, {
+ String packageConfigFile,
+ String name,
+}) async {
+ final args = [
+ if (packageConfigFile != null) '--packages=$packageConfigFile',
+ '--snapshot=$snapshotPath',
+ p.toUri(executablePath).toString()
+ ];
+
+ final result = await runProcess(Platform.executable, args);
+ final highlightedName = name = log.bold(name ?? executablePath.toString());
+ if (result.success) {
+ log.message('Precompiled $highlightedName.');
+ } else {
+ // Don't leave partial results.
+ deleteEntry(snapshotPath);
+
+ throw ApplicationException(
+ log.yellow('Failed to precompile $highlightedName:\n') +
+ result.stderr.join('\n'));
+ }
+}
+
class AnalysisContextManager {
/// The map from a context root directory to to the context.
final Map<String, AnalysisContext> _contexts = {};
@@ -148,52 +181,3 @@
@override
String toString() => errors.join('\n');
}
-
-/// Precompiles the Dart executable at [executablePath] to a kernel file at
-/// [outputPath].
-///
-/// This file is also cached at [incrementalDillOutputPath] which is used to
-/// initialize the compiler on future runs.
-///
-/// The [packageConfigPath] should point at the package config file to be used
-/// for `package:` uri resolution.
-///
-/// The [name] is used to describe the executable in logs and error messages.
-Future<void> precompile({
- @required String executablePath,
- @required String incrementalDillOutputPath,
- @required String name,
- @required String outputPath,
- @required String packageConfigPath,
-}) async {
- ensureDir(p.dirname(outputPath));
- ensureDir(p.dirname(incrementalDillOutputPath));
- const platformDill = 'lib/_internal/vm_platform_strong.dill';
- final sdkRoot = p.relative(p.dirname(p.dirname(Platform.resolvedExecutable)));
- var client = await FrontendServerClient.start(
- executablePath,
- incrementalDillOutputPath,
- platformDill,
- sdkRoot: sdkRoot,
- packagesJson: packageConfigPath,
- printIncrementalDependencies: false,
- );
- try {
- var result = await client.compile();
-
- final highlightedName = log.bold(name);
- if (result?.errorCount == 0) {
- log.message('Precompiled $highlightedName.');
- await File(incrementalDillOutputPath).copy(outputPath);
- } else {
- // Don't leave partial results.
- deleteEntry(outputPath);
-
- throw ApplicationException(
- log.yellow('Failed to precompile $highlightedName:\n') +
- (result?.compilerOutputLines?.join('\n') ?? ''));
- }
- } finally {
- client.kill();
- }
-}
diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index c1d34e6..ec66457 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -171,10 +171,6 @@
/// The path to the directory containing dependency executable snapshots.
String get _snapshotPath => p.join(cachePath, 'bin');
- /// The path to the directory containing previous dill files for incremental
- /// builds.
- String get _incrementalDillsPath => p.join(cachePath, 'incremental');
-
/// Loads the entrypoint from a package at [rootDir].
Entrypoint(String rootDir, this.cache)
: root = Package.load(null, rootDir, cache.sources),
@@ -338,7 +334,7 @@
ensureDir(_snapshotPath);
}
return waitAndPrintErrors(executables.map((executable) {
- var dir = p.dirname(pathOfExecutable(executable));
+ var dir = p.dirname(snapshotPathOfExecutable(executable));
cleanDir(dir);
return _precompileExecutable(executable);
}));
@@ -348,18 +344,16 @@
/// Precompiles executable .dart file at [path] to a snapshot.
Future<void> precompileExecutable(Executable executable) async {
return await log.progress('Precompiling executable', () async {
- ensureDir(p.dirname(pathOfExecutable(executable)));
+ ensureDir(p.dirname(snapshotPathOfExecutable(executable)));
return waitAndPrintErrors([_precompileExecutable(executable)]);
});
}
Future<void> _precompileExecutable(Executable executable) async {
final package = executable.package;
- await dart.precompile(
- executablePath: resolveExecutable(executable),
- outputPath: pathOfExecutable(executable),
- incrementalDillOutputPath: incrementalDillPathOfExecutable(executable),
- packageConfigPath: packageConfigFile,
+ await dart.snapshot(
+ resolveExecutable(executable), snapshotPathOfExecutable(executable),
+ packageConfigFile: packageConfigFile,
name:
'$package:${p.basenameWithoutExtension(executable.relativePath)}');
}
@@ -371,7 +365,7 @@
/// different sdk.
///
/// [path] must be relative.
- String pathOfExecutable(Executable executable) {
+ String snapshotPathOfExecutable(Executable executable) {
assert(p.isRelative(executable.relativePath));
final versionSuffix = sdk.version;
return isGlobal
@@ -381,15 +375,6 @@
'${p.basename(executable.relativePath)}-$versionSuffix.snapshot');
}
- String incrementalDillPathOfExecutable(Executable executable) {
- assert(p.isRelative(executable.relativePath));
- return isGlobal
- ? p.join(_incrementalDillsPath,
- '${p.basename(executable.relativePath)}.incremental.dill')
- : p.join(_incrementalDillsPath, executable.package,
- '${p.basename(executable.relativePath)}.incremental.dill');
- }
-
/// The absolute path of [executable] resolved relative to [this].
String resolveExecutable(Executable executable) {
return p.join(
diff --git a/lib/src/executable.dart b/lib/src/executable.dart
index 5bd12b6..1883d23 100644
--- a/lib/src/executable.dart
+++ b/lib/src/executable.dart
@@ -72,7 +72,7 @@
entrypoint.migrateCache();
- var snapshotPath = entrypoint.pathOfExecutable(executable);
+ var snapshotPath = entrypoint.snapshotPathOfExecutable(executable);
// Don't compile snapshots for mutable packages, since their code may
// change later on.
@@ -327,7 +327,7 @@
if (!allowSnapshot || entrypoint.packageGraph.isPackageMutable(package)) {
return p.relative(path, from: root);
} else {
- final snapshotPath = entrypoint.pathOfExecutable(executable);
+ final snapshotPath = entrypoint.snapshotPathOfExecutable(executable);
if (!fileExists(snapshotPath)) {
await warningsOnlyUnlessTerminal(
() => entrypoint.precompileExecutable(executable),
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index a5a5e5b..8c6f78c 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -590,7 +590,8 @@
deleteEntry(file);
_createBinStub(
entrypoint.root, p.basenameWithoutExtension(file), binStubScript,
- overwrite: true, snapshot: entrypoint.pathOfExecutable(executable));
+ overwrite: true,
+ snapshot: entrypoint.snapshotPathOfExecutable(executable));
}
}
}
@@ -640,7 +641,7 @@
executable,
script,
overwrite: overwriteBinStubs,
- snapshot: entrypoint.pathOfExecutable(
+ snapshot: entrypoint.snapshotPathOfExecutable(
exec.Executable.adaptProgramName(package.name, script),
),
);
diff --git a/pubspec.yaml b/pubspec.yaml
index 5902f9d..222a5a5 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -12,7 +12,6 @@
cli_util: ^0.3.0
collection: ^1.15.0
crypto: ^3.0.1
- frontend_server_client: ^2.0.0
http: ^0.13.3
http_multi_server: ^3.0.1
meta: ^1.3.0