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

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

Issue 429173002: Don't cache path Context based on cwd, as cwd involves a system-call to compute. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months 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 | « pkg/path/CHANGELOG.md ('k') | pkg/path/lib/src/context.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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 /// var context = new path.Context(style: Style.windows); 42 /// var context = new path.Context(style: Style.windows);
43 /// context.join("directory", "file.txt"); 43 /// context.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 import 'src/context.dart'; 49 import 'src/context.dart';
50 import 'src/style.dart'; 50 import 'src/style.dart';
51 51
52 export 'src/context.dart'; 52 export 'src/context.dart' hide createInternal;
53 export 'src/path_exception.dart'; 53 export 'src/path_exception.dart';
54 export 'src/style.dart'; 54 export 'src/style.dart';
55 55
56 /// A default context for manipulating POSIX paths. 56 /// A default context for manipulating POSIX paths.
57 final posix = new Context(style: Style.posix); 57 final posix = new Context(style: Style.posix);
58 58
59 /// A default context for manipulating Windows paths. 59 /// A default context for manipulating Windows paths.
60 final windows = new Context(style: Style.windows); 60 final windows = new Context(style: Style.windows);
61 61
62 /// A default context for manipulating URLs. 62 /// A default context for manipulating URLs.
63 final url = new Context(style: Style.url); 63 final url = new Context(style: Style.url);
64 64
65 /// The result of [Uri.base] last time the current working directory was
66 /// calculated.
67 ///
68 /// This is used to invalidate [_cachedContext] when the working directory has
69 /// changed since the last time a function was called.
70 Uri _lastBaseUri;
71
72 /// An internal context for the current OS so we can provide a straight 65 /// An internal context for the current OS so we can provide a straight
73 /// functional interface and not require users to create one. 66 /// functional interface and not require users to create one.
74 Context get _context { 67 final Context _context = createInternal();
75 if (_cachedContext != null && Uri.base == _lastBaseUri) return _cachedContext;
76 _lastBaseUri = Uri.base;
77 _cachedContext = new Context();
78 return _cachedContext;
79 }
80 Context _cachedContext;
81 68
82 /// Returns the [Style] of the current context. 69 /// Returns the [Style] of the current context.
83 /// 70 ///
84 /// This is the style that all top-level path functions will use. 71 /// This is the style that all top-level path functions will use.
85 Style get style => _context.style; 72 Style get style => _context.style;
86 73
87 /// Gets the path to the current working directory. 74 /// Gets the path to the current working directory.
88 /// 75 ///
89 /// In the browser, this means the current URL, without the last file segment. 76 /// In the browser, this means the current URL, without the last file segment.
90 String get current { 77 String get current {
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 /// 369 ///
383 /// // Windows at "C:\root\path" 370 /// // Windows at "C:\root\path"
384 /// path.prettyUri('file:///C:/root/path/a/b.dart'); // -> r'a\b.dart' 371 /// path.prettyUri('file:///C:/root/path/a/b.dart'); // -> r'a\b.dart'
385 /// path.prettyUri('http://dartlang.org/'); // -> 'http://dartlang.org' 372 /// path.prettyUri('http://dartlang.org/'); // -> 'http://dartlang.org'
386 /// 373 ///
387 /// // URL at "http://dartlang.org/root/path" 374 /// // URL at "http://dartlang.org/root/path"
388 /// path.prettyUri('http://dartlang.org/root/path/a/b.dart'); 375 /// path.prettyUri('http://dartlang.org/root/path/a/b.dart');
389 /// // -> r'a/b.dart' 376 /// // -> r'a/b.dart'
390 /// path.prettyUri('file:///root/path'); // -> 'file:///root/path' 377 /// path.prettyUri('file:///root/path'); // -> 'file:///root/path'
391 String prettyUri(uri) => _context.prettyUri(uri); 378 String prettyUri(uri) => _context.prettyUri(uri);
OLDNEW
« no previous file with comments | « pkg/path/CHANGELOG.md ('k') | pkg/path/lib/src/context.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698