= Next Release: 5.3
- Symlink changes detected on Linux by setting 'ENTR_INOTIFY_SYMLINK'
- Use /dev/null rather then closed pipe for stdin in -r mode
- Utilize {O,FD}_CLOEXEC flag for unintentional leaks of descriptors to
executed utilities
= Release History
== 5.2: May 05, 2022
- Update copy of strlcpy(3) for Linux
- Detect file deletion from directories on Linux
- Print the signal that terminated a child when using '-s'
- Return 128+signal that terminated a child when using '-z'
- Ensure terminal settings are reset when '-z' is set
== 5.1: December 28, 2021
- Detect files moved to or from directories on Linux
- Allow detection of directory entries beginning with '.' by specifying '-d' twice
- Only reset terminal settings in exit handler if settings were changed
== 5.0: July 2, 2021
- Add missing call to getrlimit(3) on MacOS
- Eliminate memory management warnings on Linux
- EV_TRACE prints file mode and file name
- Ignore asynchronous attribute changes on MacOS 11
== 4.9: May 3, 2021
- EV_TRACE also prints file/notify descriptor limit
- Don't raise rlim_cur on MacOS
- Set 2^16 watches if inotify limits cannot be read
- Raise an error and suggest '-n' if terminal attributes cannot be read
== 4.8: February 26, 2021
- Set a maximum of 2^19 watches to guard against absurd file open limits on
MacOS
- Use control sequences to clear the display and specify '-c' twice to erase
the scrollback buffer
== 4.7: January 29, 2021
- Use system file descriptor limits when max_user_watches is not accessible
- Return the exit status of the child process when the '-z' option is used
- Handle SIGHUP so child process are terminated when a terminal is closed
- More accurately return shell exit code using '-s' option
== 4.6: July 1, 2020
- Always call waitpid(2) to avoid dead processes
- Duplicate STDIN file descriptor before closing; for the '-r' option
== 4.5: April 20, 2020
- New '-z' "one-shot" option self-terminates after the utility exits
- Termination by 'q' or 'SIGINT' results in an exit status of 0
== 4.4: January 02, 2020
- Use a single inotify queue on Linux, limited by
/proc/sys/fs/inotify/max_user_watches
- Set the environment variable 'ENTR_INOTIFY_WORKAROUND' to enable a
compatibility mode for platforms with deformed inotify support
== 4.3: September 25, 2019
- Move hosting from bitbucket.org to github.com
- Rename tag names from entr-X.Y to X.Y
- Replace hg with git as a dependency for system-test.sh
== 4.2: March 28, 2019
- Use pledge(2) on OpenBSD
- New '-a' option enables response to events that occur while the utility is
running
- Error messages direct users to http://eradman.com/entrproject/limits.html
- Correctly report error when a file cannot be reopened
== 4.1: June 13, 2018
- New '-n' non-interactive option disables keyboard input
- EV_TRACE environment variable enables file system event tracing
- Track changes to the inode number as a workaround for missing delete
events on the Linux kernel
== 4.0: February 02, 2018
- Warn instead of error if kqueue fails to register on STDIN
- Close STDIN before running the utility when the restart option is used
- Restore terminal settings if terminated by a signal
== 3.9: September 19, 2017
- Fix use of poll(2) to avoid possible busy-loop on Linux
- Disable keyboard input if reading STDIN fails
== 3.8: August 11, 2017
- Run the utility if the spacebar is pressed
- 'q' for quit
== 3.7: February 27, 2017
- Terminate subprocess in restart mode if a file under watch disappears
- Allow NOTE_ATTRIB to set '/_' only if file mode changes
- New '-s' option executes commands using $SHELL -c
- Print usage and exit if input is from a terminal instead of a pipe
== 3.6: July 01, 2016
- Do not print warning if _TTY_PATH cannot be opened (for chroot, docker, ...)
- Non-existent input files produce a warning instead of an error
- Trigger run when permissions change on regular files
== 3.5: April 01, 2016
- Removed contrib/*
- Detect new subdirectories on Linux
- Direct users to http://entrproject.org/limits.html if inotify hits a kernel
limit
== 3.4: December 12, 2015
- Terminate the child process before exiting when the reload option is combined
with the directory watch option
- Direct users to http://entrproject.org/limits.html if the maximum number of
open files is exceeded
== 3.3: October 23, 2015
- Substitute '/_' only with regular files when using the directory watch option
- Bugfix when tracking the first file to change
- Display release number along with usage
== 3.2: April 9, 2015
- Execute the utility immediately after registering watch events. Old behavior
is restored using new postpone option ('-p')
- Relocated 'reload-browser' to http://entrproject.org/scripts/reload-browser
- Drop FIFO support to further simply code and documentation. FIFO mode was
conceptually good, but EXEC mode is intelligent hand easily handles the vast
majority of use cases
- Remove kFreeBSD as a target platform
== 3.1: March 4, 2015
- Return error code indicating exit reason after handling signals
- Restart mode sets process group to ensure that wrapper scripts do not prevent
signals from reaching child processes
- Removed DEBUG printf statements
== 3.0: December 19, 2014
- Man page highlights the flexibility of executing a commands using a shell
- 'reload-browser', a cross-platform script for reloading the current tab in
one or more browsers
- system_test.sh auto-upgrades to bash if the default shell does not support
the ERR trap
- Workaround implemented for Linux using fstat(2) to detect if a binary was
removed if inotify issues IN_ATTRIB but not IN_DELETE_SELF
- Use calloc(3) to take advantage of overflow detection
== 2.9: June 10, 2014
- Moved alternate Makefiles to contrib/
- Trigger actions when a file is truncated on BSD
- Improved format of DEBUG messages
- Added missing extern for missing/fmemopen.c to avoid warning on MacOS 10.7+
- No longer register NOTE_EXTEND; this event is not always merged with
NOTE_WRITE on MacOS
- New directory-watch option ('-d'). In this mode a shell while-loop can be
used to track the addition of new files
== 2.8: March 15, 2014
- Iteratively check for new file system events using a 1ms timeout after a file
has been renamed or removed in order to prevent the utility from being
executed before successive changes from a version control system have
completed
- Regression tests use Vim and Mercurial
- Timing on regression tests has been tightened to only support real hardware;
they are not expected to pass in emulated environments
- More correctly identify the first file to trigger a file change notification
- Renamed regress.sh to system_test.sh, and drop dependency on ksh
== 2.7: February 12, 2014
- Changed function pointer prefixes from '_' to 'x' to avoid runtime symbol
collisions in libc. Required to build on DragonFlyBSD
- Add this NEWS file to provide detailed release history for port maintainers
- Subsitute '/_' argument with the first file that changed
- Man page formatted with more semantically correct markup
- Multiple events on the same file are merged on Linux to prevent duplicate
writes to a named pipe
== 2.6: January 23, 2014
- Added -c option to clear the screen before calling execvp(3)
- Changed command line option '{}' to '/_'
- Renamed Makefile.linux-lbsd to Makefile.debian
- Include CPPFLAGS since some build systems (namely Debian) use it to specify
hardening options
- Raise ARG_MAX from 4K to 2MB on Linux, since _SC_ARG_MAX returns an incorrect
value on Linux
- Handle RENAME events that are not followed by DELETE. This enables us to cope
with the backup option in Vim
== 2.5: December 30, 2013
- Restore full 50ms period for consolidating events on Linux. Required for the
Geany editor
- Remove use of setproctitle(3), no plans to implement this on Linux and MacOS
This also eliminates use of the 3-clause license
- New feature: the first occurrence of '{}' on the command line will be
replaced with the name of the first file under watch
- Set PAGER to an absolute path (/bin/cat)
- Prevent interactive utilities from paging output
== 2.4: December 18, 2013
- Reintroduce ${DESTDIR} for STAGEDIR installation on FreeBSD and pkgsrc
- License file describes the copyright holders for the compatibility libraries
== 2.3: December 12, 2013
- Wait for processes to terminate in restart mode
- Set process title for blocking events
- Correct multiple bugs in the inotify->kqueue translation layer
- Print out detailed instructions if the user provides configure arguments
- Remove ${DESTDIR} from Makefile which appears to interfere with OpenBSD ports
- The handler for SIGSEGV prints file name and line number if a unit test fails
- Reduce the number of attempts to re-open files to 10 (total of 1 second)
- Define architecture in Makefile instead of testing for __linux or __APPLE__
== 2.2: August 07, 2013
- Process every delete or rename event to ensure files remain tracked
- Always process DELETE or RENAME events to prevent a files from escaping watch
- inotify(7) events are consolidated for a duration of 50ms as a workaround for
an apparent bug in glib/gio where a file is written and then removed
- Execute mode can run a file under watch by retrying if text file is busy
- Exit non-zero if list of regular files exceeds the hard limit set by the
current login class
- Ignore directories and special files; exit with error code 1 if no regular
files are provided as input
== 2.1: July 01, 2013
- Zero-dependency build on Linux using built-in compatibility layer
- Add poll with optional timeout in order to prevent change events from
accumulating while running a command
- Invalidate file->fd after inotify event is closed. Do not respond to
IN_MOVE_SELF since this event only occurs on Linux NFS mounts
- Optional build on GNU/Linux using external compatibility libraries libkqueue
and libbsd
- Fix bug in finding the correct filename to write to a FIFO
- Correct build on MacOS
== 2.0: June 17, 2013
- Support for old architectures without C99 support
- More aggressively remove duplicate events
- install/uninstall uses DESTDIR to be compatible with pkgsrc
== 1.9: April 13, 2013
- New auto-reload option ('-r')
- Add a simple configure script, BSD is the default
- Do not install directories...they should already exist
- Man page installation path can be set with MANPATH. MacOS expects it to be
under /usr/local/share
== 1.8: May 12, 2013
- Ensure that losing a file under watch is results in an error
== 1.7: November 20, 2012
- Allocate an memory based on _SC_OPEN_MAX, not rl.rlim_max
- Stat deleted file until success before running a command
- Handle SIGTERM and remove named pipe on exit
== 1.6: August 10, 2012
- Separate makefile for Linux to make building easier
- No need for pthreads on BSD
- Respond to RENAME and LINK events to improve behavior on NFS
== 1.5: July 29, 2012
- Support interactive applications by opening a TTY
- Successfully stat deleted files before running a command
== 1.4: May 22, 2013
- Added regression tests
- Delete events instead of relying on implicit removal by close(2) for better
compatibility with libkqueue on Linux
== 1.3: May 17, 2012
- Added FIFO support
- Use min(OPEN_MAX, rl.rlim_max) to be more compatible of Mac OS
- More correct use of fgets(3) when reading STDIN
== 1.2: April 26, 2012
- Added support for Linux via libkqueue
== 1.1: April 17, 2012
- Added support for Mac OS
== 1.0: April 12, 2012
- Initial release at https://bitbucket.org/eradman/entr
- Builds on all major BSD platforms