= Release History == 5.5: November 17, 2023 - Report correct error if open(3) fails - Use kern.maxfilesperproc to determine file open limit on MacOS == 5.4: August 1, 2023 - 'make test' runs a quick smoketest, 'make check' runs regressions - Set IN_CLOEXEC only for inotify_init, kqueue uses similar setting by default - Unconditionally try to set soft file limit to 2^16 on MacOS - Use non-reentrant calls sparingly in signal handlers - configure: use TARGET_OS to override the output of uname(1) == 5.3: January 20, 2023 - 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 - Remove C unit tests - Only respond to attribute/inode changes on Linux == 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 - Substitute '/_' 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