innmind/file-watch

当文件更改时执行代码的库

4.0.0 2024-03-10 10:42 UTC

This package is auto-updated.

Last update: 2024-09-10 11:39:12 UTC


README

Build Status codecov Type Coverage

一个小工具,每次修改文件(或文件夹)时都会执行代码。

安装

composer require innmind/file-watch

使用方法

use Innmind\FileWatch\{
    Factory,
    Stop,
};
use Innmind\Server\Control\ServerFactory;
use Innmind\TimeWarp\Halt\Usleep;
use Innmind\TimeContinuum\Earth\Clock;
use Innmind\Stream\Streams;
use Innmind\Url\Path;
use Innmind\Immutable\Either;

$watch = Factory::build(
    ServerFactory::build(
        new Clock,
        Streams::fromAmbientAuthority(),
        new Usleep,
    )->processes(),
    new Usleep,
);

$count = $watch(Path::of('/to/some/file/or/folder'))(0, function(int $count, Continuation $continuation): Continuation {
    // this function is called every time the file is modified
    ++$count;

    if ($count === 42) {
        // This will stop watching the folder for changes and return the count
        return $continuation->stop($count);
    }

    // This will instruct to continue watching for changes and the value will be
    // passed to this callable the next time it's called
    return $continuation->continue($count);
})->match(
    static fn(int $count) => $count, // always 42 as it's the stopping value
    static fn() => throw new \RuntimeException('Failed to watch for changes'),
);

警告

由于 tailstat 的工作方式,单个更改可能导致函数被多次调用。