[dartdev] Don't delete project with `dart build`
Closes: https://github.com/dart-lang/sdk/issues/54144
Change-Id: I23f423d273427d4a2d5fd34053dfbe06b5917fda
Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-linux-release-arm64-try,pkg-linux-release-try,pkg-mac-release-arm64-try,pkg-win-release-arm64-try,pkg-mac-release-try,pkg-win-release-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/384060
Auto-Submit: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
diff --git a/pkg/dartdev/lib/src/commands/build.dart b/pkg/dartdev/lib/src/commands/build.dart
index a7784e9..a5f1509 100644
--- a/pkg/dartdev/lib/src/commands/build.dart
+++ b/pkg/dartdev/lib/src/commands/build.dart
@@ -96,6 +96,11 @@
args.option(outputOptionName)?.normalizeCanonicalizePath().makeFolder() ??
sourceUri.toFilePath().removeDotDart().makeFolder(),
);
+ if (await File.fromUri(outputUri.resolve('pubspec.yaml')).exists()) {
+ stderr.writeln("'dart build' refuses to delete your project.");
+ stderr.writeln('Requested output directory: ${outputUri.toFilePath()}');
+ return 128;
+ }
final format = Kind.values.byName(args.option(formatOptionName)!);
final outputExeUri = outputUri.resolve(
diff --git a/pkg/dartdev/test/native_assets/build_test.dart b/pkg/dartdev/test/native_assets/build_test.dart
index e2ac0ce..566d45c 100644
--- a/pkg/dartdev/test/native_assets/build_test.dart
+++ b/pkg/dartdev/test/native_assets/build_test.dart
@@ -189,6 +189,28 @@
);
});
});
+
+ test('do not delete project', () async {
+ await nativeAssetsTest('dart_app', (dartAppUri) async {
+ final result = await runDart(
+ arguments: [
+ '--enable-experiment=native-assets',
+ if (fromDartdevSource)
+ Platform.script.resolve('../../bin/dartdev.dart').toFilePath(),
+ 'build',
+ 'bin/dart_app.dart',
+ '.'
+ ],
+ workingDirectory: dartAppUri,
+ logger: logger,
+ expectExitCodeZero: false,
+ );
+ expect(
+ result.exitCode,
+ isNot(0), // The dartdev error code.
+ );
+ });
+ });
}
Future<void> _withTempDir(Future<void> Function(Uri tempUri) fun) async {