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

Side by Side Diff: utils/pub/io.dart

Issue 12211004: Get most pub IO tests passing on Windows. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 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
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 /// Helper functionality to make working with IO easier. 5 /// Helper functionality to make working with IO easier.
6 library io; 6 library io;
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:io'; 9 import 'dart:io';
10 import 'dart:isolate'; 10 import 'dart:isolate';
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 dir.delete(recursive: true))); 172 dir.delete(recursive: true)));
173 } 173 }
174 174
175 /// Asynchronously lists the contents of [dir], which can be a [String] 175 /// Asynchronously lists the contents of [dir], which can be a [String]
176 /// directory path or a [Directory]. If [recursive] is `true`, lists 176 /// directory path or a [Directory]. If [recursive] is `true`, lists
177 /// subdirectory contents (defaults to `false`). If [includeHiddenFiles] is 177 /// subdirectory contents (defaults to `false`). If [includeHiddenFiles] is
178 /// `true`, includes files and directories beginning with `.` (defaults to 178 /// `true`, includes files and directories beginning with `.` (defaults to
179 /// `false`). 179 /// `false`).
180 /// 180 ///
181 /// If [dir] is a string, the returned paths are guaranteed to begin with it. 181 /// If [dir] is a string, the returned paths are guaranteed to begin with it.
182 ///
183 /// Note that on Windows, only directories may be symlinked to.
nweiz 2013/02/05 03:26:14 Is this note supposed to be on createSymlink?
Bob Nystrom 2013/02/05 04:21:53 Done.
182 Future<List<String>> listDir(dir, 184 Future<List<String>> listDir(dir,
183 {bool recursive: false, bool includeHiddenFiles: false}) { 185 {bool recursive: false, bool includeHiddenFiles: false}) {
184 Future<List<String>> doList(Directory dir, Set<String> listedDirectories) { 186 Future<List<String>> doList(Directory dir, Set<String> listedDirectories) {
185 var contents = <String>[]; 187 var contents = <String>[];
186 var completer = new Completer<List<String>>(); 188 var completer = new Completer<List<String>>();
187 189
188 // Avoid recursive symlinks. 190 // Avoid recursive symlinks.
189 var resolvedPath = new File(dir.path).fullPathSync(); 191 var resolvedPath = new File(dir.path).fullPathSync();
190 if (listedDirectories.contains(resolvedPath)) { 192 if (listedDirectories.contains(resolvedPath)) {
191 return new Future.immediate([]); 193 return new Future.immediate([]);
192 } 194 }
195
193 listedDirectories = new Set<String>.from(listedDirectories); 196 listedDirectories = new Set<String>.from(listedDirectories);
194 listedDirectories.add(resolvedPath); 197 listedDirectories.add(resolvedPath);
195 198
196 log.io("Listing directory ${dir.path}."); 199 log.io("Listing directory ${dir.path}.");
197 var lister = dir.list(); 200 var lister = dir.list();
198 201
199 lister.onDone = (done) { 202 lister.onDone = (done) {
200 // TODO(rnystrom): May need to sort here if it turns out onDir and onFile 203 // TODO(rnystrom): May need to sort here if it turns out onDir and onFile
201 // aren't guaranteed to be called in a certain order. So far, they seem to . 204 // aren't guaranteed to be called in a certain order. So far, they seem to .
202 if (done) { 205 if (done) {
(...skipping 10 matching lines...) Expand all
213 } catch (_, localStackTrace) { 216 } catch (_, localStackTrace) {
214 stackTrace = localStackTrace; 217 stackTrace = localStackTrace;
215 } 218 }
216 219
217 var children = []; 220 var children = [];
218 lister.onError = (error) => completer.completeError(error, stackTrace); 221 lister.onError = (error) => completer.completeError(error, stackTrace);
219 lister.onDir = (file) { 222 lister.onDir = (file) {
220 if (!includeHiddenFiles && basename(file).startsWith('.')) return; 223 if (!includeHiddenFiles && basename(file).startsWith('.')) return;
221 file = join(dir, basename(file)); 224 file = join(dir, basename(file));
222 contents.add(file); 225 contents.add(file);
223
224 // TODO(nweiz): don't manually recurse once issue 7358 is fixed. Note that 226 // TODO(nweiz): don't manually recurse once issue 7358 is fixed. Note that
225 // once we remove the manual recursion, we'll need to explicitly filter 227 // once we remove the manual recursion, we'll need to explicitly filter
226 // out files in hidden directories. 228 // out files in hidden directories.
227 if (recursive) { 229 if (recursive) {
228 children.add(doList(new Directory(file), listedDirectories)); 230 children.add(doList(new Directory(file), listedDirectories));
229 } 231 }
230 }; 232 };
233
231 lister.onFile = (file) { 234 lister.onFile = (file) {
232 if (!includeHiddenFiles && basename(file).startsWith('.')) return; 235 if (!includeHiddenFiles && basename(file).startsWith('.')) return;
233 contents.add(join(dir, basename(file))); 236 contents.add(join(dir, basename(file)));
234 }; 237 };
235 238
236 return completer.future.then((contents) { 239 return completer.future.then((contents) {
237 return Future.wait(children).then((childContents) { 240 return Future.wait(children).then((childContents) {
238 contents.addAll(flatten(childContents)); 241 contents.addAll(flatten(childContents));
239 return contents; 242 return contents;
240 }); 243 });
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 Directory _getDirectory(entry) { 932 Directory _getDirectory(entry) {
930 if (entry is Directory) return entry; 933 if (entry is Directory) return entry;
931 return new Directory(entry); 934 return new Directory(entry);
932 } 935 }
933 936
934 /// Gets a [Uri] for [uri], which can either already be one, or be a [String]. 937 /// Gets a [Uri] for [uri], which can either already be one, or be a [String].
935 Uri _getUri(uri) { 938 Uri _getUri(uri) {
936 if (uri is Uri) return uri; 939 if (uri is Uri) return uri;
937 return Uri.parse(uri); 940 return Uri.parse(uri);
938 } 941 }
OLDNEW
« no previous file with comments | « no previous file | utils/tests/pub/command_line_config.dart » ('j') | utils/tests/pub/command_line_config.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698