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

Side by Side Diff: pkg/watcher/lib/src/directory_watcher.dart

Issue 22999008: Handle watching a non-existent directory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library watcher.directory_watcher; 5 library watcher.directory_watcher;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:crypto/crypto.dart'; 10 import 'package:crypto/crypto.dart';
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 _ready = new Completer(); 112 _ready = new Completer();
113 } 113 }
114 114
115 /// Scans the contents of the directory once to see which files have been 115 /// Scans the contents of the directory once to see which files have been
116 /// added, removed, and modified. 116 /// added, removed, and modified.
117 void _poll() { 117 void _poll() {
118 _filesToProcess.clear(); 118 _filesToProcess.clear();
119 _polledFiles.clear(); 119 _polledFiles.clear();
120 120
121 endListing() {
122 assert(_state != _WatchState.UNSUBSCRIBED);
123 _listSubscription = null;
124
125 // Null tells the queue consumer that we're done listing.
126 _filesToProcess.add(null);
127 }
128
121 var stream = new Directory(directory).list(recursive: true); 129 var stream = new Directory(directory).list(recursive: true);
122 _listSubscription = stream.listen((entity) { 130 _listSubscription = stream.listen((entity) {
123 assert(_state != _WatchState.UNSUBSCRIBED); 131 assert(_state != _WatchState.UNSUBSCRIBED);
124 132
125 if (entity is! File) return; 133 if (entity is! File) return;
126 _filesToProcess.add(entity.path); 134 _filesToProcess.add(entity.path);
127 }, onDone: () { 135 }, onError: (error) {
128 assert(_state != _WatchState.UNSUBSCRIBED); 136 // If an error occurred during the listing, it usually means the
nweiz 2013/08/14 19:43:11 Check if the error is the error we expect from the
Bob Nystrom 2013/08/16 21:40:19 Done. Instead of printing it, I pipe the error to
129 _listSubscription = null; 137 // directory doesn't exist. We end the listing normally, which has the
130 138 // desired effect of marking all files that were in the directory as
131 // Null tells the queue consumer that we're done listing. 139 // being removed.
132 _filesToProcess.add(null); 140 endListing();
133 }); 141 }, onDone: endListing);
134 } 142 }
135 143
136 /// Processes [file] to determine if it has been modified since the last 144 /// Processes [file] to determine if it has been modified since the last
137 /// time it was scanned. 145 /// time it was scanned.
138 Future _processFile(String file) { 146 Future _processFile(String file) {
139 assert(_state != _WatchState.UNSUBSCRIBED); 147 assert(_state != _WatchState.UNSUBSCRIBED);
140 148
141 // `null` is the sentinel which means the directory listing is complete. 149 // `null` is the sentinel which means the directory listing is complete.
142 if (file == null) return _completePoll(); 150 if (file == null) return _completePoll();
143 151
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 266
259 class _FileStatus { 267 class _FileStatus {
260 /// The last time the file was modified. 268 /// The last time the file was modified.
261 DateTime modified; 269 DateTime modified;
262 270
263 /// The SHA-1 hash of the contents of the file. 271 /// The SHA-1 hash of the contents of the file.
264 List<int> hash; 272 List<int> hash;
265 273
266 _FileStatus(this.modified, this.hash); 274 _FileStatus(this.modified, this.hash);
267 } 275 }
OLDNEW
« no previous file with comments | « no previous file | pkg/watcher/test/directory_watcher_test.dart » ('j') | pkg/watcher/test/utils.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698