Index: lib/src/io.dart |
diff --git a/lib/src/io.dart b/lib/src/io.dart |
index 92259fd5ae34c57933b145c9d785d1cb39332505..fbd4608d71e44c15ec45988c01d326a9d83af4aa 100644 |
--- a/lib/src/io.dart |
+++ b/lib/src/io.dart |
@@ -493,11 +493,16 @@ final bool runningFromTest = Platform.script.path.endsWith('.test.snapshot'); |
final bool runningFromSdk = |
!runningFromTest && Platform.script.path.endsWith('.snapshot'); |
+/// A regular expression to match the script path of a pub script running from |
+/// source in the Dart repo. |
+final _dartRepoRegExp = new RegExp( |
+ r"/third_party/pkg_tested/pub/(bin/pub.dart|test/.*_test.dart)$"); |
Bob Nystrom
2015/05/29 20:15:55
".dart" -> "\.dart".
nweiz
2015/05/29 20:33:32
Done.
|
+ |
/// Whether pub is running from source in the Dart repo. |
/// |
/// This can happen when building Observatory, for example. |
final bool runningFromDartRepo = |
- Platform.script.path.endsWith('/third_party/pkg_tested/pub/bin/pub.dart'); |
+ Platform.script.path.contains(_dartRepoRegExp); |
/// Resolves [target] relative to the path to pub's `asset` directory. |
String assetPath(String target) => runningFromSdk |
@@ -546,9 +551,11 @@ final String dartRepoRoot = (() { |
throw new StateError("Not running from source in the Dart repo."); |
} |
- // In the Dart repo, the script is in "third_party/pkg_tested/pub/bin". |
- return path.dirname(path.dirname(path.dirname(path.dirname(path.dirname( |
- path.fromUri(Platform.script)))))); |
+ // Get the URL of the repo root in a way that works when either both running |
+ // as a test or as a pub executable. |
+ var url = Platform.script.replace( |
+ path: Platform.script.path.replaceAll(_dartRepoRegExp, '')); |
+ return path.fromUri(url); |
})(); |
/// A line-by-line stream of standard input. |