# Changelog

## 1.2.1

Adds:

* Decoalesces events that are collapsed by `kevent(2)`. Sometimes events like
  `NOTE_EXEC` and `NOTE_FORK` will arrive in one event, and we'd only surface
  one of them. Now, we surface both. This comes with the side effect that we
  will sometimes surface events the user didn't necessarily ask for, since
  bundled events will be bundled if only one of the filter flags was passed in.
* Reduced code size in `add_filename`/`remove_filename`
* `Vnode` is now comparable
* Added `Truncate` support on OpenBSD
* Added `Trackerr` support on all platforms

## 1.2.0

Adds:

* Bump kqueue-sys to 1.1.1
* Handle `NOTE_READ` on FreeBSD
* Better documentation of errors
* Add fd-based benchmarks

Fixes:

* Remove all panics, returning errors instead
* Do not close `File` or fd's on drop, since we do not own them
* `Vnode::Extend` has nothing to do with `truncate(2)`
* Allow removal of non-utf8 pathnames (although imperfect)
* Remove a bunch of unchecked casts and fail if data is out-of-range
* `from_error`, `is_err`, `poll`, `poll_forever` and `iter` are `#[must_use]`
* Internally use `OwnedFd` to track our `kqueue` object
* `Ident.PartialEq` did not compare enum discriminants
* Track watches in a `HashMap`, leading to much faster `remove_*` performance
* Preallocate internal vec when watching objects, reduces memory usage and
  increase perf
* Fast fail returning events from unstarted `Watcher`s
* Don't unconditionally declare ourselves as started
* Don't include drops in benchmark results

## 1.1.1

Fixes:

* Don't try and remove file descriptor 0 when removing unwatched filenames

## 1.1.0

Adds:

* Better error messages for panics
* Rust Edition 2021

Fixes:

* Don't leak file descriptors when removing filenames from being watched
* Reduce memory usage when starting a new watcher
* Don't leak file descriptors when removing fd's from being watched (see commit
  for rationale)

## 1.0.8

Adds:

* ios support

Fixes:

* panic on overflow on more than max 32bit files

## 1.0.7

Fixes:

* Fixes broken 32bit builds by matching `timespec` defs to libc

## 1.0.6

Fixes:

* marks `Vnode` enum `non_exhaustive` to fix backwards compatibility in 1.x

## 1.0.5

Adds:

* docs.rs support
* added new enum variants specific to FreeBSD (broke backwards compatibility)

Fixes:

* Fixes broken 32bit builds

## 1.0.4

Fixes:

* Fixes broken NetBSD build

## 1.0.3

Adds:

* #6: Adds a new `Watcher.poll_forever()` method which blocks on new events. This works
  around buggy behavior in the original `Watcher.poll()` method.
* !3: Adds an implementation for `std::os::unix::io::AsRawFd` for `Watcher` for
  nested kqueues.

## 1.0.2

* Fixed #4: Fix bug where wrong data types were used on i386 FreeBSD

## 1.0.1

* Merged !1 as a fix for #3. We properly fill in the `ext` field for `kqueue`
  extensions on FreeBSD.

## 1.0.0

### Breaking changes

* Bumped `bitflags` in `rust-kqueue-sys`: Now all bitflag constants must be qualified:

`EV_DELETE` -> `EventFlag::EV_DELETE`
`NOTE_WRITE` > `FilterFlag::NOT_WRITE`

### Other changes

* 2018 edition and clippy changes
