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

Side by Side Diff: pkg/path/lib/path.dart

Issue 58903005: Have pkg/path track the current working directory if it changes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/path/test/io_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 /// A comprehensive, cross-platform path manipulation library. 5 /// A comprehensive, cross-platform path manipulation library.
6 /// 6 ///
7 /// ## Installing ## 7 /// ## Installing ##
8 /// 8 ///
9 /// Use [pub][] to install this package. Add the following to your 9 /// Use [pub][] to install this package. Add the following to your
10 /// `pubspec.yaml` file. 10 /// `pubspec.yaml` file.
(...skipping 28 matching lines...) Expand all
39 /// underlying platform that the program is running on, you can create a 39 /// underlying platform that the program is running on, you can create a
40 /// [Builder] and give it an explicit [Style]: 40 /// [Builder] and give it an explicit [Style]:
41 /// 41 ///
42 /// var builder = new path.Builder(style: Style.windows); 42 /// var builder = new path.Builder(style: Style.windows);
43 /// builder.join("directory", "file.txt"); 43 /// builder.join("directory", "file.txt");
44 /// 44 ///
45 /// This will join "directory" and "file.txt" using the Windows path separator, 45 /// This will join "directory" and "file.txt" using the Windows path separator,
46 /// even when the program is run on a POSIX machine. 46 /// even when the program is run on a POSIX machine.
47 library path; 47 library path;
48 48
49 /// An internal builder for the current OS so we can provide a straight
50 /// functional interface and not require users to create one.
51 final _builder = new Builder();
52
53 /// A default builder for manipulating POSIX paths. 49 /// A default builder for manipulating POSIX paths.
54 final posix = new Builder(style: Style.posix); 50 final posix = new Builder(style: Style.posix);
55 51
56 /// A default builder for manipulating Windows paths. 52 /// A default builder for manipulating Windows paths.
57 final windows = new Builder(style: Style.windows); 53 final windows = new Builder(style: Style.windows);
58 54
59 /// A default builder for manipulating URLs. 55 /// A default builder for manipulating URLs.
60 final url = new Builder(style: Style.url); 56 final url = new Builder(style: Style.url);
61 57
62 /// Inserts [length] elements in front of the [list] and fills them with the 58 /// Inserts [length] elements in front of the [list] and fills them with the
63 /// [fillValue]. 59 /// [fillValue].
64 void _growListFront(List list, int length, fillValue) => 60 void _growListFront(List list, int length, fillValue) =>
65 list.insertAll(0, new List.filled(length, fillValue)); 61 list.insertAll(0, new List.filled(length, fillValue));
66 62
63 /// The result of [Uri.base] last time the current working directory was
64 /// calculated.
65 ///
66 /// This is used to invalidate [_cachedBuilder] when the working directory has
67 /// changed since the last time a function was called.
68 Uri _lastBaseUri;
69
70 /// An internal builder for the current OS so we can provide a straight
71 /// functional interface and not require users to create one.
72 Builder get _builder {
73 if (_cachedBuilder != null && Uri.base == _lastBaseUri) return _cachedBuilder;
74 _lastBaseUri = Uri.base;
75 _cachedBuilder = new Builder();
76 return _cachedBuilder;
77 }
78 Builder _cachedBuilder;
67 79
68 /// Gets the path to the current working directory. 80 /// Gets the path to the current working directory.
69 /// 81 ///
70 /// In the browser, this means the current URL, without the last file segment. 82 /// In the browser, this means the current URL, without the last file segment.
71 String get current { 83 String get current {
72 var uri = Uri.base; 84 var uri = Uri.base;
73 if (Style.platform == Style.url) { 85 if (Style.platform == Style.url) {
74 return uri.resolve('.').toString(); 86 return uri.resolve('.').toString();
75 } else { 87 } else {
76 var path = uri.toFilePath(); 88 var path = uri.toFilePath();
(...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 // doesn't count. 1191 // doesn't count.
1180 if (lastDot <= 0) return [file, '']; 1192 if (lastDot <= 0) return [file, ''];
1181 1193
1182 return [file.substring(0, lastDot), file.substring(lastDot)]; 1194 return [file.substring(0, lastDot), file.substring(lastDot)];
1183 } 1195 }
1184 1196
1185 _ParsedPath clone() => new _ParsedPath( 1197 _ParsedPath clone() => new _ParsedPath(
1186 style, root, isRootRelative, 1198 style, root, isRootRelative,
1187 new List.from(parts), new List.from(separators)); 1199 new List.from(parts), new List.from(separators));
1188 } 1200 }
OLDNEW
« no previous file with comments | « no previous file | pkg/path/test/io_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698