MyNixOS website logo
Description

Watch the File System for Changes.

R binding for 'libfswatch', a file system monitoring library. Watch files, or directories recursively, for changes in the background. Log activity, or run an R function every time a change event occurs.

watcher

CRANstatus R-CMD-check Codecov testcoverage

Watch the File System for Changes

R binding for ‘libfswatch’, a file system monitoring library. This uses an optimal event-driven API for each platform:

  • ReadDirectoryChangesW on Windows
  • FSEvents on MacOS
  • inotify on Linux
  • kqueue on BSD
  • File Events Notification on Solaris/Illumos

Watching is done asynchronously in the background, without blocking the session.

  • Watch files, or directories recursively.
  • Log activity, or run an R function every time a change event occurs.

Installation

Install watcher from CRAN with:

install.packages("watcher")

Installation from Source

watcher requires the ‘libfswatch’ library.

  • On Linux / MacOS, an installed version will be used if found in the standard filesystem locations.
  • On Windows, or if not found, the bundled version of ‘libfswatch’ 1.19.0-dev will be compiled from source.
  • Source compilation of the library requires ‘cmake’.

Quick Start

Create a ‘Watcher’ using watcher::watcher().

By default this will watch the current working directory recursively and write events to stdout.

Set the callback argument to run an R function, or rlang-style formula, every time a file changes:

  • Uses the ‘later’ package to execute the callback when R is idle at the top level, or whenever later::run_now() is called, for instance automatically in Shiny’s event loop.
  • Function is called back with a character vector of the paths of all files which have changed.
library(watcher)
dir <- file.path(tempdir(), "watcher-example")
dir.create(dir)

w <- watcher(dir, callback = ~print(.x), latency = 0.5)
w
#> <Watcher>
#>   Public:
#>     get_path: function () 
#>     initialize: function (path, callback, latency) 
#>     is_running: function () 
#>     start: function () 
#>     stop: function () 
#>   Private:
#>     path: /tmp/RtmpR5tJmF/watcher-example
#>     running: FALSE
#>     watch: externalptr
w$start()

file.create(file.path(dir, "newfile"))
#> [1] TRUE
file.create(file.path(dir, "anotherfile"))
#> [1] TRUE
later::run_now(1)
#> [1] "/tmp/RtmpR5tJmF/watcher-example/newfile"
#> [1] "/tmp/RtmpR5tJmF/watcher-example/anotherfile"

newfile <- file(file.path(dir, "newfile"), open = "r+")
cat("hello", file = newfile)
close(newfile)
later::run_now(1)
#> [1] "/tmp/RtmpR5tJmF/watcher-example/newfile"

file.remove(file.path(dir, "newfile"))
#> [1] TRUE
later::run_now(1)
#> [1] "/tmp/RtmpR5tJmF/watcher-example/newfile"

w$stop()
unlink(dir, recursive = TRUE, force = TRUE)

Acknowledgements

Thanks to the authors of ‘libfswatch’, upon which this package is based:

  • Alan Dipert
  • Enrico M. Crisostomo.
Metadata

Version

0.1.2

License

Unknown

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows