Download Latest Version v1.9.0 source code.tar.gz (73.9 kB)
Email in envelope

Get an email when there's a new version of File system notifications for Go

Home / v1.6.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2022-10-13 3.1 kB
v1.6.0 source code.tar.gz 2022-10-13 46.0 kB
v1.6.0 source code.zip 2022-10-13 72.9 kB
Totals: 3 Items   122.1 kB 0

This version of fsnotify needs Go 1.16 (this was already the case since 1.5.1, but not documented). It also increases the minimum Linux version to 2.6.32.

Additions

  • all: add Event.Has() and Op.Has() (#477)

This makes checking events a lot easier; for example:

    if event.Op&Write == Write && !(event.Op&Remove == Remove) {
    }

Becomes:

    if event.Has(Write) && !event.Has(Remove) {
    }
  • all: add cmd/fsnotify (#463)

A command-line utility for testing and some examples.

Changes and fixes

  • inotify: don't ignore events for files that don't exist (#260, #470)

Previously the inotify watcher would call os.Lstat() to check if a file still exists before emitting events.

This was inconsistent with other platforms and resulted in inconsistent event reporting (e.g. when a file is quickly removed and re-created), and generally a source of confusion. It was added in 2013 to fix a memory leak that no longer exists.

  • all: return ErrNonExistentWatch when Remove() is called on a path that's not watched (#460)

  • inotify: replace epoll() with non-blocking inotify (#434)

Non-blocking inotify was not generally available at the time this library was written in 2014, but now it is. As a result, the minimum Linux version is bumped from 2.6.27 to 2.6.32. This hugely simplifies the code and is faster.

  • kqueue: don't check for events every 100ms (#480)

The watcher would wake up every 100ms, even when there was nothing to do. Now it waits until there is something to do.

  • macos: retry opening files on EINTR (#475)

  • kqueue: skip unreadable files (#479)

kqueue requires a file descriptor for every file in a directory; this would fail if a file was unreadable by the current user. Now these files are simply skipped.

  • windows: fix renaming a watched directory if the parent is also watched (#370)

  • windows: increase buffer size from 4K to 64K (#485)

  • windows: close file handle on Remove() (#288)

  • kqueue: put pathname in the error if watching a file fails (#471)

  • inotify, windows: calling Close() more than once could race (#465)

  • kqueue: improve Close() performance (#233)

  • all: various documentation additions and clarifications.

Source: README.md, updated 2022-10-13