{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":120498971,"defaultBranch":"main","name":"swift-nio","ownerLogin":"apple","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-02-06T17:47:31.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/10639145?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1715681534.0","currentOid":""},"activityList":{"items":[{"before":"6753556a85141986fea385505f2a454cf69df0eb","after":"609469f9689603c8419f1402dd984b0faa763c54","ref":"refs/heads/main","pushedAt":"2024-05-16T11:58:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PeterAdams-A","name":"Peter Adams","path":"/PeterAdams-A","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/63288215?s=80&v=4"},"commit":{"message":"Exclude unused privacy manifests. (#2716)\n\nMotivation:\r\n\r\nOn Darwin privacy manifests should be published as resources.\r\nOn other platforms they result in a warning if not excluded.\r\n\r\nModifications:\r\n\r\nAlter Package.swift to exclude privacy manifests when not included.\r\n\r\nResult:\r\n\r\nFewer warnings in non-darwin builds.","shortMessageHtmlLink":"Exclude unused privacy manifests. (#2716)"}},{"before":"5c378ed31ceaf21bf9ceb93433054b28ac1184da","after":"6753556a85141986fea385505f2a454cf69df0eb","ref":"refs/heads/main","pushedAt":"2024-05-14T14:42:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Add slack to rst allocation tests (#2722)\n\nMotivation:\r\n\r\nAllocation tests are slightly fragile to small changes.\r\n\r\nModifications:\r\n\r\nAllow 50 extra allocations over the 1000 cycles.\r\n\r\nResult:\r\n\r\nRst tests less flaky","shortMessageHtmlLink":"Add slack to rst allocation tests (#2722)"}},{"before":"543c7e9086c3da63c46d1eaee605d0c8db61f42a","after":null,"ref":"refs/heads/jw-docs-takeover","pushedAt":"2024-05-14T10:12:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"PeterAdams-A","name":"Peter Adams","path":"/PeterAdams-A","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/63288215?s=80&v=4"}},{"before":"cd51717926eb63340b156c86c59a19876792e3cb","after":"5c378ed31ceaf21bf9ceb93433054b28ac1184da","ref":"refs/heads/main","pushedAt":"2024-05-14T10:12:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"PeterAdams-A","name":"Peter Adams","path":"/PeterAdams-A","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/63288215?s=80&v=4"},"commit":{"message":"Document unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlobalExecutor (#2721)\n\nDocument what unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlobalExecutor's return value means","shortMessageHtmlLink":"Document unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlo…"}},{"before":null,"after":"543c7e9086c3da63c46d1eaee605d0c8db61f42a","ref":"refs/heads/jw-docs-takeover","pushedAt":"2024-05-10T17:06:01.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"weissi","name":"Johannes Weiss","path":"/weissi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/624238?s=80&v=4"},"commit":{"message":"Update PosixSingletons+ConcurrencyTakeOver.swift\n\nDocument what unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlobalExecutor's return value means","shortMessageHtmlLink":"Update PosixSingletons+ConcurrencyTakeOver.swift"}},{"before":"a5cb713246086a7999e293917ce362d53a30486d","after":"cd51717926eb63340b156c86c59a19876792e3cb","ref":"refs/heads/main","pushedAt":"2024-05-09T12:01:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"clean up @retroactive conformances (#2719)","shortMessageHtmlLink":"clean up @retroactive conformances (#2719)"}},{"before":"447b28105f33355c2911c47d25b3bf61cd4c292a","after":"a5cb713246086a7999e293917ce362d53a30486d","ref":"refs/heads/main","pushedAt":"2024-05-07T15:46:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"No longer need test discovery command line. (#2717)\n\nMotivation:\r\n\r\nCommand line argument has not been needed for several swift version.\r\n\r\nModifications:\r\n\r\nThis causes warnings in recent swift versions.\r\n\r\nResult:\r\n\r\nNo more warnings about swift command line when testing","shortMessageHtmlLink":"No longer need test discovery command line. (#2717)"}},{"before":"7739b40f233fd5c2047d8168cc2aea92436c3a44","after":null,"ref":"refs/heads/weissi-patch-1","pushedAt":"2024-04-29T11:11:25.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"weissi","name":"Johannes Weiss","path":"/weissi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/624238?s=80&v=4"}},{"before":"29e832adda20b3a6fe0df4bcbab27f7fb791f681","after":"447b28105f33355c2911c47d25b3bf61cd4c292a","ref":"refs/heads/main","pushedAt":"2024-04-29T11:11:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"weissi","name":"Johannes Weiss","path":"/weissi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/624238?s=80&v=4"},"commit":{"message":"concurrency takeover safe for 6.0 (#2710)","shortMessageHtmlLink":"concurrency takeover safe for 6.0 (#2710)"}},{"before":"970c4b8c846b9b5c354e398e41ffdfeb25935064","after":"7739b40f233fd5c2047d8168cc2aea92436c3a44","ref":"refs/heads/weissi-patch-1","pushedAt":"2024-04-29T10:35:15.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"weissi","name":"Johannes Weiss","path":"/weissi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/624238?s=80&v=4"},"commit":{"message":"Merge branch 'main' into weissi-patch-1","shortMessageHtmlLink":"Merge branch 'main' into weissi-patch-1"}},{"before":"8c3135b7d42a0cee040b35a727001129dac33187","after":"29e832adda20b3a6fe0df4bcbab27f7fb791f681","ref":"refs/heads/main","pushedAt":"2024-04-29T10:01:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Replace 'R' with 'Result' (#2709)\n\nMotivation:\r\n\r\nSingle letter names are discouraged but are used in a handful of places\r\nin NIOFileSystem.\r\n\r\nModifications:\r\n\r\n- Replace 'R' with 'ReturnType' where appropriate\r\n\r\nResult:\r\n\r\nClearer APIs","shortMessageHtmlLink":"Replace 'R' with 'Result' (#2709)"}},{"before":null,"after":"970c4b8c846b9b5c354e398e41ffdfeb25935064","ref":"refs/heads/weissi-patch-1","pushedAt":"2024-04-26T19:11:16.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"weissi","name":"Johannes Weiss","path":"/weissi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/624238?s=80&v=4"},"commit":{"message":"concurrency takeover safe for 6.0","shortMessageHtmlLink":"concurrency takeover safe for 6.0"}},{"before":"f2f4ce8be774cfa07b92b9e5ea602e7bd78ae026","after":"8c3135b7d42a0cee040b35a727001129dac33187","ref":"refs/heads/main","pushedAt":"2024-04-26T08:39:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add 'withTemporaryDirectory' (#2708)\n\nMotivation:\r\n\r\nNIOFileSystem can create the path of a temporary directory but doesn't\r\noffer any API to create and then remove a directory.\r\n\r\nModifications:\r\n\r\n- Add `withTemporaryDirectory`\r\n\r\nResult:\r\n\r\n- Users can get scoped access to a temporary directory which is\r\n subsequently removed for them\r\n- Resolves #2664","shortMessageHtmlLink":"Add 'withTemporaryDirectory' (#2708)"}},{"before":"d3bdffd5e47fdcf08ae9a3d35062c3ed03e3781f","after":"f2f4ce8be774cfa07b92b9e5ea602e7bd78ae026","ref":"refs/heads/main","pushedAt":"2024-04-26T08:02:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add `ByteBuffer` support to `BufferedWriter` (#2707)\n\nMotivation:\r\n\r\nThe `BufferedWriter` in `NIOFileSystem` has API in terms\r\nof `some Sequence`, meaning that you need to pass\r\n`byteBuffer.readableBytesView` which is a bit inconvenient.\r\n\r\nModifications:\r\n\r\n- Add overloads which allow you to pass `ByteBuffer` directly\r\n- Remove redundant availability guards; they are already applied to the\r\n type\r\n\r\nResult:\r\n\r\n- Better API for users\r\n- Resolves #2662","shortMessageHtmlLink":"Add ByteBuffer support to BufferedWriter (#2707)"}},{"before":"359c461e5561d22c6334828806cc25d759ca7aa6","after":"d3bdffd5e47fdcf08ae9a3d35062c3ed03e3781f","ref":"refs/heads/main","pushedAt":"2024-04-24T09:36:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Remove surplus Sendable requirements from FileSystem with methods (#2706)\n\nMotivation:\r\n\r\nMany of the filesystem with methods have a requirement that the\r\nresult type is sendable. In most cases this is not required as\r\nthe result is not shared or sent.\r\n\r\nModifications:\r\n\r\nRemove sendable requirement for result types where it is not required.\r\n\r\nResult:\r\n\r\nUsers will not have to make so many types sendable.","shortMessageHtmlLink":"Remove surplus Sendable requirements from FileSystem with methods (#2706"}},{"before":"bfc1a2cf6c0aa40cd37d0a0375651918fb2cb4ad","after":"359c461e5561d22c6334828806cc25d759ca7aa6","ref":"refs/heads/main","pushedAt":"2024-04-22T09:49:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Retain a ref to NIOAsyncWriter until channel active (#2703)\n\nMotivation:\r\n\r\nNIOAsyncChannel requires users to explicitly close it, this is typically\r\ndone by calling `executeThenClose`. If a `NIOAsyncChannel` isn't closed\r\nthen its outbound writer will hit a precondition failure on `deinit`.\r\nNot calling `executeThenClose` is a programmer error.\r\n\r\nHowever there are some sharp edges: if NIO never returns the\r\n`NIOAsyncChannel` to the caller (e.g. if a connect attempt fails) then\r\nnothing will finish the writer and precondition will fail in the deinit.\r\nWorking around this from a user perspective is non-obvious and requires\r\nkeep tracking of all `NIOAsyncChannel`s created from a connect attempt\r\nand closing the unused ones.\r\n\r\nWe still want to maintain the precondition when users don't close the\r\nchannel, one way of achieving this is by defining a point in time at\r\nwhich NIO hands responsibility of the channel to the user.\r\n\r\nModifications:\r\n\r\n- Retain the writer in the outbound writer handler until channel active\r\n- On successful connect attempts, the channel becomes active and the\r\n connected channel is returned to the caller.\r\n- On failed attempts channel active isn't called so the writer is\r\n retained until the handler is removed from the pipeline at which point it is\r\n finished.\r\n\r\nResult:\r\n\r\nFailed connect attempts don't result in precondition failures when using\r\nNIOAsyncChannel.","shortMessageHtmlLink":"Retain a ref to NIOAsyncWriter until channel active (#2703)"}},{"before":"fa540cf39b0f9a049a2ac06bccb20b6681d1b29a","after":"bfc1a2cf6c0aa40cd37d0a0375651918fb2cb4ad","ref":"refs/heads/main","pushedAt":"2024-04-22T07:55:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Tolerate IPv6 address resolution failure (#2704)\n\nMotivation:\r\n\r\nIn some cases IPv6 loopback address resolution fails in tests. We should\r\ntolerate this.\r\n\r\nModifications:\r\n\r\n- Swallow SocketAddressError.unknown\r\n\r\nResult:\r\n\r\nFewer flaky tests","shortMessageHtmlLink":"Tolerate IPv6 address resolution failure (#2704)"}},{"before":"8b43f703d43a7722aa75f200559a3b6c0b0d32a3","after":"fa540cf39b0f9a049a2ac06bccb20b6681d1b29a","ref":"refs/heads/main","pushedAt":"2024-04-17T09:48:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add privacy manifest (#2695)\n\nMotivation:\r\n\r\nNIOPosix and NIOFileSystem use stat(2) (or some variation of it). These\r\nare \"required reason APIs\" meaning that their usage and reason must be\r\ndeclared in a privacy manifest in order to be submitted to the App Store.\r\n\r\nModifications:\r\n\r\n- Add a privacy manifest to NIOPosix and NIOFileSystem\r\n\r\nResult:\r\n\r\nApps using NIO won't be rejected from App Store submission for missing\r\nprivacy manifests.","shortMessageHtmlLink":"Add privacy manifest (#2695)"}},{"before":"b222c26b5b9af1c12cb8d575b180f05b06c0f139","after":"8b43f703d43a7722aa75f200559a3b6c0b0d32a3","ref":"refs/heads/main","pushedAt":"2024-04-10T15:57:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Add support for `SWIFTCI_USE_LOCAL_DEPS` convention (#2699)\n\nTo use this package in utils/build-script pipeline","shortMessageHtmlLink":"Add support for SWIFTCI_USE_LOCAL_DEPS convention (#2699)"}},{"before":"082ac2186f0e472c7548ebbeca4d0f1a0cc84b1b","after":"b222c26b5b9af1c12cb8d575b180f05b06c0f139","ref":"refs/heads/main","pushedAt":"2024-04-09T17:43:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add a helper for setting or cascading optional promises (#2697)\n\nMotivation:\r\n\r\nMany operations accept an optional promise. It's not uncommon to batch\r\noperations (which may each have their own promise) and complete them\r\nas a single operation. Combining these optional promises is slightly\r\ntedious.\r\n\r\nModifications:\r\n\r\n- Add an extension to `Optional` to set or cascade a promise\r\n- If a promise exists, its result is cascaded to the provided promise.\r\n Otherwise the optional is set to the provided promise.\r\n\r\nResult:\r\n\r\nIt's easier to combine optional promises.","shortMessageHtmlLink":"Add a helper for setting or cascading optional promises (#2697)"}},{"before":"05fbcace24afbf36ed9b7103f13e59fea88addf8","after":"082ac2186f0e472c7548ebbeca4d0f1a0cc84b1b","ref":"refs/heads/main","pushedAt":"2024-03-27T16:26:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Add delegate for collecting eventloop tick metrics (#2608)\n\n* Add delegate for collecting eventloop tick metrics\r\n\r\n* add warning to docc\r\n\r\n* add missing headers\r\n\r\n---------\r\n\r\nCo-authored-by: Cory Benfield ","shortMessageHtmlLink":"Add delegate for collecting eventloop tick metrics (#2608)"}},{"before":"2d840c586fbfdebd10e6efd0b6fd613f13c08161","after":"05fbcace24afbf36ed9b7103f13e59fea88addf8","ref":"refs/heads/main","pushedAt":"2024-03-26T13:53:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Added file and line to NIOAsyncWriterError description (#2693)\n\nMotivation:\r\n\r\nEven though NIOAsyncWriterError captures the file and line of the error they are internal and not printed in the\r\ndescription.\r\n\r\nModifications:\r\n\r\n- made the 2 properties public\r\n- added them in the description\r\n\r\nResult:\r\n\r\nUsers will be able to access and see the line number and file where a NIOAsyncWriterError occurred","shortMessageHtmlLink":"Added file and line to NIOAsyncWriterError description (#2693)"}},{"before":"6b29fc3c2b6ebaebbfc2e27f6760b5321e9876d2","after":"2d840c586fbfdebd10e6efd0b6fd613f13c08161","ref":"refs/heads/main","pushedAt":"2024-03-26T13:15:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Use NIOThreadPool in NIOFileSystem (#2692)\n\nMotivation:\r\n\r\nThere are two thread pools: one in NIOFileSystem and one in NIOPosix; we\r\nshould avoid the duplication.\r\n\r\nModifications:\r\n\r\n- Switch to using NIOThreadPool\r\n- Remove the old thread pool and associated code\r\n- Add an init to FileSystem which takes a thread pool\r\n\r\nResult:\r\n\r\nLess duplication","shortMessageHtmlLink":"Use NIOThreadPool in NIOFileSystem (#2692)"}},{"before":"1f5be716feff6ffd4ae7af403f7d76b88398eeb8","after":"6b29fc3c2b6ebaebbfc2e27f6760b5321e9876d2","ref":"refs/heads/main","pushedAt":"2024-03-25T18:44:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Clarify Client/Server column headers (#2691)\n\nCo-authored-by: Cory Benfield ","shortMessageHtmlLink":"Clarify Client/Server column headers (#2691)"}},{"before":"10af7c92e74055c66c026b63185da06bc0ebc3de","after":"1f5be716feff6ffd4ae7af403f7d76b88398eeb8","ref":"refs/heads/main","pushedAt":"2024-03-25T15:52:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add cancellation to NIOThreadPool's async runIfActive (#2679)\n\nMotivation:\r\n\r\nTo dedupe the thread pool from NIOFileSystem and NIOPosix, the one from\r\nNIOPosix needs to gain support for cancellation for its async\r\n`runIfActive` function.\r\n\r\nModification:\r\n\r\n- Generate a work ID when submitting async work to the pool, add that ID\r\n to a set in the cancellation handler\r\n- Check the existence of the ID in the cancel set when dequeuing the\r\n work\r\n\r\nResult:\r\n\r\nQueued NIOThreadPool tasks can be cancelled before they are run.","shortMessageHtmlLink":"Add cancellation to NIOThreadPool's async runIfActive (#2679)"}},{"before":"778e3da621ec58ca57cc79332e794b20165dbc81","after":"10af7c92e74055c66c026b63185da06bc0ebc3de","ref":"refs/heads/main","pushedAt":"2024-03-25T12:56:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Remove temp directories after tests (#2690)\n\nMotivation:\r\n\r\nA couple of filesystem tests create directories but don't clean up after\r\nthemselves.\r\n\r\nModifications:\r\n\r\n- Add teardown blocks to remove the temp directories\r\n\r\nResult:\r\n\r\nNo leftover files after running tests","shortMessageHtmlLink":"Remove temp directories after tests (#2690)"}},{"before":"d15793cd2088cc636ad94e757f77884a52ada9e2","after":"778e3da621ec58ca57cc79332e794b20165dbc81","ref":"refs/heads/main","pushedAt":"2024-03-22T14:20:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add a NIOFileSystem shim (#2689)\n\nMotivation:\r\n\r\nRenaming the `NIOFileSystem` module to `_NIOFileSystem` is a breaking\r\nchange (which is okay, it's documented to be unstable API). However,\r\nusers will be presented with a wall of build errors on updating to the\r\nnext version of NIO. We can make the transition slightly easier for\r\nthem.\r\n\r\nModifications:\r\n\r\nAdd back a `NIOFileSystem` module which re-exports `_NIOFileSystem` and\r\nadd it as a target to the `_NIOFileSystem` product. This makes both\r\nmodules available to users. We can then remove `NIOFileSystem` after a\r\ngrace period.\r\n\r\nResult:\r\n\r\nUsers can still build using `NIOFileSystem` but can transition to\r\n`_NIOFileSystem`.","shortMessageHtmlLink":"Add a NIOFileSystem shim (#2689)"}},{"before":"f8c5e02ec468493ccaa77c8e979109e599c74b63","after":"d15793cd2088cc636ad94e757f77884a52ada9e2","ref":"refs/heads/main","pushedAt":"2024-03-20T11:34:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gjcairo","name":"Gustavo Cairo","path":"/gjcairo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5359423?s=80&v=4"},"commit":{"message":"Change BufferedReader.read(while:) signature (#2688)\n\nReturn whether EOF read or predicate doesn't hold anymore in BufferedReader.read(while:)","shortMessageHtmlLink":"Change BufferedReader.read(while:) signature (#2688)"}},{"before":"1e2b3e34afee7d68d99d982b72f9a17a40624c66","after":"f8c5e02ec468493ccaa77c8e979109e599c74b63","ref":"refs/heads/main","pushedAt":"2024-03-20T10:31:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Remove DispatchGroup and replace with condvar (#2687)\n\nMotivation:\r\n\r\nDispatchGroup can cause thread performance checker warnings in\r\nplaces we don't want them. We can avoid those warnings in some\r\ncases by using a condition variable instead.\r\n\r\nModifications:\r\n\r\n- Replaced a use of DispatchGroup with a condition variable\r\n in NIOThreadPool setup.\r\n- Removed an unnecessary DispatchGroup in the shutdown code\r\n\r\nResult:\r\n\r\nFewer thread performance checker warnings.","shortMessageHtmlLink":"Remove DispatchGroup and replace with condvar (#2687)"}},{"before":"df5745d6be2bdff1f76f35ef34de4a3ed52fbff3","after":"1e2b3e34afee7d68d99d982b72f9a17a40624c66","ref":"refs/heads/main","pushedAt":"2024-03-15T16:45:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Handle 'atomically' created files more gracefully when detached (#2682)\n\nMotivation:\r\n\r\nWhen a file is created 'atomically' and the descriptor is detached from\r\nits handle then the user is provided with the descriptor for a temporary\r\nfile, and the desired file is never created.\r\n\r\nModifications:\r\n\r\nWhere supported, atomically created files use a temporary unnamed file\r\nwhich is then linked on close. Elsewhere a temporary named file is\r\ncreated which is renamed on closed.\r\n\r\nTemporary unnamed files are linked in detach but not closed. Temporary\r\nnamed files are linked to the desired path before being unlinked.\r\n\r\n- Break out the logic for materializing a file created using a temporary\r\n unnamed file\r\n- Add syscalls and error mappings for link(2) and unlink(2)\r\n\r\nResult:\r\n\r\nAtomically created files behave as expected when detached","shortMessageHtmlLink":"Handle 'atomically' created files more gracefully when detached (#2682)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAES5FMcgA","startCursor":null,"endCursor":null}},"title":"Activity · apple/swift-nio"}