{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":21306961,"defaultBranch":"main","name":"fsnotify","ownerLogin":"fsnotify","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-06-28T16:47:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/8013877?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1714617941.0","currentOid":""},"activityList":{"items":[{"before":"13c962ecd53f1c73312e19951e0f31234288f172","after":null,"ref":"refs/heads/backend","pushedAt":"2024-05-02T02:45:41.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"}},{"before":"a618f076c8cfc422e6d1f6f1f881af9152aa7c82","after":"bec89034c5c5a875b2077b6b876cb085b527e7ee","ref":"refs/heads/main","pushedAt":"2024-05-02T02:45:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Split out Watcher and backends (#632)\n\nRather than have a bunch of Watcher types guarded by build tags, have\r\none Watcher that's always available which proxies to a backend\r\ninterface.\r\n\r\nThis will allow adding a polling watcher, fanotify, fsevents, and things\r\nlike that. There are no backends to select from yet, and I'm not 100%\r\nsure yet what an API for that would look like, but this sets up the\r\nscaffolding for all of it.\r\n\r\nBackends are per-watcher; originally I prototyped something that allows\r\nselecting it per-Add() call, but the bookkeeping on that became rather\r\ncomplex, and this use case is probably far too rare to spend a lot of\r\neffort on. People can still use different backends by using different\r\nWatchers; they'll just have to do the bookkeeping themselves.","shortMessageHtmlLink":"Split out Watcher and backends (#632)"}},{"before":"3fa20e8b367590082a047c9bc0997e96948922fe","after":"13c962ecd53f1c73312e19951e0f31234288f172","ref":"refs/heads/backend","pushedAt":"2024-05-02T02:13:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Split out Watcher and backends\n\nRather than have a bunch of Watcher types guarded by build tags, have\none Watcher that's always available which proxies to a backend\ninterface.\n\nThis will allow adding a polling watcher, fanotify, fsevents, and things\nlike that. There are no backends to select from yet, and I'm not 100%\nsure yet what an API for that would look like, but this sets up the\nscaffolding for all of it.\n\nBackends are per-watcher; originally I prototyped something that allows\nselecting it per-Add() call, but the bookkeeping on that became rather\ncomplex, and this use case is probably far too rare to spend a lot of\neffort on. People can still use different backends by using different\nWatchers; they'll just have to do the bookkeeping themselves.","shortMessageHtmlLink":"Split out Watcher and backends"}},{"before":"de770b84b5db04fa7fa4d64e93370777c7b523b2","after":"3fa20e8b367590082a047c9bc0997e96948922fe","ref":"refs/heads/backend","pushedAt":"2024-05-02T01:59:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Split out Watcher and backends\n\nRather than have a bunch of Watcher types guarded by build tags, have\none Watcher that's always available which proxies to a backend\ninterface.\n\nThis will allow adding a polling watcher, fanotify, fsevents, and things\nlike that. There are no backends to select from yet, and I'm not 100%\nsure yet what an API for that would look like, but this sets up the\nscaffolding for all of it.\n\nBackends are per-watcher; originally I prototyped something that allows\nselecting it per-Add() call, but the bookkeeping on that became rather\ncomplex, and this use case is probably far too rare to spend a lot of\neffort on. People can still use different backends by using different\nWatchers; they'll just have to do the bookkeeping themselves.","shortMessageHtmlLink":"Split out Watcher and backends"}},{"before":"c001e54cdc8d4b4ead921ecb3803ad7cf7ea8205","after":"de770b84b5db04fa7fa4d64e93370777c7b523b2","ref":"refs/heads/backend","pushedAt":"2024-05-02T01:54:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Split out Watcher and backends\n\nRather than have a bunch of Watcher types guarded by build tags, have\none Watcher that's always available which proxies to a backend\ninterface.\n\nThis will allow adding a polling watcher, fanotify, fsevents, and things\nlike that. There are no backends to select from yet, and I'm not 100%\nsure yet what an API for that would look like, but this sets up the\nscaffolding for all of it.\n\nBackends are per-watcher; originally I prototyped something that allows\nselecting it per-Add() call, but the bookkeeping on that became rather\ncomplex, and this use case is probably far too rare to spend a lot of\neffort on. People can still use different backends by using different\nWatchers; they'll just have to do the bookkeeping themselves.","shortMessageHtmlLink":"Split out Watcher and backends"}},{"before":"f4d08152c2f1da83be2e719502f39773544585e2","after":"c001e54cdc8d4b4ead921ecb3803ad7cf7ea8205","ref":"refs/heads/backend","pushedAt":"2024-05-01T22:23:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"fixup tests","shortMessageHtmlLink":"fixup tests"}},{"before":"5bd662fe5b75da802914e44cda59c97914e8c312","after":"f4d08152c2f1da83be2e719502f39773544585e2","ref":"refs/heads/backend","pushedAt":"2024-05-01T22:18:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"more","shortMessageHtmlLink":"more"}},{"before":null,"after":"5bd662fe5b75da802914e44cda59c97914e8c312","ref":"refs/heads/backend","pushedAt":"2024-05-01T22:05:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Split out Watcher and backends\n\nRather than have a bunch of Watcher types guarded by build tags, have\none Watcher that's always available which proxies to a backend\ninterface.\n\nThis will allow adding a polling watcher, fanotify, fsevents, and things\nlike that. There are no backends to select from yet, and I'm not 100%\nsure yet what an API for that would look like, but this sets up the\nscaffolding for all of it.\n\nBackends are per-watcher; originally I prototyped something that allows\nselecting it per-Add() call, but the bookkeeping on that became rather\ncomplex, and this use case is probably far too rare to spend a lot of\neffort on. People can still use different backends by using different\nWatchers; they'll just have to do the bookkeeping themselves.","shortMessageHtmlLink":"Split out Watcher and backends"}},{"before":"17d64486cd440bf48521ac824651572a323b6191","after":null,"ref":"refs/heads/inotify-recurse","pushedAt":"2024-05-01T20:24:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"}},{"before":"17d905351249492aab4599fb177a947b119d2094","after":"a618f076c8cfc422e6d1f6f1f881af9152aa7c82","ref":"refs/heads/main","pushedAt":"2024-05-01T20:24:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: add recursive watcher (#472)\n\nThis adds a recursive watcher for inotify.","shortMessageHtmlLink":"inotify: add recursive watcher (#472)"}},{"before":"f4c00e58deebb78a4be6ee304e3287c301d1f3fe","after":"17d64486cd440bf48521ac824651572a323b6191","ref":"refs/heads/inotify-recurse","pushedAt":"2024-05-01T20:17:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: add recursive watcher\n\nThis adds a recursive watcher for inotify.","shortMessageHtmlLink":"inotify: add recursive watcher"}},{"before":"d3727c39014dcedf3f777d2ceb1cb583cc85d66a","after":"f4c00e58deebb78a4be6ee304e3287c301d1f3fe","ref":"refs/heads/inotify-recurse","pushedAt":"2024-05-01T20:10:16.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: add recursive watcher\n\nThis adds a recursive watcher for inotify.","shortMessageHtmlLink":"inotify: add recursive watcher"}},{"before":"53b06a884d7164e2d93c1dcdda52b1e966b76aba","after":"17d905351249492aab4599fb177a947b119d2094","ref":"refs/heads/main","pushedAt":"2024-05-01T19:36:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Print diffs for test failures\n\nVendor my ztest diff library in here, so we don't add a dependency. This gives\nmuch nicer test failures:\n\n --- FAIL: TestScript (0.00s)\n --- FAIL: TestScript/watch-dir/bug-277 (0.96s)\n helpers_test.go:1021:\n\n --- have\n +++ want\n @@ -1,6 +1,5 @@\n RENAME /apple\n REMOVE /pear\n REMOVE /foo\n -have CREATE /pear ← /apple\n CREATE /foo\n CREATE /apple\n\nInstead of:\n\n --- FAIL: TestScript (0.00s)\n --- FAIL: TestScript/watch-dir/bug-277 (0.96s)\n helpers_test.go:1020:\n have:\n CREATE /foo\n REMOVE /foo\n CREATE /apple\n RENAME /apple\n CREATE /pear ← /apple\n REMOVE /pear\n want:\n CREATE /foo\n REMOVE /foo\n CREATE /apple\n RENAME /apple\n REMOVE /pear\n FAIL","shortMessageHtmlLink":"Print diffs for test failures"}},{"before":"fd34385b5231762612880276b47f5ae0d5501616","after":"b8c7b3f7db4e5952d37ea807de28fc9869c5f821","ref":"refs/heads/ci","pushedAt":"2024-05-01T08:07:42.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Run tests several times in CI\n\nI've been wanting to do this for ages to catch/fix flaky tests sooner,\nbut the tests were always too flaky and/or too slow (especially with the\nold vmactions), but now it seems to work quite well.","shortMessageHtmlLink":"Run tests several times in CI"}},{"before":"a3dc38e8e0a2837bfe812bac5b9286764b1771bf","after":"fd34385b5231762612880276b47f5ae0d5501616","ref":"refs/heads/ci","pushedAt":"2024-05-01T07:38:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Run tests several times in CI\n\nI've been wanting to do this for ages to catch/fix flaky tests sooner,\nbut the tests were always too flaky and/or too slow (especially with the\nold vmactions), but now it seems to work quite well.","shortMessageHtmlLink":"Run tests several times in CI"}},{"before":"2347d295afd6153d3ff06134fffb3b06e75eb1a5","after":"a3dc38e8e0a2837bfe812bac5b9286764b1771bf","ref":"refs/heads/ci","pushedAt":"2024-05-01T07:34:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Run tests several times in CI\n\nI've been wanting to do this for ages to catch/fix flaky tests sooner,\nbut the tests were always too flaky and/or too slow (especially with the\nold vmactions), but now it seems to work quite well.","shortMessageHtmlLink":"Run tests several times in CI"}},{"before":"6f0a0fa8903abeff3009ec58808694e5a73908a8","after":"2347d295afd6153d3ff06134fffb3b06e75eb1a5","ref":"refs/heads/ci","pushedAt":"2024-05-01T07:21:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"Run tests several times in CI\n\nI've been wanting to do this for ages to catch/fix flaky tests sooner,\nbut the tests were always too flaky and/or too slow (especially with the\nold vmactions), but now it seems to work quite well.","shortMessageHtmlLink":"Run tests several times in CI"}},{"before":"e6d40349b0f20d77178c2b2fc01acbf54e768253","after":"6f0a0fa8903abeff3009ec58808694e5a73908a8","ref":"refs/heads/ci","pushedAt":"2024-05-01T07:10:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"c","shortMessageHtmlLink":"c"}},{"before":"4d241405cec7217c6567ebb9cc14331e437a9e40","after":"e6d40349b0f20d77178c2b2fc01acbf54e768253","ref":"refs/heads/ci","pushedAt":"2024-05-01T06:59:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"ci","shortMessageHtmlLink":"ci"}},{"before":null,"after":"4d241405cec7217c6567ebb9cc14331e437a9e40","ref":"refs/heads/ci","pushedAt":"2024-05-01T06:46:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"ci","shortMessageHtmlLink":"ci"}},{"before":"452fddd24db315a9ef462850eaac8c74a6d67545","after":"d3727c39014dcedf3f777d2ceb1cb583cc85d66a","ref":"refs/heads/inotify-recurse","pushedAt":"2024-05-01T06:20:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"08e056d5add3119ce83d50f2425811bbf905d1b4","after":"53b06a884d7164e2d93c1dcdda52b1e966b76aba","ref":"refs/heads/main","pushedAt":"2024-05-01T06:19:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: implement WithNoFollow() (#631)\n\nOption to not follow symlinks, but watch the links themselves.\r\n\r\nUnexported for now, until it's supported everywhere.\r\n\r\nUpdates #227","shortMessageHtmlLink":"inotify: implement WithNoFollow() (#631)"}},{"before":"25efcb74e70358b750cdf1a464f8afa56fc052a7","after":null,"ref":"refs/heads/link","pushedAt":"2024-05-01T06:19:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"}},{"before":"e25545ee5c605037f8fae4c0240759a9070e955e","after":"25efcb74e70358b750cdf1a464f8afa56fc052a7","ref":"refs/heads/link","pushedAt":"2024-05-01T06:06:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: implement WithNoFollow()\n\nOption to not follow symlinks, but watch the links themselves.\n\nUpdates 227","shortMessageHtmlLink":"inotify: implement WithNoFollow()"}},{"before":"f3cbeebe590abea1baa68e1987b868f6df446a3f","after":"e25545ee5c605037f8fae4c0240759a9070e955e","ref":"refs/heads/link","pushedAt":"2024-05-01T05:49:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: implement WithNoFollow()\n\nOption to not follow symlinks, but watch the links themselves.\n\nUpdates 227","shortMessageHtmlLink":"inotify: implement WithNoFollow()"}},{"before":null,"after":"f3cbeebe590abea1baa68e1987b868f6df446a3f","ref":"refs/heads/link","pushedAt":"2024-05-01T05:49:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: implement WithNoFollow()\n\nOption to not follow symlinks, but watch the links themselves.\n\nUpdates 227","shortMessageHtmlLink":"inotify: implement WithNoFollow()"}},{"before":"b528cd251da4b6bb18a4d1dee9ec909be2607d6c","after":"08e056d5add3119ce83d50f2425811bbf905d1b4","ref":"refs/heads/main","pushedAt":"2024-05-01T05:21:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: support filtering events, add unsupported events (#629)\n\nThis adds the ability to only listen for some event types. If you're\r\nonly interested in Created events and you're getting a lot of Write\r\nevents then you're just wasting CPU cycles\r\n\r\nThis also adds the ability listen on extra unportable event types; since\r\nthis is so related I figured I might as well do both. Ideally we want to\r\n1) make it very very obvious you're doing something unportable, and 2)\r\nmake it reasonably easy \"fallback\" for platforms where this isn't\r\nsupported.\r\n\r\nUnportable events start with \"Unportable\", which should document their\r\nunportabilitiness. Also add a new Supports(Op) method, which should make\r\nadding fallback logic relatively painless.\r\n\r\nFor example, to use CloseWrite where supported, but falling back to\r\nWrite when it's not:\r\n\r\n\tvar op fsnotify.Op\r\n\tif w.Supports(fsnotify.UnportableCloseWrite) {\r\n\t\top |= fsnotify.UnportableCloseWrite\r\n\t} else {\r\n\t\top |= fsnotify.Create | fsnotify.Write\r\n\t}\r\n\tw.AddWith(\"/tmp\", fsnotify.WithEvents(op))\r\n\r\nAnd then you can deal with this in the write loop. There's a full\r\nexample in cmd/fsnotify/closewrite.go\r\n\r\nAll of this is unexported for now, until support for other platforms has\r\nbeen added.\r\n\r\nUpdates #7\r\nUpdates #519","shortMessageHtmlLink":"inotify: support filtering events, add unsupported events (#629)"}},{"before":"0a0b0828fd1efc7909d39dd70a9a07a1f2fdeffd","after":null,"ref":"refs/heads/events","pushedAt":"2024-05-01T05:21:29.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"}},{"before":"27932219f29783ef981773f76a38d39dd8fda43b","after":"0a0b0828fd1efc7909d39dd70a9a07a1f2fdeffd","ref":"refs/heads/events","pushedAt":"2024-05-01T05:13:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: support filtering events, add unsupported events\n\nThis adds the ability to only listen for some event types. If you're\nonly interested in Created events and you're getting a lot of Write\nevents then you're just wasting CPU cycles\n\nThis also adds the ability listen on extra unportable event types; since\nthis is so related I figured I might as well do both. Ideally we want to\n1) make it very very obvious you're doing something unportable, and 2)\nmake it reasonably easy \"fallback\" for platforms where this isn't\nsupported.\n\nUnportable events start with \"Unportable\", which should document their\nunportabilitiness. Also add a new Supports(Op) method, which should make\nadding fallback logic relatively painless.\n\nFor example, to use CloseWrite where supported, but falling back to\nWrite when it's not:\n\n\tvar op fsnotify.Op\n\tif w.Supports(fsnotify.UnportableCloseWrite) {\n\t\top |= fsnotify.UnportableCloseWrite\n\t} else {\n\t\top |= fsnotify.Create | fsnotify.Write\n\t}\n\tw.AddWith(\"/tmp\", fsnotify.WithEvents(op))\n\nAnd then you can deal with this in the write loop. There's a full\nexample in cmd/fsnotify/closewrite.go\n\nAll of this is unexported for now, until support for other platforms has\nbeen added.\n\nUpdates 7\nUpdates 519","shortMessageHtmlLink":"inotify: support filtering events, add unsupported events"}},{"before":"9b2980e6c08bb90ccbdcfe3c25a831c0df37851d","after":"27932219f29783ef981773f76a38d39dd8fda43b","ref":"refs/heads/events","pushedAt":"2024-05-01T04:58:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"arp242","name":"Martin Tournoij","path":"/arp242","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1032692?s=80&v=4"},"commit":{"message":"inotify: support filtering events, add unsupported events\n\nThis adds the ability to only listen for some event types. If you're\nonly interested in Created events and you're getting a lot of Write\nevents then you're just wasting CPU cycles\n\nThis also adds the ability listen on extra unportable event types; since\nthis is so related I figured I might as well do both. Ideally we want to\n1) make it very very obvious you're doing something unportable, and 2)\nmake it reasonably easy \"fallback\" for platforms where this isn't\nsupported.\n\nUnportable events start with \"Unportable\", which should document their\nunportabilitiness. Also add a new Supports(Op) method, which should make\nadding fallback logic relatively painless.\n\nFor example, to use CloseWrite where supported, but falling back to\nWrite when it's not:\n\n\tvar op fsnotify.Op\n\tif w.Supports(fsnotify.UnportableCloseWrite) {\n\t\top |= fsnotify.UnportableCloseWrite\n\t} else {\n\t\top |= fsnotify.Create | fsnotify.Write\n\t}\n\tw.AddWith(\"/tmp\", fsnotify.WithEvents(op))\n\nAnd then you can deal with this in the write loop. There's a full\nexample in cmd/fsnotify/closewrite.go\n\nAll of this is unexported for now, until support for other platforms has\nbeen added.\n\nUpdates 7\nUpdates 519","shortMessageHtmlLink":"inotify: support filtering events, add unsupported events"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEP1-iQwA","startCursor":null,"endCursor":null}},"title":"Activity · fsnotify/fsnotify"}