| Index: packages/watcher/lib/src/directory_watcher/windows.dart
|
| diff --git a/packages/watcher/lib/src/directory_watcher/windows.dart b/packages/watcher/lib/src/directory_watcher/windows.dart
|
| index 08995196444599a3dfe84fa13de0e26080a42a45..67a274198e8000b5cab441cb4d03626d34bbdafe 100644
|
| --- a/packages/watcher/lib/src/directory_watcher/windows.dart
|
| +++ b/packages/watcher/lib/src/directory_watcher/windows.dart
|
| @@ -3,8 +3,6 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
| // TODO(rnystrom): Merge with mac_os version.
|
|
|
| -library watcher.directory_watcher.windows;
|
| -
|
| import 'dart:async';
|
| import 'dart:collection';
|
| import 'dart:io';
|
| @@ -136,7 +134,7 @@ class _WindowsDirectoryWatcher
|
| event is FileSystemDeleteEvent ||
|
| (FileSystemEntity.typeSync(path) ==
|
| FileSystemEntityType.NOT_FOUND)) {
|
| - for (var path in _files.toSet()) {
|
| + for (var path in _files.paths) {
|
| _emitEvent(ChangeType.REMOVE, path);
|
| }
|
| _files.clear();
|
| @@ -163,10 +161,10 @@ class _WindowsDirectoryWatcher
|
|
|
| /// The callback that's run when [Directory.watch] emits a batch of events.
|
| void _onBatch(List<FileSystemEvent> batch) {
|
| - _sortEvents(batch).forEach((path, events) {
|
| + _sortEvents(batch).forEach((path, eventSet) {
|
|
|
| - var canonicalEvent = _canonicalEvent(events);
|
| - events = canonicalEvent == null ?
|
| + var canonicalEvent = _canonicalEvent(eventSet);
|
| + var events = canonicalEvent == null ?
|
| _eventsBasedOnFileSystem(path) : [canonicalEvent];
|
|
|
| for (var event in events) {
|
| @@ -182,20 +180,20 @@ class _WindowsDirectoryWatcher
|
| if (_files.containsDir(path)) continue;
|
|
|
| var stream = new Directory(path).list(recursive: true);
|
| - var sub;
|
| - sub = stream.listen((entity) {
|
| + StreamSubscription<FileSystemEntity> subscription;
|
| + subscription = stream.listen((entity) {
|
| if (entity is Directory) return;
|
| if (_files.contains(path)) return;
|
|
|
| _emitEvent(ChangeType.ADD, entity.path);
|
| _files.add(entity.path);
|
| }, onDone: () {
|
| - _listSubscriptions.remove(sub);
|
| + _listSubscriptions.remove(subscription);
|
| }, onError: (e, stackTrace) {
|
| - _listSubscriptions.remove(sub);
|
| + _listSubscriptions.remove(subscription);
|
| _emitError(e, stackTrace);
|
| }, cancelOnError: true);
|
| - _listSubscriptions.add(sub);
|
| + _listSubscriptions.add(subscription);
|
| } else if (event is FileSystemModifyEvent) {
|
| if (!event.isDirectory) {
|
| _emitEvent(ChangeType.MODIFY, path);
|
| @@ -219,15 +217,17 @@ class _WindowsDirectoryWatcher
|
| /// The returned events won't contain any [FileSystemMoveEvent]s, nor will it
|
| /// contain any events relating to [path].
|
| Map<String, Set<FileSystemEvent>> _sortEvents(List<FileSystemEvent> batch) {
|
| - var eventsForPaths = {};
|
| + var eventsForPaths = <String, Set>{};
|
|
|
| // Events within directories that already have events are superfluous; the
|
| // directory's full contents will be examined anyway, so we ignore such
|
| // events. Emitting them could cause useless or out-of-order events.
|
| var directories = unionAll(batch.map((event) {
|
| if (!event.isDirectory) return new Set();
|
| - if (event is! FileSystemMoveEvent) return new Set.from([event.path]);
|
| - return new Set.from([event.path, event.destination]);
|
| + if (event is FileSystemMoveEvent) {
|
| + return new Set.from([event.path, event.destination]);
|
| + }
|
| + return new Set.from([event.path]);
|
| }));
|
|
|
| isInModifiedDirectory(path) =>
|
| @@ -322,7 +322,7 @@ class _WindowsDirectoryWatcher
|
| var fileExists = new File(path).existsSync();
|
| var dirExists = new Directory(path).existsSync();
|
|
|
| - var events = [];
|
| + var events = <FileSystemEvent>[];
|
| if (fileExisted) {
|
| if (fileExists) {
|
| events.add(new ConstructableFileSystemModifyEvent(path, false, false));
|
| @@ -357,7 +357,7 @@ class _WindowsDirectoryWatcher
|
| _watchSubscription = null;
|
|
|
| // Emit remove events for any remaining files.
|
| - for (var file in _files.toSet()) {
|
| + for (var file in _files.paths) {
|
| _emitEvent(ChangeType.REMOVE, file);
|
| }
|
| _files.clear();
|
|
|