{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":185026,"defaultBranch":"next","name":"fred","ownerLogin":"hyphanet","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2009-04-25T01:00:27.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/123650150?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1719150808.0","currentOid":""},"activityList":{"items":[{"before":"4c3ffb183452314cc777d69a90418a73d095adf8","after":"4029f511015119c12612c6c8bf1b7ca1fe28f46f","ref":"refs/heads/next","pushedAt":"2024-08-07T05:50:51.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'chris-ch-next-upgrade-gradle-7.6' into next\n\nHashes of libs distributed in dependencies.properties manually\nchecked against the verification-metadata.xml","shortMessageHtmlLink":"Merge branch 'chris-ch-next-upgrade-gradle-7.6' into next"}},{"before":"4ebce6987f776307f098466011a2d15ed63d84f0","after":"4c3ffb183452314cc777d69a90418a73d095adf8","ref":"refs/heads/next","pushedAt":"2024-07-28T09:01:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Replace Java 10 Set copy with Java 8 compatible creation\n\nthank you for the review!","shortMessageHtmlLink":"Replace Java 10 Set copy with Java 8 compatible creation"}},{"before":"ff698b8366e02fd87648b785c86d2e9087039894","after":"4ebce6987f776307f098466011a2d15ed63d84f0","ref":"refs/heads/next","pushedAt":"2024-07-25T10:22:19.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'resilience-against-plugin-list-exception' of github.com:ArneBab/fred-staging-1 into next","shortMessageHtmlLink":"Merge branch 'resilience-against-plugin-list-exception' of github.com…"}},{"before":"76562effdfecb24cd9c1272fcffa623f4940b8b9","after":"ff698b8366e02fd87648b785c86d2e9087039894","ref":"refs/heads/next","pushedAt":"2024-07-25T10:13:04.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'IPV6addresses' of github.com:torusrxxx/fred into next","shortMessageHtmlLink":"Merge branch 'IPV6addresses' of github.com:torusrxxx/fred into next"}},{"before":"9fe0c1b936ad8fa27a65d8f930f2a5cb2d7cd027","after":"76562effdfecb24cd9c1272fcffa623f4940b8b9","ref":"refs/heads/next","pushedAt":"2024-07-23T17:33:47.000Z","pushType":"push","commitsCount":13,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'size-zero-to-isEmpty' of github.com:Juiceman/fred into next","shortMessageHtmlLink":"Merge branch 'size-zero-to-isEmpty' of github.com:Juiceman/fred into …"}},{"before":"69562945bb781254e13a832182a175c52b9f16f5","after":"9fe0c1b936ad8fa27a65d8f930f2a5cb2d7cd027","ref":"refs/heads/next","pushedAt":"2024-07-23T17:28:14.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'note-the-installers-and-signing' of github.com:ArneBab/fred-staging-1 into next","shortMessageHtmlLink":"Merge branch 'note-the-installers-and-signing' of github.com:ArneBab/…"}},{"before":"83b892b2ad6688b6da3e46e7dc9e8e26f3de63a6","after":"69562945bb781254e13a832182a175c52b9f16f5","ref":"refs/heads/next","pushedAt":"2024-06-23T13:53:35.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Update default bookmark editions","shortMessageHtmlLink":"Update default bookmark editions"}},{"before":"b29f30ff7dea2ffe6ec2e6a68744ebd1a9fa1a3b","after":null,"ref":"refs/tags/build01498","pushedAt":"2024-06-23T13:53:19.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"}},{"before":"e403cfada569b77c56414b7612be4304f3dff1f9","after":"83b892b2ad6688b6da3e46e7dc9e8e26f3de63a6","ref":"refs/heads/next","pushedAt":"2024-06-23T11:46:58.000Z","pushType":"push","commitsCount":12,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'update-news-for-1498' of github.com:ArneBab/fred-staging-1 into next","shortMessageHtmlLink":"Merge branch 'update-news-for-1498' of github.com:ArneBab/fred-stagin…"}},{"before":"249ae7ae04b462e1c77f3e426fdfca2593987b3e","after":"e403cfada569b77c56414b7612be4304f3dff1f9","ref":"refs/heads/next","pushedAt":"2024-05-10T20:37:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Revert \"Only link indexes via the index of indexes.\"\n\nThis reverts commit fda9bdb81d4077747db365a922ee7afe30f10584.\n\nThere’s a contingency plan now to enable updating the index in case\nits uploader becomes inactive or cannot react when required by law. It\nneeds multiple core devs working together, but should be fast enough.","shortMessageHtmlLink":"Revert \"Only link indexes via the index of indexes.\""}},{"before":"fbc723cccf00e1beccdf35bbf306c488d18ba6c5","after":"249ae7ae04b462e1c77f3e426fdfca2593987b3e","ref":"refs/heads/next","pushedAt":"2024-04-28T12:07:58.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Build 1498\n\nSee tag for changelog.","shortMessageHtmlLink":"Build 1498"}},{"before":"fbc723cccf00e1beccdf35bbf306c488d18ba6c5","after":null,"ref":"refs/tags/build01498","pushedAt":"2024-04-28T12:06:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"}},{"before":"6010217681603809a0de33d3fc4902b5acec20ae","after":null,"ref":"refs/tags/testing-build-1498-pre1","pushedAt":"2024-04-28T12:05:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"}},{"before":"838c5cdd86d38ad8bcc295ef7c3eea8e1c180c21","after":null,"ref":"refs/tags/build01498-pre1","pushedAt":"2024-04-28T12:05:10.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"}},{"before":"89fdffe6e6587820673ba0cd520a580037d3c47d","after":"8465bc5ba00e64c227ecdbd61c755253ac1160cb","ref":"refs/heads/use-new-iptocountry-source-zip","pushedAt":"2024-04-26T21:48:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Use the Tor DB as GeoIP database\n\na) The DB file size is bigger. Current IpToCountry.dat is 1.2 MiB, Tor\nDB is 4 MiB, optimized Tor DB is 2 MiB. \"Optimized\" means I used 'sed'\nto remove an unnecessary column in the DB. If you really want to go\nfor size, you can zip it to ~700 KiB, this increases runtime a bit,\nbut it's still ~15x faster than the old method.\n\nb) Tor uses \"??\" instead of \"ZZ\" for unknown codes, and still uses\n\"CS\" which stands for Serbia and Montenegro - the country stopped\nexisting in 2006. Maybe someone could ask them why their DB uses\n\"CS\"... This can be solved easily by just replacing them with 'sed'.\n\nc) The new DB is sorted in ascending order, which means that the\nfunction to do the binary search has to be changed (right now I simply\nreverse the array), which saves another ~6 ms. I don't know how to do\nthis.\n\nhuman-readable text file in a zip.\n\nAdvantages:\n- It's human readable\n- It's easy to update because we can use Tor geoip\n- It's a lot faster than the base85 approach\n- It has a smaller file size\n\n==== New zip file ====\n\nThe code no longer uses the IpToCountry.dat file and instead uses a zip file called IpToCountry.zip. This zip file is expected to contain exactly one text file in the Tor geoip format according to the spec below.\nThe zip file should be compressed to save space (~2 MiB uncompressed -> 0.7 MiB compressed).\n\n==== New IpToCountry.txt file ====\n\nFormat for each line: ,\nExample: 16781312,JP\nThis is like to old format, but not base85 encoded.\n\nEmpty lines are allowed.\nComments may start with any symbol other than a number.\n\n----------------------------------\n\nGet the raw .txt file here: https://github.com/torproject/tor/raw/main/src/config/geoip\n\nThe file has to be processed with the following three 'sed' commands:\n\nsed -E -i 's/([0-9]*),[0-9]*,([A-Z]*)/\\1,\\2/g' IpToCountry.txt && sed -E -i 's/,\\?\\?/,ZZ/g' IpToCountry.txt && sed -E -i 's/,CS/,RS/g' IpToCountry.txt\n\n1) Remove last column, because Tor geoip format is: fromIP,toIP,countryCode. Freenet does not need to toIP value, the binary search algorithm will take care of this.\n2) Replace '??' with 'ZZ' for unknown countries, because '??' is not in the ISO 3166 standard.\n3) Replace 'CS' with 'RS' because the country 'CS' is not in the ISO 3166 standard.\n\nZip this text file into IpToCountry.zip and place it in the main Freenet folder.\n\n==== Code changes ====\n\nThe base85 code is left in the source as well as the file reader for the old format.\n\n- src/freenet/clients/http/geoip/IPConverter.java\n-- zip reader to save space.\n-- ArrayList is allocated with 180000 slots to have it not resize that many times (does not matter for speed though anyway).\n-- Ignore empty lines and lines that start with anything but a number (comments).\n-- Cast (int) to the Long value, exactly like the old code did.\n-- Get country, identical to old code.\n-- Reverse the List, because the binary search expects the list to be in descending order. Takes <10 ms.\n-- Convert the List to int[]/short[] to save lots of memory. See below for explanation. Takes <10 ms.\n-- Catch all possible errors.\n\n-- I did not feel confident in messing with the binary search because I might overlook some edge case where indexes would no longer match, so I left it alone. Reversing both arrays takes less than 10 ms combined.\n\n- src/freenet/node/NodeFile.java b/src/freenet/node/NodeFile.java\n-- Changed default location from 'IpToCountry.dat' to 'IpToCountry.zip'.\n\nMemory from heap dump according to VisualVM:\nList vs int[]: 3.3 MiB vs 660 KiB\nList vs short[]: 2.0 MiB vs 330 KiB\n\n==== Further changes (aka 'more stuff to do for Arne' :) ) ====\n\nhttps://github.com/freenet/scripts#releasing-stable-freenet-builds\nThe FAQ link has to be removed as the old IP DB site is no longer used.\n\n/scripts/setup-release-environment\nHas to be adjusted. How did it work in the past few years Arne, because the website has been offline for a while?\n\nThe new zip file has to be added to the insert/release script.","shortMessageHtmlLink":"Use the Tor DB as GeoIP database"}},{"before":"38589259162139b233848a63f2d8517f518681e1","after":"fbc723cccf00e1beccdf35bbf306c488d18ba6c5","ref":"refs/heads/next","pushedAt":"2024-04-26T21:34:49.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'patch-1' of github.com:torusrxxx/fred into next","shortMessageHtmlLink":"Merge branch 'patch-1' of github.com:torusrxxx/fred into next"}},{"before":"1c9e8b736ebaaa9a210d32b7d5289f11fb967b9e","after":"38589259162139b233848a63f2d8517f518681e1","ref":"refs/heads/next","pushedAt":"2024-03-18T06:57:57.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'reduce-recently-failed-time' of github.com:ArneBab/fred-staging-1 into next","shortMessageHtmlLink":"Merge branch 'reduce-recently-failed-time' of github.com:ArneBab/fred…"}},{"before":"d17ca234ea380ecda3ada8f18aeb21df53306318","after":"1c9e8b736ebaaa9a210d32b7d5289f11fb967b9e","ref":"refs/heads/next","pushedAt":"2024-03-17T22:03:35.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'm3u-player-add-test-for-end-of-body-insertion' of github.com:hyphanet/fred into next","shortMessageHtmlLink":"Merge branch 'm3u-player-add-test-for-end-of-body-insertion' of githu…"}},{"before":"94d46853dce53fca357e61080e484c7d6e2cf145","after":"d17ca234ea380ecda3ada8f18aeb21df53306318","ref":"refs/heads/next","pushedAt":"2024-03-17T16:22:03.000Z","pushType":"push","commitsCount":14,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"Merge branch 'allow-127.0.0.1-in-bindTo' of github.com:ArneBab/fred-staging-1 into next","shortMessageHtmlLink":"Merge branch 'allow-127.0.0.1-in-bindTo' of github.com:ArneBab/fred-s…"}},{"before":"9c9e2ca4d214a44500d25a9a0024504e26d776fd","after":"ebab0ac07de3dabc11cabdfb5f7add56064213e1","ref":"refs/heads/m3u-player-add-test-for-end-of-body-insertion","pushedAt":"2024-03-17T10:19:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ArneBab","name":"Arne Babenhauserheide","path":"/ArneBab","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/96777?s=80&v=4"},"commit":{"message":"check that m3u-filter-tag starts with