{"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:1717428299.0","currentOid":""},"activityList":{"items":[{"before":"e2aef20375a9626b4ce3a32786a6626678e9f19c","after":"9428f62793696d9a0cc1f26a63f63bb31da0516d","ref":"refs/heads/main","pushedAt":"2024-05-31T08:30:50.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 fallback path if renameat2 fails (#2733)\n\nMotivation:\r\n\r\n'renameat2' can fail with EINVAL if the RENAME_NOREPLACE flag isn't\r\nsupported. However, not all kernel versions support this flag which can\r\nresult in an error when creating a file 'transactionally'.\r\n\r\nUsing 'renameat2' only happens on Linux as a fallback when O_TMPFILE\r\nisn't available.\r\n\r\nModifications:\r\n\r\n- On Linux, fallback to a combination of 'stat' and 'rename' if 'renameat2' fails with EINVAL.\r\n- Add a couple of tests\r\n\r\nResult:\r\n\r\nFiles can still be created exclusively","shortMessageHtmlLink":"Add a fallback path if renameat2 fails (#2733)"}},{"before":"d8bf55d69347c5a92858f9768a462cbada8eb948","after":"e2aef20375a9626b4ce3a32786a6626678e9f19c","ref":"refs/heads/main","pushedAt":"2024-05-30T09:57:36.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":"Release file handles back to caller on failure to take ownership (#2715)\n\nMotivation:\r\n\r\nWhen taking ownership of input and output file descriptors in a bootstrap\r\nthe ownership of the file handles remains with the caller in the function\r\ntaking ownership fails. This is currently where _takingOwnershipOfDescriptors\r\nuses NIOFileHandle to take ownership of descriptors but then experiences a later\r\nfailure.\r\n\r\nModifications:\r\n\r\nIf an exception is throw in _takingOwnershipOfDescriptors release file descriptors\r\nfrom NIOFileHandle.\r\n\r\nResult:\r\n\r\nNo crash on failure to close file handles before end of scoped usage.","shortMessageHtmlLink":"Release file handles back to caller on failure to take ownership (#2715)"}},{"before":"9f63b12a05f79652ddbd901b97698b04ec37f20b","after":"d8bf55d69347c5a92858f9768a462cbada8eb948","ref":"refs/heads/main","pushedAt":"2024-05-29T13:59:07.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":"Add a version of 'write' for 'ByteBuffer' (#2730)\n\n* Add a version of 'write' for 'ByteBuffer'\r\n\r\nMotivation:\r\n\r\nAt the moment 'WritableFileHandleProtocol' is in terms of\r\n`some Sequence`. To use a `ByteBuffer` users must pass in the\r\nreadable view of the buffer, which is inconvenient.\r\n\r\nModifications:\r\n\r\n- Add an extension to `WritableFileHandleProtocol` which takes a\r\n `ByteBuffer`.\r\n\r\nResult:\r\n\r\nEasier to use API\r\n\r\n* fix docs","shortMessageHtmlLink":"Add a version of 'write' for 'ByteBuffer' (#2730)"}},{"before":"4612941246f51ce3fb686418014e2cdd7de74c2c","after":"9f63b12a05f79652ddbd901b97698b04ec37f20b","ref":"refs/heads/main","pushedAt":"2024-05-29T13:17:52.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":"Imrprove rename error (#2731)\n\nMotivation:\r\n\r\nThe name of the syscall used in errors for all rename calls is \"rename\".\r\nHowever, this isn't always correct, in some cases \"renamex_np\" is used,\r\nand in others \"renameat2\" is used.\r\n\r\nModifications:\r\n\r\n- Allow the name of the syscall to be provided to the rename error\r\n- Use the correct syscall name\r\n\r\nResult:\r\n\r\nBetter errors","shortMessageHtmlLink":"Imrprove rename error (#2731)"}},{"before":"7d1b76d27b2b124cbd945c3b3cee62a0e79b94e7","after":"4612941246f51ce3fb686418014e2cdd7de74c2c","ref":"refs/heads/main","pushedAt":"2024-05-23T11:58:59.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 storage indirection for FileSystemError (#2726)\n\nMotivation:\r\n\r\nExistentials are boxed if they are wider than 24 bytes. A number of\r\nvalue types in NIO are implemented with storage classes so that the\r\nalloaction is only paid for once. However, existential errors are\r\ntreated differently, they are unconditionally boxed. Implementing errors\r\nwith storage classes therefore introduces an unnecessary allocation.\r\n\r\nModifications:\r\n\r\n- Remove the storage class for FileSystemError\r\n- Remove the copy-on-write test\r\n\r\nResult:\r\n\r\nFewer allocations","shortMessageHtmlLink":"Remove storage indirection for FileSystemError (#2726)"}},{"before":"196ceab4b21ba5b84eea522f9829db31b7b91f19","after":"7d1b76d27b2b124cbd945c3b3cee62a0e79b94e7","ref":"refs/heads/main","pushedAt":"2024-05-23T09:07:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rnro","name":"Rick Newton-Rogers","path":"/rnro","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/104022490?s=80&v=4"},"commit":{"message":"testSimpleMPTCP should not fail for ENOPROTOOPT (#2725)\n\nMotivation:\r\n\r\nMPTCP implementations are permitted to return `ENOPROTOOPT` if MPTCP has\r\nbeen disabled. This should not report as a test failure.\r\n\r\nModifications:\r\n\r\nInstead of failing the test, log the permitted error and return.\r\n\r\nResult:\r\n\r\nNo more misleading testSimpleMPTCP test failures","shortMessageHtmlLink":"testSimpleMPTCP should not fail for ENOPROTOOPT (#2725)"}},{"before":"609469f9689603c8419f1402dd984b0faa763c54","after":"196ceab4b21ba5b84eea522f9829db31b7b91f19","ref":"refs/heads/main","pushedAt":"2024-05-20T16:52:06.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":"Fix race in TCPThroughputBenchmark (#2724)","shortMessageHtmlLink":"Fix race in TCPThroughputBenchmark (#2724)"}},{"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)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWMxjYwA","startCursor":null,"endCursor":null}},"title":"Activity · apple/swift-nio"}