Skip to content

Commit 5aeab29

Browse files
authored
[native_assets_builder] Handle non-existing package names (#844)
With `dart/flutter run dont_exist`, dartdev or flutter_tools might pass a package name to `runPackageName` that is not in the package graph.
1 parent ec9e2b2 commit 5aeab29

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

pkgs/native_assets_builder/lib/src/build_runner/build_planner.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ class PackageGraph {
115115
graphs.stronglyConnectedComponents(vertices, neighborsOf);
116116

117117
PackageGraph subGraph(String rootPackageName) {
118+
if (!vertices.contains(rootPackageName)) {
119+
// Some downstream tooling requested a package that doesn't exist.
120+
// This will likely lead to an error, so avoid building native assets.
121+
return PackageGraph({});
122+
}
118123
final subgraphVertices = [
119124
...graphs.transitiveClosure(vertices, neighborsOf)[rootPackageName]!,
120125
rootPackageName,

pkgs/native_assets_builder/test/build_runner/build_planner_test.dart

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,29 +76,32 @@ void main() async {
7676
});
7777
});
7878

79-
test('runPackageName', () async {
80-
await inTempDir((tempUri) async {
81-
await copyTestProjects(targetUri: tempUri);
82-
final nativeAddUri = tempUri.resolve('native_add/');
79+
for (final existing in [true, false]) {
80+
final runPackageName = existing ? 'ffigen' : 'does_not_exist';
81+
test('runPackageName $runPackageName', () async {
82+
await inTempDir((tempUri) async {
83+
await copyTestProjects(targetUri: tempUri);
84+
final nativeAddUri = tempUri.resolve('native_add/');
8385

84-
// First, run `pub get`, we need pub to resolve our dependencies.
85-
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
86+
// First, run `pub get`, we need pub to resolve our dependencies.
87+
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
8688

87-
final packageLayout =
88-
await PackageLayout.fromRootPackageRoot(nativeAddUri);
89-
final packagesWithNativeAssets =
90-
await packageLayout.packagesWithNativeAssets;
91-
final nativeAssetsBuildPlanner =
92-
await NativeAssetsBuildPlanner.fromRootPackageRoot(
93-
rootPackageRoot: nativeAddUri,
94-
packagesWithNativeAssets: packagesWithNativeAssets,
95-
dartExecutable: Uri.file(Platform.resolvedExecutable),
96-
logger: logger,
97-
);
98-
final (buildPlan, _) = nativeAssetsBuildPlanner.plan(
99-
runPackageName: 'ffigen',
100-
);
101-
expect(buildPlan.length, 0);
89+
final packageLayout =
90+
await PackageLayout.fromRootPackageRoot(nativeAddUri);
91+
final packagesWithNativeAssets =
92+
await packageLayout.packagesWithNativeAssets;
93+
final nativeAssetsBuildPlanner =
94+
await NativeAssetsBuildPlanner.fromRootPackageRoot(
95+
rootPackageRoot: nativeAddUri,
96+
packagesWithNativeAssets: packagesWithNativeAssets,
97+
dartExecutable: Uri.file(Platform.resolvedExecutable),
98+
logger: logger,
99+
);
100+
final (buildPlan, _) = nativeAssetsBuildPlanner.plan(
101+
runPackageName: runPackageName,
102+
);
103+
expect(buildPlan.length, 0);
104+
});
102105
});
103-
});
106+
}
104107
}

0 commit comments

Comments
 (0)