Index: sdk/lib/_internal/pub/lib/src/validator/executable.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/validator/executable.dart b/sdk/lib/_internal/pub/lib/src/validator/executable.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..509a1902a5f21734b874412264bc34909efda804 |
--- /dev/null |
+++ b/sdk/lib/_internal/pub/lib/src/validator/executable.dart |
@@ -0,0 +1,36 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library pub.validator.compiled_dartdoc; |
+ |
+import 'dart:async'; |
+ |
+import 'package:path/path.dart' as p; |
+ |
+import '../entrypoint.dart'; |
+import '../io.dart'; |
+import '../utils.dart'; |
+import '../validator.dart'; |
+ |
+/// Validates that a package's pubspec doesn't contain executables that |
+/// reference non-existent scripts. |
+class ExecutableValidator extends Validator { |
+ ExecutableValidator(Entrypoint entrypoint) |
+ : super(entrypoint); |
+ |
+ Future validate() async { |
+ // TODO(rnystrom): This can print false positives since a script may be |
+ // produced by a transformer. Do something better. |
+ var binFiles = entrypoint.root.listFiles(beneath: "bin", recursive: false) |
+ .map((path) => p.relative(path, from: entrypoint.root.dir)) |
+ .toList(); |
+ |
+ entrypoint.root.pubspec.executables.forEach((executable, script) { |
+ if (!binFiles.contains("bin/$script.dart")) { |
nweiz
2014/09/17 22:58:27
Use p.join here. Also maybe short-circuit rather t
Bob Nystrom
2014/09/18 19:17:53
Done.
|
+ warnings.add('Your pubspec.yaml lists an executable "$executable" that ' |
+ 'points to a script "bin/$script.dart" that does not exist.'); |
nweiz
2014/09/17 22:58:27
Use p.join here as well to give native-feeling pat
Bob Nystrom
2014/09/18 19:17:53
Done.
|
+ } |
+ }); |
+ } |
+} |