{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":248104328,"defaultBranch":"master","name":"soju","ownerLogin":"emersion","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2020-03-18T00:45:36.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/506932?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1724442946.0","currentOid":""},"activityList":{"items":[{"before":"d00eda19423c5e9d1eb3b2f7276e93593993810b","after":"3ef9cb8f0945cbbdb90b0967d393d81b78d28aec","ref":"refs/heads/master","pushedAt":"2024-09-17T16:31:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"fileupload: Fail early on file too large\n\nAlso advertise the file size limit on file too large.","shortMessageHtmlLink":"fileupload: Fail early on file too large"}},{"before":"c13c50c4a3ec27e7d656f8974ff761b5541ff336","after":"d00eda19423c5e9d1eb3b2f7276e93593993810b","ref":"refs/heads/master","pushedAt":"2024-09-17T06:49:24.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Remove remaining comments about multi-upstream mode\n\nThis has been nuked long ago.","shortMessageHtmlLink":"Remove remaining comments about multi-upstream mode"}},{"before":"a25b69256705937363e0ad18a7086343eea07550","after":"c13c50c4a3ec27e7d656f8974ff761b5541ff336","ref":"refs/heads/master","pushedAt":"2024-09-10T17:56:18.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Add per-user max-networks limit\n\nThis is formatted in user status as, e.g.:\n\n delthas (admin, disabled): 2 networks (max 3)","shortMessageHtmlLink":"Add per-user max-networks limit"}},{"before":"7837e8cf59c3fb686c3325fbac4e65a15ef33e7b","after":"a25b69256705937363e0ad18a7086343eea07550","ref":"refs/heads/master","pushedAt":"2024-08-18T16:36:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"server: close admin socket on CAP/NICK/USER/PASS","shortMessageHtmlLink":"server: close admin socket on CAP/NICK/USER/PASS"}},{"before":"4f88dbe09e72d1f0dd628436aba53f1b271ca9f3","after":"7837e8cf59c3fb686c3325fbac4e65a15ef33e7b","ref":"refs/heads/master","pushedAt":"2024-08-18T09:13:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"conn: rework concurrency logic\n\nThe conn type implements a message queue which supports sending\nand closing from multiple goroutines.\n\nReplace the old system with:\n\n- A buffered channel of messages to be sent. It is never closed\n (because closing a channel while a sender is blocked panics).\n- A broadcast channel closed when the connection is closed. Used to\n immediately unblock send/receive operations on the message\n channel.\n- An atomic bool indicating whether the connection is closed. It's\n primarily used to avoid closing the broadcast channel twice.\n\nThe previous version had the following defects:\n\n- Use of sync.Mutex made SendMessage/Close block each other.\n- conn.Close was not called when the remote closed the connection,\n leaving the send side of conn open.","shortMessageHtmlLink":"conn: rework concurrency logic"}},{"before":"8c3ef5bbf094e857eafff756f50a43fd2ffb6a2f","after":"4f88dbe09e72d1f0dd628436aba53f1b271ca9f3","ref":"refs/heads/master","pushedAt":"2024-08-17T20:38:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"deps: replace nhooyr.io/websocket with github.com/coder/websocket\n\nnhooyr.io/websocket is deprecated. From the latest release on github:\n\n\tThis library is now deprecated. Please do not use this library\n\tany longer at the nhooyr.io/websocket import path. It will not\n\treceive any further updates. Coder is now maintaining it at\n\thttps://github.com/coder/websocket under the\n\tgithub.com/coder/websocket import path.\n\nBecause there are so few references, directly replace with the new\ndependency instead of a go.mod replace directive.\n\nReference: https://coder.com/blog/websocket\nSigned-off-by: Tim Culverhouse ","shortMessageHtmlLink":"deps: replace nhooyr.io/websocket with github.com/coder/websocket"}},{"before":"b0d2e0a1b4d00a7876e2a928f2cd05d66df30c7f","after":"8c3ef5bbf094e857eafff756f50a43fd2ffb6a2f","ref":"refs/heads/master","pushedAt":"2024-08-14T17:24:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"upstream: prevent notifications that don't cause messages\n\nDon't show notifications from detached channels that aren't relaying any\nmessages.","shortMessageHtmlLink":"upstream: prevent notifications that don't cause messages"}},{"before":null,"after":"22dfefd680cc6764e9a89173df35f74679556382","ref":"refs/heads/rework-conn","pushedAt":"2024-08-11T09:48:31.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"conn: rework concurrency logic\n\nThe conn type implements a message queue which supports sending\nand closing from multiple goroutines.\n\nReplace the old system with:\n\n- A buffered channel of messages to be sent. It is never closed\n (because closing a channel while a sender is blocked panics).\n- A broadcast channel closed when the connection is closed. Used to\n immediately unblock send/receive operations on the message\n channel.\n- An atomic bool indicating whether the connection is closed. It's\n primarily used to avoid closing the broadcast channel twice.\n\nThe previous version had the following defects:\n\n- Use of sync.Mutex made SendMessage/Close block each other.\n- conn.Close was not called when the remote closed the connection,\n leaving the send side of conn open.","shortMessageHtmlLink":"conn: rework concurrency logic"}},{"before":"74bda7a0fc628e5d693afa62aa3bdc659d6765e8","after":"b0d2e0a1b4d00a7876e2a928f2cd05d66df30c7f","ref":"refs/heads/master","pushedAt":"2024-08-01T18:25:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Revert \"conn: fix goroutine leak\"\n\nThis reverts commit 07502541e473155874fe3e525e8d26a814ec3163.\n\nThis commit causes a deadlock. A deadlock is worse than a leak, so\nrevert for now.","shortMessageHtmlLink":"Revert \"conn: fix goroutine leak\""}},{"before":"bcd85ab6d5d5810c7b4e96815ea394e2e33bd0de","after":"74bda7a0fc628e5d693afa62aa3bdc659d6765e8","ref":"refs/heads/master","pushedAt":"2024-07-31T18:08:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"contrib/znc-import: recommend using sojudb for changing user passwords\n\nchange-password is a subcommand of sojudb. znc-import does not import user passwords and needs to tell the user to use that tool.","shortMessageHtmlLink":"contrib/znc-import: recommend using sojudb for changing user passwords"}},{"before":"bb234c8348d5c14c6484de66f11e0b79ddbfc1eb","after":"bcd85ab6d5d5810c7b4e96815ea394e2e33bd0de","ref":"refs/heads/master","pushedAt":"2024-07-31T18:07:57.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"upstream: fix accidental variable shadowing\n\nSigned-off-by: Conrad Hoffmann ","shortMessageHtmlLink":"upstream: fix accidental variable shadowing"}},{"before":"07502541e473155874fe3e525e8d26a814ec3163","after":"bb234c8348d5c14c6484de66f11e0b79ddbfc1eb","ref":"refs/heads/master","pushedAt":"2024-07-08T21:16:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"conn: document conn.ReadMessage","shortMessageHtmlLink":"conn: document conn.ReadMessage"}},{"before":"3667102e72ad30bdaab2b237d4c735e4fdb18fff","after":"07502541e473155874fe3e525e8d26a814ec3163","ref":"refs/heads/master","pushedAt":"2024-07-08T21:06:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"conn: fix goroutine leak\n\nAs is, soju leaks goroutines on client disconnects, because the closure\nstarted as goroutine in newConn never finishes. It gets stuck in the\nfor loop annotated as \"draining the outgoing channel\", because the\noutgoing channel is in fact never closed.\n\nThis commit fixes the issue by calling conn.Close rather than\nconn.conn.Close, which closes not only the underlying net.Conn (in\nc.conn), but also the channel.","shortMessageHtmlLink":"conn: fix goroutine leak"}},{"before":"d65c1654b804f0279f21d39c15b1e9fcee955832","after":"3667102e72ad30bdaab2b237d4c735e4fdb18fff","ref":"refs/heads/master","pushedAt":"2024-07-08T18:37:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"conn: return net.ErrClosed in conn.Close","shortMessageHtmlLink":"conn: return net.ErrClosed in conn.Close"}},{"before":"a3716dc2d27cec0bdd73d4a32b86e809c45fd9ba","after":"d65c1654b804f0279f21d39c15b1e9fcee955832","ref":"refs/heads/master","pushedAt":"2024-07-08T18:35:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Stop dereferencing *conn\n\nThe *conn pointer returned by newConn is dereferenced in\nnewDownstreamConn and connectToUpstream (a premature optimization).\nAs a result, the whole struct is copied and the internal newConn\ngoroutine works with a different chunk of memory than\ndownstreamConn and upstreamConn.","shortMessageHtmlLink":"Stop dereferencing *conn"}},{"before":"9a36e6730d7c9e0a68f2296d5411d9cf50e2d9b1","after":"a3716dc2d27cec0bdd73d4a32b86e809c45fd9ba","ref":"refs/heads/master","pushedAt":"2024-07-08T06:35:04.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"downstream: reflect AWAY status in self-WHO reply without upstream","shortMessageHtmlLink":"downstream: reflect AWAY status in self-WHO reply without upstream"}},{"before":"29bdc1aa45c8143e7f188e2341221377d035ff21","after":"9a36e6730d7c9e0a68f2296d5411d9cf50e2d9b1","ref":"refs/heads/master","pushedAt":"2024-07-04T19:35:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"contrib/clients: remove note about chat.sr.ht\n\nThis document is not a good place for SourceHut-specific\nrecommendations.","shortMessageHtmlLink":"contrib/clients: remove note about chat.sr.ht"}},{"before":"0ced56a155950d855dcaf9b1a27d116049c539f7","after":"29bdc1aa45c8143e7f188e2341221377d035ff21","ref":"refs/heads/master","pushedAt":"2024-07-04T19:28:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Migrate to Codeberg","shortMessageHtmlLink":"Migrate to Codeberg"}},{"before":"d5dd194b0194be0c194d20dddea34d97b2167351","after":"0ced56a155950d855dcaf9b1a27d116049c539f7","ref":"refs/heads/master","pushedAt":"2024-07-01T13:14:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"doc: use openssl -verify_quiet instead of discarding stderr\n\nstderr prints useful information when openssl fails to connect to\nthe server. Use -verify_quiet to reduce chatter a bit and still\nretain error messages.","shortMessageHtmlLink":"doc: use openssl -verify_quiet instead of discarding stderr"}},{"before":"ae203388e17cd02c04dc429a49f62131243cec9c","after":"d5dd194b0194be0c194d20dddea34d97b2167351","ref":"refs/heads/master","pushedAt":"2024-06-30T22:17:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"downstream: fix WHO membership prefix order without server-specific flags\n\nGregory noticed that my last-minute edit was wrong [1]. Indeed,\nwhen i == -1, that means that Flags only contains 'H'/'G'/'*' and\nnothing else. We need to append the membership prefix in that case.\n\n[1]: https://lists.sr.ht/~emersion/soju-dev/%3C20240630213249.13061-2-greg@gpanders.com%3E#%3CD2DP18U4PP40.DBYWGA8WM2KN@gpanders.com%3E\n\nFixes: ae203388e17c (\"Fix channel membership prefixes in cached WHO replies\")\nReported-by: Gregory Anders ","shortMessageHtmlLink":"downstream: fix WHO membership prefix order without server-specific f…"}},{"before":"965ce9cdb9b85973473a646a2c1105ddf64ec57a","after":"ae203388e17cd02c04dc429a49f62131243cec9c","ref":"refs/heads/master","pushedAt":"2024-06-30T21:51:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Fix channel membership prefixes in cached WHO replies\n\nChannel membership prefixes in WHO replies (RPL_WHOREPLY and\nRPL_WHOSPCRPL) were cached in the user's flags, which meant those same\nprefixes were returned on future cache hits, even though the flags are\nchannel specific.\n\nStrip the channel membership prefixes from the user's flags before\nadding a user to the cache and add the prefixes back when reading from\nthe cache (using the membership info from the NAMES reply).","shortMessageHtmlLink":"Fix channel membership prefixes in cached WHO replies"}},{"before":"0c86b96e86ce7b3cf8e1c823b583e2b375ff8a54","after":"965ce9cdb9b85973473a646a2c1105ddf64ec57a","ref":"refs/heads/master","pushedAt":"2024-06-30T21:44:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"xirc: fix chunking in GenerateSASL\n\nThe SASL response needs to be encoded into base64, then split into\n400 byte chunks. We were doing it in reverse order.","shortMessageHtmlLink":"xirc: fix chunking in GenerateSASL"}},{"before":null,"after":"362665f3b17f8abad3bf8b8092f69d84712e751c","ref":"refs/heads/multi-url-highlight","pushedAt":"2024-06-28T20:44:04.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"wip: test for double highlight in URL","shortMessageHtmlLink":"wip: test for double highlight in URL"}},{"before":"9e0d0b0ff45a860534fbbf5d3a17f52bd9fdfff8","after":"0c86b96e86ce7b3cf8e1c823b583e2b375ff8a54","ref":"refs/heads/master","pushedAt":"2024-06-28T20:14:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Set IRC, WS and HTTP Unix sockets' mode to 775\n\nIt was 755 before, so a reverse proxy running as a different user didn't\nhave permission to connect.","shortMessageHtmlLink":"Set IRC, WS and HTTP Unix sockets' mode to 775"}},{"before":"8e00b5924f9be44688b94e36a6187e464432d200","after":null,"ref":"refs/heads/website","pushedAt":"2024-06-10T18:19:30.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"}},{"before":"75a58cc2cb078a17cbb14249af85c8683d06deee","after":"9e0d0b0ff45a860534fbbf5d3a17f52bd9fdfff8","ref":"refs/heads/master","pushedAt":"2024-06-09T20:36:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"doc: document username argument for \"user status\"","shortMessageHtmlLink":"doc: document username argument for \"user status\""}},{"before":"3a4e54bc45bdd85e5173f5c945d5554573d6d89d","after":"75a58cc2cb078a17cbb14249af85c8683d06deee","ref":"refs/heads/master","pushedAt":"2024-06-09T18:44:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"service: user status: accept username filter\n\nThis is useful for getting information about a particular user,\nespecially when the server has more than the max amount of users\nreturned by the command.","shortMessageHtmlLink":"service: user status: accept username filter"}},{"before":"6d0f7330e37360d791266bc31d026c4f2cfaad96","after":"3a4e54bc45bdd85e5173f5c945d5554573d6d89d","ref":"refs/heads/master","pushedAt":"2024-05-22T15:05:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Upgrade dependencies","shortMessageHtmlLink":"Upgrade dependencies"}},{"before":"9b03478242414fb74cbcae6eab00375d1e6206dd","after":null,"ref":"refs/heads/srht","pushedAt":"2024-05-21T09:30:13.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"}},{"before":"0ecc9cd0426da80492b555cdadb8e068fbae250b","after":"6d0f7330e37360d791266bc31d026c4f2cfaad96","ref":"refs/heads/master","pushedAt":"2024-05-09T07:02:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"emersion","name":"Simon Ser","path":"/emersion","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/506932?s=80&v=4"},"commit":{"message":"Remove RLIMIT_NOFILE bump\n\nStarting with Go 1.19 [0] the file limit is increased by default.\n\n[0]: https://github.com/golang/go/commit/8427429c592588af8c49522c76b3e0e0e335d270","shortMessageHtmlLink":"Remove RLIMIT_NOFILE bump"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xN1QxNjozMToxMi4wMDAwMDBazwAAAAS4w5Lm","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xN1QxNjozMToxMi4wMDAwMDBazwAAAAS4w5Lm","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNS0wOVQwNzowMjo0NS4wMDAwMDBazwAAAARFVx_5"}},"title":"Activity · emersion/soju"}