| Index: pkg/watcher/lib/src/directory_watcher/polling.dart
|
| diff --git a/pkg/watcher/lib/src/directory_watcher/polling.dart b/pkg/watcher/lib/src/directory_watcher/polling.dart
|
| index 684f7aad8ba21ef665739d0f1184ddb1281ce20f..12a32458e0651ddbb60a062799960437d0e5b92c 100644
|
| --- a/pkg/watcher/lib/src/directory_watcher/polling.dart
|
| +++ b/pkg/watcher/lib/src/directory_watcher/polling.dart
|
| @@ -7,7 +7,6 @@ library watcher.directory_watcher.polling;
|
| import 'dart:async';
|
| import 'dart:io';
|
|
|
| -import 'package:crypto/crypto.dart';
|
| import 'package:stack_trace/stack_trace.dart';
|
|
|
| import '../async_queue.dart';
|
| @@ -46,10 +45,10 @@ class _PollingDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| /// directory contents.
|
| final Duration _pollingDelay;
|
|
|
| - /// The previous status of the files in the directory.
|
| + /// The previous modification times of the files in the directory.
|
| ///
|
| /// Used to tell which files have been modified.
|
| - final _statuses = new Map<String, _FileStatus>();
|
| + final _lastModifieds = new Map<String, DateTime>();
|
|
|
| /// The subscription used while [directory] is being listed.
|
| ///
|
| @@ -89,7 +88,7 @@ class _PollingDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| // Don't process any remaining files.
|
| _filesToProcess.clear();
|
| _polledFiles.clear();
|
| - _statuses.clear();
|
| + _lastModifieds.clear();
|
| }
|
|
|
| /// Scans the contents of the directory once to see which files have been
|
| @@ -135,32 +134,25 @@ class _PollingDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| return getModificationTime(file).then((modified) {
|
| if (_events.isClosed) return null;
|
|
|
| - var lastStatus = _statuses[file];
|
| + var lastModified = _lastModifieds[file];
|
|
|
| // If its modification time hasn't changed, assume the file is unchanged.
|
| - if (lastStatus != null && lastStatus.modified == modified) {
|
| + if (lastModified != null && lastModified == modified) {
|
| // The file is still here.
|
| _polledFiles.add(file);
|
| return null;
|
| }
|
|
|
| - return _hashFile(file).then((hash) {
|
| - if (_events.isClosed) return;
|
| -
|
| - var status = new _FileStatus(modified, hash);
|
| - _statuses[file] = status;
|
| - _polledFiles.add(file);
|
| + if (_events.isClosed) return null;
|
|
|
| - // Only notify if we're ready to emit events.
|
| - if (!isReady) return;
|
| + _lastModifieds[file] = modified;
|
| + _polledFiles.add(file);
|
|
|
| - // And the file is different.
|
| - var changed = lastStatus == null || !_sameHash(lastStatus.hash, hash);
|
| - if (!changed) return;
|
| + // Only notify if we're ready to emit events.
|
| + if (!isReady) return null;
|
|
|
| - var type = lastStatus == null ? ChangeType.ADD : ChangeType.MODIFY;
|
| - _events.add(new WatchEvent(type, file));
|
| - });
|
| + var type = lastModified == null ? ChangeType.ADD : ChangeType.MODIFY;
|
| + _events.add(new WatchEvent(type, file));
|
| });
|
| }
|
|
|
| @@ -169,10 +161,10 @@ class _PollingDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| Future _completePoll() {
|
| // Any files that were not seen in the last poll but that we have a
|
| // status for must have been removed.
|
| - var removedFiles = _statuses.keys.toSet().difference(_polledFiles);
|
| + var removedFiles = _lastModifieds.keys.toSet().difference(_polledFiles);
|
| for (var removed in removedFiles) {
|
| if (isReady) _events.add(new WatchEvent(ChangeType.REMOVE, removed));
|
| - _statuses.remove(removed);
|
| + _lastModifieds.remove(removed);
|
| }
|
|
|
| if (!isReady) _ready.complete();
|
| @@ -183,37 +175,4 @@ class _PollingDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| _poll();
|
| });
|
| }
|
| -
|
| - /// Calculates the SHA-1 hash of the file at [path].
|
| - Future<List<int>> _hashFile(String path) {
|
| - return Chain.track(new File(path).readAsBytes()).then((bytes) {
|
| - var sha1 = new SHA1();
|
| - sha1.add(bytes);
|
| - return sha1.close();
|
| - });
|
| - }
|
| -
|
| - /// Returns `true` if [a] and [b] are the same hash value, i.e. the same
|
| - /// series of byte values.
|
| - bool _sameHash(List<int> a, List<int> b) {
|
| - // Hashes should always be the same size.
|
| - assert(a.length == b.length);
|
| -
|
| - for (var i = 0; i < a.length; i++) {
|
| - if (a[i] != b[i]) return false;
|
| - }
|
| -
|
| - return true;
|
| - }
|
| -}
|
| -
|
| -class _FileStatus {
|
| - /// The last time the file was modified.
|
| - DateTime modified;
|
| -
|
| - /// The SHA-1 hash of the contents of the file.
|
| - List<int> hash;
|
| -
|
| - _FileStatus(this.modified, this.hash);
|
| }
|
| -
|
|
|