Index: sdk/lib/_internal/pub/lib/src/utils.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/utils.dart b/sdk/lib/_internal/pub/lib/src/utils.dart |
index 80a8ec373af46ddca4e943e0420af88635861faa..2f705f9e192fcd441ca4c91145537e20cef2b6a2 100644 |
--- a/sdk/lib/_internal/pub/lib/src/utils.dart |
+++ b/sdk/lib/_internal/pub/lib/src/utils.dart |
@@ -12,6 +12,8 @@ import 'dart:isolate'; |
import 'dart:mirrors'; |
import 'dart:uri'; |
+import 'package:pathos/path.dart' as path; |
+ |
/// A pair of values. |
class Pair<E, F> { |
E first; |
@@ -384,6 +386,32 @@ String fileUriToPath(Uri uri) { |
} |
} |
+/// Converts a local path string to a `file:` [Uri]. |
+Uri pathToFileUri(String pathString) { |
+ pathString = path.absolute(pathString); |
+ if (Platform.operatingSystem != 'windows') { |
+ return Uri.parse('file://$pathString'); |
+ } else if (path.rootPrefix(pathString).startsWith('\\\\')) { |
+ // Network paths become "file://hostname/path/to/file". |
+ return Uri.parse('file:${pathString.replaceAll("\\", "/")}'); |
+ } else { |
+ // Drive-letter paths become "file:///C:/path/to/file". |
+ return Uri.parse('file:///${pathString.replaceAll("\\", "/")}'); |
+ } |
+} |
+ |
+/// Gets a "special" string (ANSI escape or Unicode). On Windows, returns |
+/// something else since those aren't supported. |
+String getSpecial(String color, [String onWindows = '']) { |
+ // No ANSI escapes on windows or when running tests. |
+ if (runningAsTest || Platform.operatingSystem == 'windows') return onWindows; |
+ return color; |
+} |
+ |
+/// Whether pub is running as a subprocess in an integration test. |
+bool get runningAsTest => |
+ Platform.environment.containsKey('_PUB_TESTING'); |
+ |
/// Wraps [fn] to guard against several different kinds of stack overflow |
/// exceptions: |
/// |
@@ -416,6 +444,8 @@ class ApplicationException implements Exception { |
final String message; |
ApplicationException(this.message); |
+ |
+ String toString() => message; |
} |
/// Throw a [ApplicationException] with [message]. |