The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

watcher

CRAN status R-CMD-check Codecov test coverage

Watch the File System for Changes

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

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

Installation

Install the current development version of watcher using:

pak::pak("r-lib/watcher")

Installation from Source

watcher requires the ‘libfswatch’ library.

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:

library(watcher)
dir <- file.path(tempdir(), "watcher-example")
dir.create(dir)

w <- watcher(dir, callback = ~print(.x), latency = 0.5)
w
#> <Watcher>
#>   Public:
#>     initialize: function (path, callback, latency) 
#>     path: /tmp/RtmpcSO6DA/watcher-example
#>     running: FALSE
#>     start: function () 
#>     stop: function () 
#>   Private:
#>     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/RtmpcSO6DA/watcher-example/newfile"    
#> [2] "/tmp/RtmpcSO6DA/watcher-example/anotherfile"

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

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

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

Acknowledgements

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.