src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

CHANGELOG.md (24914B)


      1 # Changelog
      2 
      3 1.10.1 2026-05-04
      4 -----------------
      5 
      6 ### Changes and fixes
      7 
      8 - inotify: don't remove sibling watches sharing a path prefix ([#754])
      9 
     10 - inotify, windows: don't rename sibling watches sharing a path prefix
     11   ([#755])
     12 
     13 
     14 [#754]: https://github.com/fsnotify/fsnotify/pull/754
     15 [#755]: https://github.com/fsnotify/fsnotify/pull/755
     16 
     17 
     18 1.10.0 2026-04-30
     19 -----------------
     20 This version of fsnotify needs Go 1.23.
     21 
     22 ### Changes and fixes
     23 
     24 - inotify: improve initialization error message ([#731])
     25 
     26 - inotify: send Rename event if recursive watch is renamed ([#696])
     27 
     28 - inotify: avoid copying event buffers when reading names ([#741])
     29 
     30 - kqueue: skip dangling symlinks (ENOENT) in watchDirectoryFiles, so a
     31   bad entry no longer aborts Watcher.Add for the whole directory ([#748])
     32 
     33 - kqueue: drop watches directly in Close() to fix a file descriptor leak
     34   when recycling watchers ([#740])
     35 
     36 - windows: fix nil pointer dereference in remWatch ([#736])
     37 
     38 - windows: lock watch field updates against concurrent WatchList to fix
     39   a race introduced in v1.9.0 ([#709], [#749])
     40 
     41 
     42 [#696]: https://github.com/fsnotify/fsnotify/pull/696
     43 [#709]: https://github.com/fsnotify/fsnotify/pull/709
     44 [#731]: https://github.com/fsnotify/fsnotify/pull/731
     45 [#736]: https://github.com/fsnotify/fsnotify/pull/736
     46 [#740]: https://github.com/fsnotify/fsnotify/pull/740
     47 [#741]: https://github.com/fsnotify/fsnotify/pull/741
     48 [#748]: https://github.com/fsnotify/fsnotify/pull/748
     49 [#749]: https://github.com/fsnotify/fsnotify/pull/749
     50 
     51 
     52 1.9.0 2024-04-04
     53 ----------------
     54 
     55 ### Changes and fixes
     56 
     57 - all: make BufferedWatcher buffered again ([#657])
     58 
     59 - inotify: fix race when adding/removing watches while a watched path is being
     60   deleted ([#678], [#686])
     61 
     62 - inotify: don't send empty event if a watched path is unmounted ([#655])
     63 
     64 - inotify: don't register duplicate watches when watching both a symlink and its
     65   target; previously that would get "half-added" and removing the second would
     66   panic ([#679])
     67 
     68 - kqueue: fix watching relative symlinks ([#681])
     69 
     70 - kqueue: correctly mark pre-existing entries when watching a link to a dir on
     71   kqueue ([#682])
     72 
     73 - illumos: don't send error if changed file is deleted while processing the
     74   event ([#678])
     75 
     76 
     77 [#657]: https://github.com/fsnotify/fsnotify/pull/657
     78 [#678]: https://github.com/fsnotify/fsnotify/pull/678
     79 [#686]: https://github.com/fsnotify/fsnotify/pull/686
     80 [#655]: https://github.com/fsnotify/fsnotify/pull/655
     81 [#681]: https://github.com/fsnotify/fsnotify/pull/681
     82 [#679]: https://github.com/fsnotify/fsnotify/pull/679
     83 [#682]: https://github.com/fsnotify/fsnotify/pull/682
     84 
     85 1.8.0 2024-10-31
     86 ----------------
     87 
     88 ### Additions
     89 
     90 - all: add `FSNOTIFY_DEBUG` to print debug logs to stderr ([#619])
     91 
     92 ### Changes and fixes
     93 
     94 - windows: fix behaviour of `WatchList()` to be consistent with other platforms ([#610])
     95 
     96 - kqueue: ignore events with Ident=0 ([#590])
     97 
     98 - kqueue: set O_CLOEXEC to prevent passing file descriptors to children ([#617])
     99 
    100 - kqueue: emit events as "/path/dir/file" instead of "path/link/file" when watching a symlink ([#625])
    101 
    102 - inotify: don't send event for IN_DELETE_SELF when also watching the parent ([#620])
    103 
    104 - inotify: fix panic when calling Remove() in a goroutine ([#650])
    105 
    106 - fen: allow watching subdirectories of watched directories ([#621])
    107 
    108 [#590]: https://github.com/fsnotify/fsnotify/pull/590
    109 [#610]: https://github.com/fsnotify/fsnotify/pull/610
    110 [#617]: https://github.com/fsnotify/fsnotify/pull/617
    111 [#619]: https://github.com/fsnotify/fsnotify/pull/619
    112 [#620]: https://github.com/fsnotify/fsnotify/pull/620
    113 [#621]: https://github.com/fsnotify/fsnotify/pull/621
    114 [#625]: https://github.com/fsnotify/fsnotify/pull/625
    115 [#650]: https://github.com/fsnotify/fsnotify/pull/650
    116 
    117 1.7.0 - 2023-10-22
    118 ------------------
    119 This version of fsnotify needs Go 1.17.
    120 
    121 ### Additions
    122 
    123 - illumos: add FEN backend to support illumos and Solaris. ([#371])
    124 
    125 - all: add `NewBufferedWatcher()` to use a buffered channel, which can be useful
    126   in cases where you can't control the kernel buffer and receive a large number
    127   of events in bursts. ([#550], [#572])
    128 
    129 - all: add `AddWith()`, which is identical to `Add()` but allows passing
    130   options. ([#521])
    131 
    132 - windows: allow setting the ReadDirectoryChangesW() buffer size with
    133   `fsnotify.WithBufferSize()`; the default of 64K is the highest value that
    134   works on all platforms and is enough for most purposes, but in some cases a
    135   highest buffer is needed. ([#521])
    136 
    137 ### Changes and fixes
    138 
    139 - inotify: remove watcher if a watched path is renamed ([#518])
    140 
    141   After a rename the reported name wasn't updated, or even an empty string.
    142   Inotify doesn't provide any good facilities to update it, so just remove the
    143   watcher. This is already how it worked on kqueue and FEN.
    144 
    145   On Windows this does work, and remains working.
    146 
    147 - windows: don't listen for file attribute changes ([#520])
    148 
    149   File attribute changes are sent as `FILE_ACTION_MODIFIED` by the Windows API,
    150   with no way to see if they're a file write or attribute change, so would show
    151   up as a fsnotify.Write event. This is never useful, and could result in many
    152   spurious Write events.
    153 
    154 - windows: return `ErrEventOverflow` if the buffer is full ([#525])
    155 
    156   Before it would merely return "short read", making it hard to detect this
    157   error.
    158 
    159 - kqueue: make sure events for all files are delivered properly when removing a
    160   watched directory ([#526])
    161 
    162   Previously they would get sent with `""` (empty string) or `"."` as the path
    163   name.
    164 
    165 - kqueue: don't emit spurious Create events for symbolic links ([#524])
    166 
    167   The link would get resolved but kqueue would "forget" it already saw the link
    168   itself, resulting on a Create for every Write event for the directory.
    169 
    170 - all: return `ErrClosed` on `Add()` when the watcher is closed ([#516])
    171 
    172 - other: add `Watcher.Errors` and `Watcher.Events` to the no-op `Watcher` in
    173   `backend_other.go`, making it easier to use on unsupported platforms such as
    174   WASM, AIX, etc. ([#528])
    175 
    176 - other: use the `backend_other.go` no-op if the `appengine` build tag is set;
    177   Google AppEngine forbids usage of the unsafe package so the inotify backend
    178   won't compile there.
    179 
    180 [#371]: https://github.com/fsnotify/fsnotify/pull/371
    181 [#516]: https://github.com/fsnotify/fsnotify/pull/516
    182 [#518]: https://github.com/fsnotify/fsnotify/pull/518
    183 [#520]: https://github.com/fsnotify/fsnotify/pull/520
    184 [#521]: https://github.com/fsnotify/fsnotify/pull/521
    185 [#524]: https://github.com/fsnotify/fsnotify/pull/524
    186 [#525]: https://github.com/fsnotify/fsnotify/pull/525
    187 [#526]: https://github.com/fsnotify/fsnotify/pull/526
    188 [#528]: https://github.com/fsnotify/fsnotify/pull/528
    189 [#537]: https://github.com/fsnotify/fsnotify/pull/537
    190 [#550]: https://github.com/fsnotify/fsnotify/pull/550
    191 [#572]: https://github.com/fsnotify/fsnotify/pull/572
    192 
    193 1.6.0 - 2022-10-13
    194 ------------------
    195 This version of fsnotify needs Go 1.16 (this was already the case since 1.5.1,
    196 but not documented). It also increases the minimum Linux version to 2.6.32.
    197 
    198 ### Additions
    199 
    200 - all: add `Event.Has()` and `Op.Has()` ([#477])
    201 
    202   This makes checking events a lot easier; for example:
    203 
    204 	    if event.Op&Write == Write && !(event.Op&Remove == Remove) {
    205 	    }
    206 
    207 	Becomes:
    208 
    209 	    if event.Has(Write) && !event.Has(Remove) {
    210 	    }
    211 
    212 - all: add cmd/fsnotify ([#463])
    213 
    214   A command-line utility for testing and some examples.
    215 
    216 ### Changes and fixes
    217 
    218 - inotify: don't ignore events for files that don't exist ([#260], [#470])
    219 
    220   Previously the inotify watcher would call `os.Lstat()` to check if a file
    221   still exists before emitting events.
    222 
    223   This was inconsistent with other platforms and resulted in inconsistent event
    224   reporting (e.g. when a file is quickly removed and re-created), and generally
    225   a source of confusion. It was added in 2013 to fix a memory leak that no
    226   longer exists.
    227 
    228 - all: return `ErrNonExistentWatch` when `Remove()` is called on a path that's
    229   not watched ([#460])
    230 
    231 - inotify: replace epoll() with non-blocking inotify ([#434])
    232 
    233   Non-blocking inotify was not generally available at the time this library was
    234   written in 2014, but now it is. As a result, the minimum Linux version is
    235   bumped from 2.6.27 to 2.6.32. This hugely simplifies the code and is faster.
    236 
    237 - kqueue: don't check for events every 100ms ([#480])
    238 
    239   The watcher would wake up every 100ms, even when there was nothing to do. Now
    240   it waits until there is something to do.
    241 
    242 - macos: retry opening files on EINTR ([#475])
    243 
    244 - kqueue: skip unreadable files ([#479])
    245 
    246   kqueue requires a file descriptor for every file in a directory; this would
    247   fail if a file was unreadable by the current user. Now these files are simply
    248   skipped.
    249 
    250 - windows: fix renaming a watched directory if the parent is also watched ([#370])
    251 
    252 - windows: increase buffer size from 4K to 64K ([#485])
    253 
    254 - windows: close file handle on Remove() ([#288])
    255 
    256 - kqueue: put pathname in the error if watching a file fails ([#471])
    257 
    258 - inotify, windows: calling Close() more than once could race ([#465])
    259 
    260 - kqueue: improve Close() performance ([#233])
    261 
    262 - all: various documentation additions and clarifications.
    263 
    264 [#233]: https://github.com/fsnotify/fsnotify/pull/233
    265 [#260]: https://github.com/fsnotify/fsnotify/pull/260
    266 [#288]: https://github.com/fsnotify/fsnotify/pull/288
    267 [#370]: https://github.com/fsnotify/fsnotify/pull/370
    268 [#434]: https://github.com/fsnotify/fsnotify/pull/434
    269 [#460]: https://github.com/fsnotify/fsnotify/pull/460
    270 [#463]: https://github.com/fsnotify/fsnotify/pull/463
    271 [#465]: https://github.com/fsnotify/fsnotify/pull/465
    272 [#470]: https://github.com/fsnotify/fsnotify/pull/470
    273 [#471]: https://github.com/fsnotify/fsnotify/pull/471
    274 [#475]: https://github.com/fsnotify/fsnotify/pull/475
    275 [#477]: https://github.com/fsnotify/fsnotify/pull/477
    276 [#479]: https://github.com/fsnotify/fsnotify/pull/479
    277 [#480]: https://github.com/fsnotify/fsnotify/pull/480
    278 [#485]: https://github.com/fsnotify/fsnotify/pull/485
    279 
    280 ## [1.5.4] - 2022-04-25
    281 
    282 * Windows: add missing defer to `Watcher.WatchList` [#447](https://github.com/fsnotify/fsnotify/pull/447)
    283 * go.mod: use latest x/sys [#444](https://github.com/fsnotify/fsnotify/pull/444)
    284 * Fix compilation for OpenBSD [#443](https://github.com/fsnotify/fsnotify/pull/443)
    285 
    286 ## [1.5.3] - 2022-04-22
    287 
    288 * This version is retracted. An incorrect branch is published accidentally [#445](https://github.com/fsnotify/fsnotify/issues/445)
    289 
    290 ## [1.5.2] - 2022-04-21
    291 
    292 * Add a feature to return the directories and files that are being monitored [#374](https://github.com/fsnotify/fsnotify/pull/374)
    293 * Fix potential crash on windows if `raw.FileNameLength` exceeds `syscall.MAX_PATH` [#361](https://github.com/fsnotify/fsnotify/pull/361)
    294 * Allow build on unsupported GOOS [#424](https://github.com/fsnotify/fsnotify/pull/424)
    295 * Don't set `poller.fd` twice in `newFdPoller` [#406](https://github.com/fsnotify/fsnotify/pull/406)
    296 * fix go vet warnings: call to `(*T).Fatalf` from a non-test goroutine [#416](https://github.com/fsnotify/fsnotify/pull/416)
    297 
    298 ## [1.5.1] - 2021-08-24
    299 
    300 * Revert Add AddRaw to not follow symlinks [#394](https://github.com/fsnotify/fsnotify/pull/394)
    301 
    302 ## [1.5.0] - 2021-08-20
    303 
    304 * Go: Increase minimum required version to Go 1.12 [#381](https://github.com/fsnotify/fsnotify/pull/381)
    305 * Feature: Add AddRaw method which does not follow symlinks when adding a watch [#289](https://github.com/fsnotify/fsnotify/pull/298)
    306 * Windows: Follow symlinks by default like on all other systems [#289](https://github.com/fsnotify/fsnotify/pull/289)
    307 * CI: Use GitHub Actions for CI and cover go 1.12-1.17
    308    [#378](https://github.com/fsnotify/fsnotify/pull/378)
    309    [#381](https://github.com/fsnotify/fsnotify/pull/381)
    310    [#385](https://github.com/fsnotify/fsnotify/pull/385)
    311 * Go 1.14+: Fix unsafe pointer conversion [#325](https://github.com/fsnotify/fsnotify/pull/325)
    312 
    313 ## [1.4.9] - 2020-03-11
    314 
    315 * Move example usage to the readme #329. This may resolve #328.
    316 
    317 ## [1.4.8] - 2020-03-10
    318 
    319 * CI: test more go versions (@nathany 1d13583d846ea9d66dcabbfefbfb9d8e6fb05216)
    320 * Tests: Queued inotify events could have been read by the test before max_queued_events was hit (@matthias-stone #265)
    321 * Tests:  t.Fatalf -> t.Errorf in go routines (@gdey #266)
    322 * CI: Less verbosity (@nathany #267)
    323 * Tests: Darwin: Exchangedata is deprecated on 10.13 (@nathany #267)
    324 * Tests: Check if channels are closed in the example (@alexeykazakov #244)
    325 * CI: Only run golint on latest version of go and fix issues (@cpuguy83 #284)
    326 * CI: Add windows to travis matrix (@cpuguy83 #284)
    327 * Docs: Remover appveyor badge (@nathany 11844c0959f6fff69ba325d097fce35bd85a8e93)
    328 * Linux: create epoll and pipe fds with close-on-exec (@JohannesEbke #219)
    329 * Linux: open files with close-on-exec (@linxiulei #273)
    330 * Docs: Plan to support fanotify (@nathany ab058b44498e8b7566a799372a39d150d9ea0119 )
    331 * Project: Add go.mod (@nathany #309)
    332 * Project: Revise editor config (@nathany #309)
    333 * Project: Update copyright for 2019 (@nathany #309)
    334 * CI: Drop go1.8 from CI matrix (@nathany #309)
    335 * Docs: Updating the FAQ section for supportability with NFS & FUSE filesystems (@Pratik32 4bf2d1fec78374803a39307bfb8d340688f4f28e )
    336 
    337 ## [1.4.7] - 2018-01-09
    338 
    339 * BSD/macOS: Fix possible deadlock on closing the watcher on kqueue (thanks @nhooyr and @glycerine)
    340 * Tests: Fix missing verb on format string (thanks @rchiossi)
    341 * Linux: Fix deadlock in Remove (thanks @aarondl)
    342 * Linux: Watch.Add improvements (avoid race, fix consistency, reduce garbage) (thanks @twpayne)
    343 * Docs: Moved FAQ into the README (thanks @vahe)
    344 * Linux: Properly handle inotify's IN_Q_OVERFLOW event (thanks @zeldovich)
    345 * Docs: replace references to OS X with macOS
    346 
    347 ## [1.4.2] - 2016-10-10
    348 
    349 * Linux: use InotifyInit1 with IN_CLOEXEC to stop leaking a file descriptor to a child process when using fork/exec [#178](https://github.com/fsnotify/fsnotify/pull/178) (thanks @pattyshack)
    350 
    351 ## [1.4.1] - 2016-10-04
    352 
    353 * Fix flaky inotify stress test on Linux [#177](https://github.com/fsnotify/fsnotify/pull/177) (thanks @pattyshack)
    354 
    355 ## [1.4.0] - 2016-10-01
    356 
    357 * add a String() method to Event.Op [#165](https://github.com/fsnotify/fsnotify/pull/165) (thanks @oozie)
    358 
    359 ## [1.3.1] - 2016-06-28
    360 
    361 * Windows: fix for double backslash when watching the root of a drive [#151](https://github.com/fsnotify/fsnotify/issues/151) (thanks @brunoqc)
    362 
    363 ## [1.3.0] - 2016-04-19
    364 
    365 * Support linux/arm64 by [patching](https://go-review.googlesource.com/#/c/21971/) x/sys/unix and switching to to it from syscall (thanks @suihkulokki) [#135](https://github.com/fsnotify/fsnotify/pull/135)
    366 
    367 ## [1.2.10] - 2016-03-02
    368 
    369 * Fix golint errors in windows.go [#121](https://github.com/fsnotify/fsnotify/pull/121) (thanks @tiffanyfj)
    370 
    371 ## [1.2.9] - 2016-01-13
    372 
    373 kqueue: Fix logic for CREATE after REMOVE [#111](https://github.com/fsnotify/fsnotify/pull/111) (thanks @bep)
    374 
    375 ## [1.2.8] - 2015-12-17
    376 
    377 * kqueue: fix race condition in Close [#105](https://github.com/fsnotify/fsnotify/pull/105) (thanks @djui for reporting the issue and @ppknap for writing a failing test)
    378 * inotify: fix race in test
    379 * enable race detection for continuous integration (Linux, Mac, Windows)
    380 
    381 ## [1.2.5] - 2015-10-17
    382 
    383 * inotify: use epoll_create1 for arm64 support (requires Linux 2.6.27 or later) [#100](https://github.com/fsnotify/fsnotify/pull/100) (thanks @suihkulokki)
    384 * inotify: fix path leaks [#73](https://github.com/fsnotify/fsnotify/pull/73) (thanks @chamaken)
    385 * kqueue: watch for rename events on subdirectories [#83](https://github.com/fsnotify/fsnotify/pull/83) (thanks @guotie)
    386 * kqueue: avoid infinite loops from symlinks cycles [#101](https://github.com/fsnotify/fsnotify/pull/101) (thanks @illicitonion)
    387 
    388 ## [1.2.1] - 2015-10-14
    389 
    390 * kqueue: don't watch named pipes [#98](https://github.com/fsnotify/fsnotify/pull/98) (thanks @evanphx)
    391 
    392 ## [1.2.0] - 2015-02-08
    393 
    394 * inotify: use epoll to wake up readEvents [#66](https://github.com/fsnotify/fsnotify/pull/66) (thanks @PieterD)
    395 * inotify: closing watcher should now always shut down goroutine [#63](https://github.com/fsnotify/fsnotify/pull/63) (thanks @PieterD)
    396 * kqueue: close kqueue after removing watches, fixes [#59](https://github.com/fsnotify/fsnotify/issues/59)
    397 
    398 ## [1.1.1] - 2015-02-05
    399 
    400 * inotify: Retry read on EINTR [#61](https://github.com/fsnotify/fsnotify/issues/61) (thanks @PieterD)
    401 
    402 ## [1.1.0] - 2014-12-12
    403 
    404 * kqueue: rework internals [#43](https://github.com/fsnotify/fsnotify/pull/43)
    405     * add low-level functions
    406     * only need to store flags on directories
    407     * less mutexes [#13](https://github.com/fsnotify/fsnotify/issues/13)
    408     * done can be an unbuffered channel
    409     * remove calls to os.NewSyscallError
    410 * More efficient string concatenation for Event.String() [#52](https://github.com/fsnotify/fsnotify/pull/52) (thanks @mdlayher)
    411 * kqueue: fix regression in  rework causing subdirectories to be watched [#48](https://github.com/fsnotify/fsnotify/issues/48)
    412 * kqueue: cleanup internal watch before sending remove event [#51](https://github.com/fsnotify/fsnotify/issues/51)
    413 
    414 ## [1.0.4] - 2014-09-07
    415 
    416 * kqueue: add dragonfly to the build tags.
    417 * Rename source code files, rearrange code so exported APIs are at the top.
    418 * Add done channel to example code. [#37](https://github.com/fsnotify/fsnotify/pull/37) (thanks @chenyukang)
    419 
    420 ## [1.0.3] - 2014-08-19
    421 
    422 * [Fix] Windows MOVED_TO now translates to Create like on BSD and Linux. [#36](https://github.com/fsnotify/fsnotify/issues/36)
    423 
    424 ## [1.0.2] - 2014-08-17
    425 
    426 * [Fix] Missing create events on macOS. [#14](https://github.com/fsnotify/fsnotify/issues/14) (thanks @zhsso)
    427 * [Fix] Make ./path and path equivalent. (thanks @zhsso)
    428 
    429 ## [1.0.0] - 2014-08-15
    430 
    431 * [API] Remove AddWatch on Windows, use Add.
    432 * Improve documentation for exported identifiers. [#30](https://github.com/fsnotify/fsnotify/issues/30)
    433 * Minor updates based on feedback from golint.
    434 
    435 ## dev / 2014-07-09
    436 
    437 * Moved to [github.com/fsnotify/fsnotify](https://github.com/fsnotify/fsnotify).
    438 * Use os.NewSyscallError instead of returning errno (thanks @hariharan-uno)
    439 
    440 ## dev / 2014-07-04
    441 
    442 * kqueue: fix incorrect mutex used in Close()
    443 * Update example to demonstrate usage of Op.
    444 
    445 ## dev / 2014-06-28
    446 
    447 * [API] Don't set the Write Op for attribute notifications [#4](https://github.com/fsnotify/fsnotify/issues/4)
    448 * Fix for String() method on Event (thanks Alex Brainman)
    449 * Don't build on Plan 9 or Solaris (thanks @4ad)
    450 
    451 ## dev / 2014-06-21
    452 
    453 * Events channel of type Event rather than *Event.
    454 * [internal] use syscall constants directly for inotify and kqueue.
    455 * [internal] kqueue: rename events to kevents and fileEvent to event.
    456 
    457 ## dev / 2014-06-19
    458 
    459 * Go 1.3+ required on Windows (uses syscall.ERROR_MORE_DATA internally).
    460 * [internal] remove cookie from Event struct (unused).
    461 * [internal] Event struct has the same definition across every OS.
    462 * [internal] remove internal watch and removeWatch methods.
    463 
    464 ## dev / 2014-06-12
    465 
    466 * [API] Renamed Watch() to Add() and RemoveWatch() to Remove().
    467 * [API] Pluralized channel names: Events and Errors.
    468 * [API] Renamed FileEvent struct to Event.
    469 * [API] Op constants replace methods like IsCreate().
    470 
    471 ## dev / 2014-06-12
    472 
    473 * Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98)
    474 
    475 ## dev / 2014-05-23
    476 
    477 * [API] Remove current implementation of WatchFlags.
    478     * current implementation doesn't take advantage of OS for efficiency
    479     * provides little benefit over filtering events as they are received, but has  extra bookkeeping and mutexes
    480     * no tests for the current implementation
    481     * not fully implemented on Windows [#93](https://github.com/howeyc/fsnotify/issues/93#issuecomment-39285195)
    482 
    483 ## [0.9.3] - 2014-12-31
    484 
    485 * kqueue: cleanup internal watch before sending remove event [#51](https://github.com/fsnotify/fsnotify/issues/51)
    486 
    487 ## [0.9.2] - 2014-08-17
    488 
    489 * [Backport] Fix missing create events on macOS. [#14](https://github.com/fsnotify/fsnotify/issues/14) (thanks @zhsso)
    490 
    491 ## [0.9.1] - 2014-06-12
    492 
    493 * Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98)
    494 
    495 ## [0.9.0] - 2014-01-17
    496 
    497 * IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany)
    498 * [Fix] kqueue: fix deadlock [#77][] (thanks @cespare)
    499 * [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library.
    500 
    501 ## [0.8.12] - 2013-11-13
    502 
    503 * [API] Remove FD_SET and friends from Linux adapter
    504 
    505 ## [0.8.11] - 2013-11-02
    506 
    507 * [Doc] Add Changelog [#72][] (thanks @nathany)
    508 * [Doc] Spotlight and double modify events on macOS [#62][] (reported by @paulhammond)
    509 
    510 ## [0.8.10] - 2013-10-19
    511 
    512 * [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott)
    513 * [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer)
    514 * [Doc] specify OS-specific limits in README (thanks @debrando)
    515 
    516 ## [0.8.9] - 2013-09-08
    517 
    518 * [Doc] Contributing (thanks @nathany)
    519 * [Doc] update package path in example code [#63][] (thanks @paulhammond)
    520 * [Doc] GoCI badge in README (Linux only) [#60][]
    521 * [Doc] Cross-platform testing with Vagrant  [#59][] (thanks @nathany)
    522 
    523 ## [0.8.8] - 2013-06-17
    524 
    525 * [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie)
    526 
    527 ## [0.8.7] - 2013-06-03
    528 
    529 * [API] Make syscall flags internal
    530 * [Fix] inotify: ignore event changes
    531 * [Fix] race in symlink test [#45][] (reported by @srid)
    532 * [Fix] tests on Windows
    533 * lower case error messages
    534 
    535 ## [0.8.6] - 2013-05-23
    536 
    537 * kqueue: Use EVT_ONLY flag on Darwin
    538 * [Doc] Update README with full example
    539 
    540 ## [0.8.5] - 2013-05-09
    541 
    542 * [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg)
    543 
    544 ## [0.8.4] - 2013-04-07
    545 
    546 * [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz)
    547 
    548 ## [0.8.3] - 2013-03-13
    549 
    550 * [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin)
    551 * [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin)
    552 
    553 ## [0.8.2] - 2013-02-07
    554 
    555 * [Doc] add Authors
    556 * [Fix] fix data races for map access [#29][] (thanks @fsouza)
    557 
    558 ## [0.8.1] - 2013-01-09
    559 
    560 * [Fix] Windows path separators
    561 * [Doc] BSD License
    562 
    563 ## [0.8.0] - 2012-11-09
    564 
    565 * kqueue: directory watching improvements (thanks @vmirage)
    566 * inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto)
    567 * [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr)
    568 
    569 ## [0.7.4] - 2012-10-09
    570 
    571 * [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji)
    572 * [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig)
    573 * [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig)
    574 * [Fix] kqueue: modify after recreation of file
    575 
    576 ## [0.7.3] - 2012-09-27
    577 
    578 * [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage)
    579 * [Fix] kqueue: no longer get duplicate CREATE events
    580 
    581 ## [0.7.2] - 2012-09-01
    582 
    583 * kqueue: events for created directories
    584 
    585 ## [0.7.1] - 2012-07-14
    586 
    587 * [Fix] for renaming files
    588 
    589 ## [0.7.0] - 2012-07-02
    590 
    591 * [Feature] FSNotify flags
    592 * [Fix] inotify: Added file name back to event path
    593 
    594 ## [0.6.0] - 2012-06-06
    595 
    596 * kqueue: watch files after directory created (thanks @tmc)
    597 
    598 ## [0.5.1] - 2012-05-22
    599 
    600 * [Fix] inotify: remove all watches before Close()
    601 
    602 ## [0.5.0] - 2012-05-03
    603 
    604 * [API] kqueue: return errors during watch instead of sending over channel
    605 * kqueue: match symlink behavior on Linux
    606 * inotify: add `DELETE_SELF` (requested by @taralx)
    607 * [Fix] kqueue: handle EINTR (reported by @robfig)
    608 * [Doc] Godoc example [#1][] (thanks @davecheney)
    609 
    610 ## [0.4.0] - 2012-03-30
    611 
    612 * Go 1 released: build with go tool
    613 * [Feature] Windows support using winfsnotify
    614 * Windows does not have attribute change notifications
    615 * Roll attribute notifications into IsModify
    616 
    617 ## [0.3.0] - 2012-02-19
    618 
    619 * kqueue: add files when watch directory
    620 
    621 ## [0.2.0] - 2011-12-30
    622 
    623 * update to latest Go weekly code
    624 
    625 ## [0.1.0] - 2011-10-19
    626 
    627 * kqueue: add watch on file creation to match inotify
    628 * kqueue: create file event
    629 * inotify: ignore `IN_IGNORED` events
    630 * event String()
    631 * linux: common FileEvent functions
    632 * initial commit
    633 
    634 [#79]: https://github.com/howeyc/fsnotify/pull/79
    635 [#77]: https://github.com/howeyc/fsnotify/pull/77
    636 [#72]: https://github.com/howeyc/fsnotify/issues/72
    637 [#71]: https://github.com/howeyc/fsnotify/issues/71
    638 [#70]: https://github.com/howeyc/fsnotify/issues/70
    639 [#63]: https://github.com/howeyc/fsnotify/issues/63
    640 [#62]: https://github.com/howeyc/fsnotify/issues/62
    641 [#60]: https://github.com/howeyc/fsnotify/issues/60
    642 [#59]: https://github.com/howeyc/fsnotify/issues/59
    643 [#49]: https://github.com/howeyc/fsnotify/issues/49
    644 [#45]: https://github.com/howeyc/fsnotify/issues/45
    645 [#40]: https://github.com/howeyc/fsnotify/issues/40
    646 [#36]: https://github.com/howeyc/fsnotify/issues/36
    647 [#33]: https://github.com/howeyc/fsnotify/issues/33
    648 [#29]: https://github.com/howeyc/fsnotify/issues/29
    649 [#25]: https://github.com/howeyc/fsnotify/issues/25
    650 [#24]: https://github.com/howeyc/fsnotify/issues/24
    651 [#21]: https://github.com/howeyc/fsnotify/issues/21