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

Side by Side Diff: runtime/bin/directory.dart

Issue 10392023: Change dart:io to use Future for one-shot operations. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Adding stable test binaries Created 8 years, 7 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 | « lib/dartdoc/dartdoc.dart ('k') | runtime/bin/directory_impl.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 /** 5 /**
6 * [Directory] objects are used for working with directories. 6 * [Directory] objects are used for working with directories.
7 */ 7 */
8 interface Directory default _Directory { 8 interface Directory default _Directory {
9 /** 9 /**
10 * Creates a directory object. The path is either a full path or 10 * Creates a directory object. The path is either a full path or
11 * relative to the directory in which the Dart VM was 11 * relative to the directory in which the Dart VM was
12 * started. 12 * started.
13 */ 13 */
14 Directory(String path); 14 Directory(String path);
15 15
16 /** 16 /**
17 * Creates a directory object pointing to the current working 17 * Creates a directory object pointing to the current working
18 * directory. 18 * directory.
19 */ 19 */
20 Directory.current(); 20 Directory.current();
21 21
22 /** 22 /**
23 * Check whether a directory with this name already exists. If the 23 * Check whether a directory with this name already exists. Returns
24 * operation completes successfully the callback is called with the 24 * a [:Future<bool>:] that completes with the result.
25 * result. Otherwise [onError] is called.
26 */ 25 */
27 void exists(void callback(bool exists)); 26 Future<bool> exists();
28 27
29 /** 28 /**
30 * Synchronously check whether a directory with this name already exists. 29 * Synchronously check whether a directory with this name already exists.
31 */ 30 */
32 bool existsSync(); 31 bool existsSync();
33 32
34 /** 33 /**
35 * Creates the directory with this name if it does not exist. If 34 * Creates the directory with this name if it does not
36 * the directory is successfully created the callback is 35 * exist. Returns a [:Future<Directory>:] that completes with this
37 * called. Otherwise [onError] is called. 36 * directory once it has been created.
38 */ 37 */
39 void create(void callback()); 38 Future<Directory> create();
40 39
41 /** 40 /**
42 * Synchronously creates the directory with this name if it does not exist. 41 * Synchronously creates the directory with this name if it does not exist.
43 * Throws an exception if the directory already exists. 42 * Throws an exception if the directory already exists.
44 */ 43 */
45 void createSync(); 44 void createSync();
46 45
47 /** 46 /**
48 * Creates a temporary directory with a name based on the current 47 * Creates a temporary directory with a name based on the current
49 * path. This name and path is used as a template, and additional 48 * path. This name and path is used as a template, and additional
50 * characters are appended to it by the call to make a unique 49 * characters are appended to it by the call to make a unique
51 * directory name. If the path is the empty string, a default 50 * directory name. If the path is the empty string, a default
52 * system temp directory and name are used for the template. 51 * system temp directory and name are used for the template.
53 * 52 *
54 * The path is modified to be the path of the new directory. After 53 * Returns a [:Future<Directory>:] that completes with the newly
55 * the new directory is created, and the path modified, the callback 54 * created temporary directory.
56 * will be called. The error handler is called if the temporary
57 * directory cannot be created.
58 */ 55 */
59 void createTemp(void callback()); 56 Future<Directory> createTemp();
60 57
61 /** 58 /**
62 * Synchronously creates a temporary directory with a name based on the 59 * Synchronously creates a temporary directory with a name based on the
63 * current path. This name and path is used as a template, and additional 60 * current path. This name and path is used as a template, and additional
64 * characters are appended to it by the call to make a unique directory name. 61 * characters are appended to it by the call to make a unique directory name.
65 * If the path is the empty string, a default system temp directory and name 62 * If the path is the empty string, a default system temp directory and name
66 * are used for the template. 63 * are used for the template. Returns the newly created temporary directory.
67 * The path is modified to be the path of the new directory.
68 */ 64 */
69 void createTempSync(); 65 Directory createTempSync();
70 66
71 /** 67 /**
72 * Deletes the directory with this name. The directory must be 68 * Deletes the directory with this name. The directory must be
73 * empty. If the operation completes successfully the callback is 69 * empty. Returns a [:Future<Directory>:] that completes with
74 * called. Otherwise [onError] is called. 70 * this directory when the deletion is done.
75 */ 71 */
76 void delete(void callback()); 72 Future<Directory> delete();
77
78 /**
79 * Deletes this directory and all sub-directories and files in the
80 * directories. If the operation completes successfully the callback
81 * is called. Otherwise [onError] is called.
82 */
83 void deleteRecursively(void callback());
84 73
85 /** 74 /**
86 * Synchronously deletes the directory with this name. The directory 75 * Synchronously deletes the directory with this name. The directory
87 * must be empty. Throws an exception if the directory cannot be 76 * must be empty. Throws an exception if the directory cannot be
88 * deleted. 77 * deleted.
89 */ 78 */
90 void deleteSync(); 79 void deleteSync();
91 80
92 /** 81 /**
82 * Deletes this directory and all sub-directories and files in the
83 * directories. Returns a [:Future<Directory>:] that completes with
84 * this directory when the deletion is done.
85 */
86 Future<Directory> deleteRecursively();
87
88 /**
93 * Synchronously deletes this directory and all sub-directories and 89 * Synchronously deletes this directory and all sub-directories and
94 * files in the directories. Throws an exception if the directory 90 * files in the directories. Throws an exception if the directory
95 * cannot be deleted. 91 * cannot be deleted.
96 */ 92 */
97 void deleteRecursivelySync(); 93 void deleteRecursivelySync();
98 94
99 /** 95 /**
100 * List the sub-directories and files of this 96 * List the sub-directories and files of this
101 * [Directory]. Optionally recurse into sub-directories. For each 97 * [Directory]. Optionally recurse into sub-directories. Returns a
102 * file and directory, the file or directory handler is called. When 98 * [DirectoryLister] object representing the active listing
103 * all directories have been listed the done handler is called. If 99 * operation. Handlers for files and directories should be
104 * the listing operation is recursive, the error handler is called 100 * registered on this DirectoryLister object.
105 * if a subdirectory cannot be opened for listing.
106 */ 101 */
107 // TODO(ager): Should we change this to return an event emitting 102 DirectoryLister list([bool recursive]);
108 // DirectoryLister object. Alternatively, pass in one callback that
109 // gets called with an indication of whether what it is called with
110 // is a file, a directory or an indication that the listing is over.
111 void list([bool recursive]);
112
113 /**
114 * Sets the directory handler that is called for all directories
115 * during listing operations. The directory handler is called with
116 * the full path of the directory.
117 */
118 void set onDir(void onDir(String dir));
119
120 /**
121 * Sets the handler that is called for all files during listing
122 * operations. The file handler is called with the full path of the
123 * file.
124 */
125 void set onFile(void onFile(String file));
126
127 /**
128 * Set the handler that is called when a directory listing is
129 * done. The handler is called with an indication of whether or not
130 * the listing operation completed.
131 */
132 void set onDone(void onDone(bool completed));
133
134 /**
135 * Sets the handler that is called if there is an error while listing
136 * or creating directories.
137 */
138 void set onError(void onError(e));
139 103
140 /** 104 /**
141 * Gets the path of this directory. 105 * Gets the path of this directory.
142 */ 106 */
143 final String path; 107 final String path;
144 } 108 }
145 109
146 110
111 /**
112 * A [DirectoryLister] represents an actively running listing operation.
113 *
114 * For each file and directory, the file or directory handler is
115 * called. When all directories have been listed the done handler is
116 * called. If the listing operation is recursive, the error handler is
117 * called if a subdirectory cannot be opened for listing.
118 */
119 interface DirectoryLister default _DirectoryLister {
120 /**
121 * Sets the directory handler that is called for all directories
122 * during listing. The directory handler is called with the full
123 * path of the directory.
124 */
125 void set onDir(void onDir(String dir));
126
127 /**
128 * Sets the handler that is called for all files during listing. The
129 * file handler is called with the full path of the file.
130 */
131 void set onFile(void onFile(String file));
132
133 /**
134 * Set the handler that is called when a listing is done. The
135 * handler is called with an indication of whether or not the
136 * listing operation completed.
137 */
138 void set onDone(void onDone(bool completed));
139
140 /**
141 * Sets the handler that is called if there is an error while
142 * listing directories.
143 */
144 void set onError(void onError(e));
145 }
146
147
147 class DirectoryIOException implements Exception { 148 class DirectoryIOException implements Exception {
148 const DirectoryIOException([String this.message = "", 149 const DirectoryIOException([String this.message = "",
149 String this.path = "", 150 String this.path = "",
150 OSError this.osError = null]); 151 OSError this.osError = null]);
151 String toString() { 152 String toString() {
152 StringBuffer sb = new StringBuffer(); 153 StringBuffer sb = new StringBuffer();
153 sb.add("DirectoryIOException"); 154 sb.add("DirectoryIOException");
154 if (!message.isEmpty()) { 155 if (!message.isEmpty()) {
155 sb.add(": $message"); 156 sb.add(": $message");
156 if (path != null) { 157 if (path != null) {
157 sb.add(", path = $path"); 158 sb.add(", path = $path");
158 } 159 }
159 if (osError != null) { 160 if (osError != null) {
160 sb.add(" ($osError)"); 161 sb.add(" ($osError)");
161 } 162 }
162 } else if (osError != null) { 163 } else if (osError != null) {
163 sb.add(": $osError"); 164 sb.add(": $osError");
164 if (path != null) { 165 if (path != null) {
165 sb.add(", path = $path"); 166 sb.add(", path = $path");
166 } 167 }
167 } 168 }
168 return sb.toString(); 169 return sb.toString();
169 } 170 }
170 final String message; 171 final String message;
171 final String path; 172 final String path;
172 final OSError osError; 173 final OSError osError;
173 } 174 }
OLDNEW
« no previous file with comments | « lib/dartdoc/dartdoc.dart ('k') | runtime/bin/directory_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698