Index: sdk/lib/_internal/pub/lib/src/io.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart |
index 7f8c9ec088523d54586b963e7da172130c15ab0b..f3b0f1c4ccfe5bc47a0f2b44960eb4ae3ba04811 100644 |
--- a/sdk/lib/_internal/pub/lib/src/io.dart |
+++ b/sdk/lib/_internal/pub/lib/src/io.dart |
@@ -486,8 +486,24 @@ String get repoRoot { |
if (runningFromSdk) { |
throw new StateError("Can't get the repo root from the SDK."); |
} |
- return path.normalize(path.join( |
- path.dirname(libraryPath('pub.io')), '..', '..', '..', '..', '..', '..')); |
+ |
+ // Get the path to the directory containing this very file. |
+ var libDir = path.dirname(libraryPath('pub.io')); |
+ |
+ // TODO(rnystrom): Remove this when #104 is fixed. |
+ // If we are running from the async/await compiled build directory, walk out |
+ // out of that. It will be something like: |
+ // |
+ // <repo>/<build>/<config>/pub_async/lib/src |
+ if (libDir.contains('pub_async')) { |
+ return path.normalize(path.join(libDir, '..', '..', '..', '..', '..')); |
+ } |
+ |
+ // Otherwise, assume we're running directly from the source location in the |
+ // repo: |
+ // |
+ // <repo>/sdk/lib/_internal/pub/lib/src |
+ return path.normalize(path.join(libDir, '..', '..', '..', '..', '..', '..')); |
} |
/// A line-by-line stream of standard input. |