phpactor / amp-fswatch
Async Filesystem Watcher for Amphp
Installs: 144 624
Dependents: 3
Suggesters: 0
Security: 0
Stars: 10
Watchers: 3
Forks: 2
Open Issues: 2
Requires
- php: ^8.0
- amphp/amp: ^2.4
- amphp/process: ^1.1
- psr/log: ^1.1
- symfony/filesystem: ^5.0|^6.0
- webmozart/glob: ^4.4
Requires (Dev)
- amphp/phpunit-util: ^1.3
- ergebnis/composer-normalize: ^2.0
- friendsofphp/php-cs-fixer: ^3.15
- jangregor/phpstan-prophecy: ^1.0
- phpactor/test-utils: ~1.1.3
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^1.1
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.0|^6.3
This package is auto-updated.
Last update: 2024-10-28 14:05:59 UTC
README
This is an Amp library for asynchronously monitor paths on your file system changes using various stategues.
It's been created to trigger code indexing in Phpactor.
- Promise based API.
- Capable of automatically selecting a supported watcher for the current environment.
- Provides realtime (e.g.
inotify
) watchers in addition to polling ones. - Provides decorators for:
- Including / excluding patterns.
- Buffering notifications.
- Unitifed configuration for all watchers.
Usage
See bin/watch
for an implementation, which looks something like this:
Loop::run(function () use () { $logger = // create a PSR logger $config = new WatcherConfig([$path]); $watcher = new PatternMatchingWatcher( new FallbackWatcher([ new BufferedWatcher(new InotifyWatcher($config, $logger), 10), new FindWatcher($config, $logger), new PhpPollWatcher($config, $logger), new FsWatchWatcher($config, $logger) ], $logger), [ '/**/*.php' ], [] ); $process = yield $watcher->watch([$path]); while (null !== $file = yield $process->wait()) { fwrite(STDOUT, sprintf('[%s] %s (%s)'."\n", date('Y-m-d H:i:s.u'), $file->path(), $file->type())); } });
Watchman
Watchman needs to be installed and will work on Linux, Mac and Windows.
use Phpactor\AmpFsWatch\Watcher\Watchman\WatchmanWatcher; $watcher = new WatchmanWatcher($config, $logger);
Inotify
Use the Linux inotifywait
binary to monitor for changes.
use Phpactor\AmpFsWatch\Watcher\Inotify\InotifyWatcher; $watcher = new InotifyWatcher($config, $logger); // ...
Fswatch
Unstable: This watcher has not been extensively tested.
FsWatch is a cross-platform (Linux,Mac,Windows) file watching utility which will automatically use the platforms native functionality when possible.
use Phpactor\AmpFsWatch\Watcher\FsWatch\FsWatchWatcher; $watcher = new FsWatchWatcher($config, $logger); // ...
Find
Use the find
binary (Linux and Mac) to poll for file changes.
Poll for changes every second:
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new FindWatcher($config, $logger); // ...
Note that while this should work on GNU and BSD variants of find
it may not
work on other variants due to being invoked with -newerxy
switch, which is
not in the POSIX standard.
PHP Poll
This is the slowest and most resource intensive option but it should work on all environments.
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new PhpPollWatcher($config, $logger); // ...
Fallback
The fallback watcher will automatically select the first supported watcher on the current system:
use Phpactor\AmpFsWatch\Watcher\Fallback\FallbackWatcher; $watcher = new FallbackWatcher( [ new InotifyWatcher($logger), new FindWatcher(500, $logger) ] $logger ); // ...
Contributing
This package is open source and welcomes contributions! Feel free to open a pull request on this repository.
Support
- Create an issue on the main Phpactor repository.
- Join the
#phpactor
channel on the Slack Symfony Devs channel.