Git log: commit 3aecaaec579247c67eb060f9220d1d82d93db9e5
Author: Reinhard Tartler <siretart@tauware.de>
Date: Sat Nov 9 21:02:08 2024 -0500
debian/changelog: update
commit ecb25c80e68818a0723310e0f8be62c8eb5470d4
Author: Reinhard Tartler <siretart@tauware.de>
Date: Sat Nov 9 15:17:24 2024 -0500
debian/changelog: update
commit 8b0cb2124c50c87b06c40ffb610bbc44953a0292
Merge: a3ab212 3d8a7aa
Author: Reinhard Tartler <siretart@tauware.de>
Date: Sat Nov 9 15:16:56 2024 -0500
Update upstream source from tag 'upstream/1.8.0'
Update to upstream version '1.8.0'
with Debian dir f02d176d1359ef8182a70c41b19b5044d156ad07
commit 3d8a7aad0b21dcebaf560bf5e3c947b5a7819307
Merge: 83a427e a9bc2e0
Author: Reinhard Tartler <siretart@tauware.de>
Date: Sat Nov 9 15:16:56 2024 -0500
New upstream version 1.8.0
commit a9bc2e01792f868516acf80817f7d7d7b3315409
Author: Martin Tournoij <martin@arp242.net>
Date: Thu Oct 31 10:15:51 2024 +0000
Prepare 1.8.0 release
commit 2d133b81be1e26628491698a699ef9ce9fb71ed9
Author: Martin Tournoij <martin@arp242.net>
Date: Mon Oct 28 11:31:39 2024 +0000
inotify: fix panic on Remove()
It would do:
events := read_events_from_kernel()
for _, e := range events {
watch := read_our_state(e)
do_stuff_with(watch)
}
However, between read_events_from_kernel() and read_our_state() the
internal state could have been removed with Watcher.Remove() in another
goroutine, so it would return nil.
In many cases it already did "if watch != nil && [..]" to deal with
this, but not everywhere. Do an "early continue" instead.
Fixes #616
---
Ideally what it should do is block any Remove() for all of the above
code, so it always operates on a consistent state. But that's not so
easy to do in a quick fix, and I don't really have the time to spend on
this at the moment (and it seems no one else has either).
commit 16269627c5b0104cd78948b6b6d1efc3cdb60d9a
Author: Martin Tournoij <martin@arp242.net>
Date: Mon Oct 28 10:47:16 2024 +0000
Update CI
Cirrus and CirleCI didn't work at all because the images were outdated.
macos-11 seems forever stuck in "Waiting for a runner to pick up this
job"; looks like this image no longer exists(?) Great error message on
that :-/
Also update to Go 1.23 while I'm here.
commit c1467c02fba575afdb5f4201072ab8403bbf00f4
Author: Martin Tournoij <martin@arp242.net>
Date: Thu May 16 15:12:59 2024 +0000
test/kqueue: watch symlinks
commit 800ed8332bfeddcb97dce7733ce2674c17170eb4
Author: Martin Tournoij <martin@arp242.net>
Date: Thu May 16 17:12:40 2024 +0200
kqueue: don't change internal state when Add() returns error (#638)
Fixes #637
commit ad7424447bfedb6409dddced3d418e093fe7e9f4
Author: Raman Verma <59292838+maranix@users.noreply.github.com>
Date: Wed May 15 21:43:22 2024 +0530
remove extra "to" from doc comment (#634)
commit bec89034c5c5a875b2077b6b876cb085b527e7ee
Author: Martin Tournoij <martin@arp242.net>
Date: Thu May 2 04:45:40 2024 +0200
Split out Watcher and backends (#632)
Rather than have a bunch of Watcher types guarded by build tags, have
one Watcher that's always available which proxies to a backend
interface.
This will allow adding a polling watcher, fanotify, fsevents, and things
like that. There are no backends to select from yet, and I'm not 100%
sure yet what an API for that would look like, but this sets up the
scaffolding for all of it.
Backends are per-watcher; originally I prototyped something that allows
selecting it per-Add() call, but the bookkeeping on that became rather
complex, and this use case is probably far too rare to spend a lot of
effort on. People can still use different backends by using different
Watchers; they'll just have to do the bookkeeping themselves.
commit a618f076c8cfc422e6d1f6f1f881af9152aa7c82
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 22:24:37 2024 +0200
inotify: add recursive watcher (#472)
This adds a recursive watcher for inotify.
commit 17d905351249492aab4599fb177a947b119d2094
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 20:35:47 2024 +0100
Print diffs for test failures
Vendor my ztest diff library in here, so we don't add a dependency. This gives
much nicer test failures:
--- FAIL: TestScript (0.00s)
--- FAIL: TestScript/watch-dir/bug-277 (0.96s)
helpers_test.go:1021:
--- have
+++ want
@@ -1,6 +1,5 @@
RENAME /apple
REMOVE /pear
REMOVE /foo
-have CREATE /pear ← /apple
CREATE /foo
CREATE /apple
Instead of:
--- FAIL: TestScript (0.00s)
--- FAIL: TestScript/watch-dir/bug-277 (0.96s)
helpers_test.go:1020:
have:
CREATE /foo
REMOVE /foo
CREATE /apple
RENAME /apple
CREATE /pear ← /apple
REMOVE /pear
want:
CREATE /foo
REMOVE /foo
CREATE /apple
RENAME /apple
REMOVE /pear
FAIL
commit 53b06a884d7164e2d93c1dcdda52b1e966b76aba
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 08:19:39 2024 +0200
inotify: implement WithNoFollow() (#631)
Option to not follow symlinks, but watch the links themselves.
Unexported for now, until it's supported everywhere.
Updates #227
commit 08e056d5add3119ce83d50f2425811bbf905d1b4
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 07:21:29 2024 +0200
inotify: support filtering events, add unsupported events (#629)
This adds the ability to only listen for some event types. If you're
only interested in Created events and you're getting a lot of Write
events then you're just wasting CPU cycles
This also adds the ability listen on extra unportable event types; since
this is so related I figured I might as well do both. Ideally we want to
1) make it very very obvious you're doing something unportable, and 2)
make it reasonably easy "fallback" for platforms where this isn't
supported.
Unportable events start with "Unportable", which should document their
unportabilitiness. Also add a new Supports(Op) method, which should make
adding fallback logic relatively painless.
For example, to use CloseWrite where supported, but falling back to
Write when it's not:
var op fsnotify.Op
if w.Supports(fsnotify.UnportableCloseWrite) {
op |= fsnotify.UnportableCloseWrite
} else {
op |= fsnotify.Create | fsnotify.Write
}
w.AddWith("/tmp", fsnotify.WithEvents(op))
And then you can deal with this in the write loop. There's a full
example in cmd/fsnotify/closewrite.go
All of this is unexported for now, until support for other platforms has
been added.
Updates #7
Updates #519
commit b528cd251da4b6bb18a4d1dee9ec909be2607d6c
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 03:03:08 2024 +0100
Fix CONTRIBUTING.md
commit 723032cedac4584ca38edf3fa3e73dc28ee1b812
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 03:01:14 2024 +0100
Update contributing docs
commit 9ca3e9ff3ddbd6c2b83ec80a41171149c875f837
Author: Martin Tournoij <martin@arp242.net>
Date: Wed May 1 02:04:19 2024 +0200
inotify, windows: track renames (#628)
Add Event.RenamedFrom to track event renames; this is sent on a
subsequent Create event; for example:
Event{Op: Rename, Name: "/tmp/file"}
Event{Op: Create, Name: "/tmp/renamed", RenamedFrom: "/tmp/file"}
For now this is unexported as renamedFrom because the kqueue and FEN
backends are not yet implemented.
commit a7ad24d2a1f31d10d1652a29dbad8e83d14aa07e
Author: Martin Tournoij <martin@arp242.net>
Date: Mon Apr 29 17:49:03 2024 +0100
Fix typo
commit f04cd686af6bae5def3a0bb175d0f599bfcb38c1
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 27 21:32:20 2024 +0200
Print unknown flags with FSNOTIFY_DEBUG (#627)
The only way we can convert a mask to something with meaningful names is
by keeping a static list. That's fine, but flags we don't know would get
silently dropped.
commit b2a45ebc893ff18760cd3aea013f7e32841a95f1
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 27 20:28:55 2024 +0200
Add some more tests (#626)
Add some tests I thought of; and enable running the recursive tests.
commit d2ee00e6a4a4a31361154ea366272f0c23fc881c
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 27 19:05:06 2024 +0200
kqueue: emit events as "/path/dir/file" instead of "path/link/file" (#625)
When watching a symlink to a directory it would emit events with the
target name, rather than the link name.
commit a56fe9bcd0d744e07413507dcf1c5a6b3f9ff5c4
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 27 18:25:23 2024 +0200
kqueue: simplify bookkeeping of watched paths (#624)
This simplifies things quite a bit.
Previous: #543
commit 5fba4218fa55f89ea93b51d2c840b414b200afea
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 27 03:13:29 2024 +0200
Add "test scripts" in testdata/ (#623)
This is the same as the existing tests, except more readable and
maintainable.
commit eec439f22811eab1737765ca419793a02f4f3a2f
Author: Martin Tournoij <martin@arp242.net>
Date: Fri Apr 26 02:22:34 2024 +0200
fen: allow watching subdirectories of watched directories (#621)
When watching /tmp, w.port.PathIsWatched(name) returned true for
/tmp/abc. PathIsWatched() checks:
_, found := e.paths[path]
return found
That e.paths gets set in EventPort.AssociatePath(), which is called by
Watcher.associateFile() for every path inside a watched directory. So it
can never watch subpaths.
Anyway, this seems safe to remove. Could check our own Watcher.dirs
state, but this doesn't seem needed (we already have tests for watching
the same path more than once).
(This came rolling out of #620).
commit e75779f82599782de2a8a0fb429351df3a773771
Author: Martin Tournoij <martin@arp242.net>
Date: Thu Apr 25 16:39:36 2024 +0200
inotify: don't send event for IN_DELETE_SELF when also watching the parent (#620)
This would result in two events being sent.
Fixes #299
commit 77d5fee912901a9a5c56997ea6443af403472c79
Author: Martin Tournoij <martin@arp242.net>
Date: Thu Apr 25 14:39:42 2024 +0200
Add FSNOTIFY_DEBUG (#619)
This can be used to print events to stderr:
[~cg/fsnotify](dbg)% FSNOTIFY_DEBUG=1 fsnotify watch /tmp/ >/dev/null
FSNOTIFY_DEBUG: 11:34:23.633087586 256:IN_CREATE → "/tmp/a"
FSNOTIFY_DEBUG: 11:34:23.633202319 4:IN_ATTRIB → "/tmp/a"
FSNOTIFY_DEBUG: 11:34:26.782035307 256:IN_CREATE → "/tmp/b"
FSNOTIFY_DEBUG: 11:34:26.782137248 4:IN_ATTRIB → "/tmp/b"
FSNOTIFY_DEBUG: 11:34:28.989728764 512:IN_DELETE → "/tmp/a"
FSNOTIFY_DEBUG: 11:34:30.356208544 2:IN_MODIFY → "/tmp/b"
FSNOTIFY_DEBUG: 11:34:30.356272832 4:IN_ATTRIB → "/tmp/b"
FSNOTIFY_DEBUG: 11:34:32.957233528 512:IN_DELETE → "/tmp/b"
The internal.Debug() functions already existed; I sometimes added this
manually during development. This makes it more broadly useful. Can be
useful to debug some issues.
commit 0d78094ace83368f87a03061ce3caf34c09ccbb4
Author: Danny Lin <svc.github@kdrag0n.dev>
Date: Thu Apr 25 03:12:52 2024 -0700
kqueue: set O_CLOEXEC on close pipe fds (#617)
These file descriptors are being leaked to child processes because
O_CLOEXEC isn't set.
commit fd8ef389c7bd177ee51a3980fdcf15644796ed9d
Author: Martin Tournoij <martin@arp242.net>
Date: Thu Apr 25 12:07:07 2024 +0200
Fix CI on NetBSD (#618)
Seems to work now(?) This exception has been there for years, but now it
consistently seems to fail both for me locally and in the CI (for
example in #617). But on the main branch it worked just a few weeks
ago(?)
And while the CI could have been updated, my local environment hasn't:
netbsd$ uname -a
NetBSD 9.2 (GENERIC) #0: Wed May 12 13:15:55 UTC 2021 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
🤷
commit 33b04fab86204ee41cf75b319b7d24fe69f30ec6
Author: Martin Tournoij <martin@arp242.net>
Date: Sat Apr 6 13:00:20 2024 +0200
Update x/sys (#614)
Also update some action runners, and remove unneeded files.
commit 07ea67630e70947469ad207a64cde526d71a31ba
Author: Martin Tournoij <martin@arp242.net>
Date: Wed Apr 3 13:39:15 2024 +0200
Remove unnecessary code duplication (#612)
Co-authored-by: onee-only <kimww0306@gmail.com>
commit 3e9c2c0656533bf080b2408971c1042e4ff16635
Author: Martin Tournoij <martin@arp242.net>
Date: Wed Apr 3 12:45:25 2024 +0200
kqueue: ignore events with Ident=0 (#590)
On macOS it seems that sometimes an event with Ident=0 is delivered, and
no other flags/information beyond that, even though we never saw such a
file descriptor. For example in TestWatchSymlink/277 (usually at the
end, but sometimes sooner):
# Okay, expected
CREATE "/foo"
REMOVE "/foo"
CREATE "/apple"
CREATE "/pear"
RENAME "/apple"
REMOVE "/pear"
# One or more write events without any ident or information?!
WRITE ""
Printing some debug in the loop right after we receive events shows:
unix.Kevent_t{Ident:0x2a, Filter:-4, Flags:0x25, Fflags:0x2, Data:0, Udata:(*uint8)(nil)}
unix.Kevent_t{Ident:0x0, Filter:-4, Flags:0x25, Fflags:0x2, Data:0, Udata:(*uint8)(nil)}
The first is a normal event, the second with Ident 0. No error flag, no
data, no ... nothing.
I read a bit through bsd/kern_event.c from the xnu source, but I don't
really see an obvious location where this is triggered – this doesn't
seem intentional, but idk...
Technically fd 0 is a valid descriptor, so only skip it if there's no
path, and if we're on macOS.
commit 63bf283a5901e02c54fdc48d921ab872a99d97c9
Author: Martin Tournoij <martin@arp242.net>
Date: Wed Apr 3 10:40:21 2024 +0200
Update vmactions (#611)
Use the new vmactions runners based on linux/qemu rather than
macos/vagrant. This should be much more stable and reliable.
Also switch the illumos VM to that, since they now have one, and add
DragonFlyBSD.
Remove the old Debian 6 test. It's broken and not all that useful to
have; maybe some systems want to use current versions of fsnotify on
very old Linux kernels, but I doubt it.
commit 0c03ac2c1bc5ddc8799a1daecd41176508e24050
Author: Martin Tournoij <martin@arp242.net>
Date: Wed Apr 3 06:18:15 2024 +0100
inotify: clarify docs on ErrEventOverflow
Fixes #596
commit 7086bea086b74a72284884a7b2dbbeef6b040989
Author: artiga033 <artiga033@hotmail.com>
Date: Wed Apr 3 13:09:45 2024 +0800
Fix behavior of WatchList for Windows (#610)
commit c94b93b0602779989a9af8c023505e99055c8fe5
Author: Martin Tournoij <martin@arp242.net>
Date: Thu Dec 7 09:25:05 2023 +0000
Document ErrEventOverflow in a more sensible location