Commit Graph
10 Commits
Author SHA1 Message Date
T. R. Bernstein c037302c01 Report the directories a growing tree could not watch
Docs / docs (push) Canceled after 0s
Docs / deploy (push) Canceled after 0s
Extending an automatically watched tree to a new directory swallowed
every error, so a reached watch limit or an unreadable directory left
part of the tree unwatched without any sign. No call of the consumer is
running at that moment, so the failures now arrive in the event stream
as InotifyEvent.watchFailed, after the event that triggered the
extension. The library watches what it can first: a reached limit ends
the attempt, an unreadable directory is skipped with its subtree, and a
directory that vanished in between is not reported.

The buffer now carries the library's own events next to the kernel's,
which keeps them in order and hides the stream's element type. The
test runner drops root's DAC capabilities so that an unreadable
directory can be tested.
2026-09-19 00:56:31 +02:00
T. R. Bernstein 3c852a565c Deliver an event enum with the queue overflow as its own case
The stream's element is now the enum InotifyEvent, and the struct that
describes a change to a watched item is FileSystemEvent. A queue
overflow was an event with descriptor -1 and an empty path that every
consumer had to know about; as a case, the compiler makes them handle
it. The enum is also where failed watches of a growing tree will be
reported, since no call site can catch them.
2026-09-19 00:10:35 +02:00
T. R. Bernstein 8af25be549 Exclude items by shell pattern as well as by name
Docs / docs (push) Canceled after 0s
Docs / deploy (push) Canceled after 0s
Patterns such as `.*` or `@*` are matched against an item's own name
with `fnmatch`, in the same places as excluded names: resolving a
tree, extending a watch to a directory that appears later, and
delivering events. Dependents that prune large trees can now skip
whole families of directories without listing each name.
2026-09-16 11:21:45 +02:00
T. R. Bernstein 68f49e254c Restore inotify limits even when a test body throws
The limits were only written back after a successful body, so a
failing limit test left the shared kernel at the lowered values and
every later run failed with ENOSPC. The helper now restores in a
`defer` and can lower a chosen subset of the limits.
2026-09-13 23:06:28 +02:00
T. R. Bernstein 134e4e152d Implement watch exclusion lists
Docs / docs (push) Has been cancelled
Docs / deploy (push) Has been cancelled
Allow exclusion of directories when watching recursively.
2026-03-15 22:46:59 +01:00
T. R. Bernstein 76f91f67a6 Add integration tests for inofity limits
inotify exposes a /proc interface to limit kernel memory usage. If those
limits are set too low, inotify cannot add all watches. The integration
test verifies, that Inotify yields an error in that case.
2026-03-12 14:52:33 +01:00
T. R. Bernstein ffac6d17a5 Implement auto subtree watching of a directory
Allow recursively watching a directory while adding newly created
subdirectories to the inotify watch list.
2026-03-12 12:04:08 +01:00
T. R. Bernstein b41b82bd0f Implement recursive watching of a directory 2026-03-12 10:36:12 +01:00
T. R. Bernstein e44e1fc9b8 Adapt inotify timeouts in Tests
Inotify event stream is dependent on system usage. Increasing the
timeouts helps not having to repeat the integration tests.
2026-03-12 00:22:22 +01:00
T. R. Bernstein 58a05e9b61 Implement async event streaming 2026-03-12 00:22:17 +01:00