Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(630)

Unified Diff: utils/pub/io.dart

Issue 11553005: Move path-manipulation code from io.dart into path.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes + relative fix Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | utils/pub/path.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/pub/io.dart
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 0ecc7b2498942789d4dbbabfa8db420dec1a3bdb..e6ea0718e57b93191cbb70ee1e158ddd2b891d08 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -30,45 +30,24 @@ final NEWLINE_PATTERN = new RegExp("\r\n?|\n\r?");
* platform-specific path separators. Parts can be [String], [Directory], or
* [File] objects.
*/
-String join(part1, [part2, part3, part4]) {
- part1 = _getPath(part1);
- if (part2 != null) part2 = _getPath(part2);
- if (part3 != null) part3 = _getPath(part3);
- if (part4 != null) part4 = _getPath(part4);
-
- // TODO(nweiz): Don't use "?part" in path.dart.
- if (part4 != null) {
- return path.join(part1, part2, part3, part4);
- } else if (part3 != null) {
- return path.join(part1, part2, part3);
- } else if (part2 != null) {
- return path.join(part1, part2);
- } else {
- return path.join(part1);
- }
+String join(part1, [part2, part3, part4, part5, part6, part7, part8]) {
+ var parts = [part1, part2, part3, part4, part5, part6, part7, part8]
+ .map((part) => part == null ? null : _getPath(part));
+
+ return path.join(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5],
+ parts[6], parts[7]);
}
/// Gets the basename, the file name without any leading directory path, for
/// [file], which can either be a [String], [File], or [Directory].
String basename(file) => path.basename(_getPath(file));
-// TODO(nweiz): move this into path.dart.
/// Gets the the leading directory path for [file], which can either be a
/// [String], [File], or [Directory].
-String dirname(file) {
- file = _sanitizePath(file);
-
- int lastSlash = file.lastIndexOf('/', file.length);
- if (lastSlash == -1) {
- return '.';
- } else {
- return file.substring(0, lastSlash);
- }
-}
+String dirname(file) => path.dirname(_getPath(file));
-// TODO(nweiz): move this into path.dart.
-/// Splits [path] into its individual components.
-List<String> splitPath(path) => _sanitizePath(path).split('/');
+/// Splits [entry] into its individual components.
+List<String> splitPath(entry) => path.split(_getPath(entry));
/// Returns whether or not [entry] is nested somewhere within [dir]. This just
/// performs a path comparison; it doesn't look at the actual filesystem.
@@ -77,10 +56,8 @@ bool isBeneath(entry, dir) {
return !path.isAbsolute(relative) && splitPath(relative)[0] != '..';
}
-// TODO(nweiz): move this into path.dart.
/// Returns the path to [target] from [base].
-String relativeTo(target, base) =>
- new path.Builder(root: base).relative(target);
+String relativeTo(target, base) => path.relative(target, from: base);
/**
* Asynchronously determines if [path], which can be a [String] file path, a
@@ -1067,40 +1044,6 @@ String _getPath(entry) {
throw 'Entry $entry is not a supported type.';
}
-/// Gets the path string for [entry], normalizing backslashes to forward slashes
-/// on Windows.
-String _sanitizePath(entry) {
- entry = _getPath(entry);
- if (Platform.operatingSystem != 'windows') return entry;
-
- var split = _splitAbsolute(entry);
- if (split.first == null) return split.last.replaceAll('\\', '/');
-
- // For absolute Windows paths, we don't want the prefix (either "\\" or e.g.
- // "C:\") to look like a normal path component, so we ensure that it only
- // contains backslashes.
- return '${split.first.replaceAll('/', '\\')}'
- '${split.last.replaceAll('\\', '/')}';
-}
-
-// TODO(nweiz): Add something like this to path.dart.
-/// Splits [entry] into two components: the absolute path prefix and the
-/// remaining path. Takes into account Windows' quirky absolute paths syntaxes.
-Pair<String, String> _splitAbsolute(entry) {
- var path = _getPath(entry);
-
- if (Platform.operatingSystem != 'windows') {
- return !path.startsWith('/') ? new Pair(null, path)
- : new Pair('/', path.substring(1));
- }
-
- // An absolute path on Windows is either UNC (two leading backslashes),
- // or a drive letter followed by a colon and a slash.
- var match = new RegExp(r'^(\\\\|[a-zA-Z]:[/\\])').firstMatch(path);
- return match == null ? new Pair(null, path)
- : new Pair(match.group(0), path.substring(match.end));
-}
-
/**
* Gets a [Directory] for [entry], which can either already be one, or be a
* [String].
« no previous file with comments | « no previous file | utils/pub/path.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698