OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Helper functionality to make working with IO easier. | 6 * Helper functionality to make working with IO easier. |
7 */ | 7 */ |
8 library io; | 8 library io; |
9 | 9 |
10 import 'dart:io'; | 10 import 'dart:io'; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 } | 67 } |
68 | 68 |
69 // TODO(nweiz): move this into path.dart. | 69 // TODO(nweiz): move this into path.dart. |
70 /// Splits [path] into its individual components. | 70 /// Splits [path] into its individual components. |
71 List<String> splitPath(path) => _sanitizePath(path).split('/'); | 71 List<String> splitPath(path) => _sanitizePath(path).split('/'); |
72 | 72 |
73 /// Returns whether or not [entry] is nested somewhere within [dir]. This just | 73 /// Returns whether or not [entry] is nested somewhere within [dir]. This just |
74 /// performs a path comparison; it doesn't look at the actual filesystem. | 74 /// performs a path comparison; it doesn't look at the actual filesystem. |
75 bool isBeneath(entry, dir) { | 75 bool isBeneath(entry, dir) { |
76 var relative = relativeTo(entry, dir); | 76 var relative = relativeTo(entry, dir); |
77 return !path.isAbsolute(relative) && !relative.startsWith('..'); | 77 return !path.isAbsolute(relative) && splitPath(relative)[0] != '..'; |
78 } | 78 } |
79 | 79 |
80 // TODO(nweiz): move this into path.dart. | 80 // TODO(nweiz): move this into path.dart. |
81 /// Returns the path to [target] from [base]. | 81 /// Returns the path to [target] from [base]. |
82 String relativeTo(target, base) => | 82 String relativeTo(target, base) => |
83 new path.Builder(root: base).relative(target); | 83 new path.Builder(root: base).relative(target); |
84 | 84 |
85 /** | 85 /** |
86 * Asynchronously determines if [path], which can be a [String] file path, a | 86 * Asynchronously determines if [path], which can be a [String] file path, a |
87 * [File], or a [Directory] exists on the file system. Returns a [Future] that | 87 * [File], or a [Directory] exists on the file system. Returns a [Future] that |
(...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 return new Directory(entry); | 1110 return new Directory(entry); |
1111 } | 1111 } |
1112 | 1112 |
1113 /** | 1113 /** |
1114 * Gets a [Uri] for [uri], which can either already be one, or be a [String]. | 1114 * Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
1115 */ | 1115 */ |
1116 Uri _getUri(uri) { | 1116 Uri _getUri(uri) { |
1117 if (uri is Uri) return uri; | 1117 if (uri is Uri) return uri; |
1118 return new Uri.fromString(uri); | 1118 return new Uri.fromString(uri); |
1119 } | 1119 } |
OLD | NEW |