Skip to content

v4.8.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 11:28
· 9 commits to main since this release

Platforms: linux, windows

Changes in v4.7.0..v4.8.0:

  • release: v4.8.0, the link scanner's memory, writes into shared files, and the tracker error class
  • fix(workflows): tracker_error_class takes the announce book before the tracker list
  • feat(workflows): tracker_error_class is picked from its classes in the editor
  • ui(workflows): condition fields grouped by what they describe
  • feat(workflows): tracker_error_class, dead only when every tracker said dead
  • ci(rust): the step that runs the tests says so in its name
  • build(deps): actions/cache 6.1.0 in ci.yml
  • ci(rust): compile once, run the tests once
  • i18n(pt): three strings say 'now' in other words
  • chore: generic names in two tests and a comment
  • docs(readme): lead with what it does at scale and how it compares, a quick start, the two engines and how to upgrade
  • chore: generic names in examples, comments, tests and bench scripts
  • docs(changelog): the category-order entry gives generic category names as its example
  • fix(pathclaim): the claim probe finds the torrents saved in or below a root by a search in a sorted list of folder hashes, not by walking every save path
  • test(bench): cost of the roots index of the claim probe at the scale of the production
  • fix(torrent): renaming a file enters the placement log and drops the write verdicts, like a move
  • fix(pathclaim): the claim probe is kept true by the engines' placement log instead of the store, and a torrent whose files share no folder is looked up by each folder it uses
  • fix(pathclaim): the claim probe finds nested roots in both directions and never answers from an index a recent add has made stale
  • fix(pathclaim): the write path's claim probe looks the torrent's folder up in an in-memory index instead of listing a folder of the store
  • fix(disk): the write comparison keeps no verdict it could not check, forgets it when the torrent moves, and a file proven by its interior only is accepted only where links are visible
  • fix(disk): a piece is compared with the disk before it is written into a file with another hardlink or named by another torrent, without any state the proof job left
  • fix(pathclaim): the hold counts and names the files missing from their expected place, and a recheck that verifies nothing because its files are absent says how many
  • fix(pathclaim): an isolated torrent links the video it shares with another torrent even when the last piece also holds its own .nfo
  • fix(pathclaim): a piece that falls in a shared file is written only if the disk already holds those bytes, and a torrent whose shared files only lack their edge pieces is no longer held
  • test(peer): the busy-port round test stops asking again as soon as the round fails on the squatted port
  • test(peer): the busy-uTP-port rebind test asks again while the TCP port reads as busy and while the new TCP port still answers, for a few seconds
  • test(lsd): the LSD tests bind their port again for a few seconds while a neighbour test's forked child still holds its closed copy
  • test(peer): a port closed a moment ago may still read as busy while a neighbour test's forked child holds its copy, so the rebind tests ask again for a few seconds before calling it kept
  • fix(category): a single file in a folder of its own keeps that folder when moved or graduated to another category, and the emptied old folder is removed
  • fix(linkscan): the summary is published again, a torrent measured too early is measured again, and the never-measured go first
  • perf(linkscan): the link index is measured by a slow continuous walk, not by rounds that read everything
  • perf(qbit): torrents/properties reads its own torrent's row, not the whole session's
  • perf(linkscan): a round keeps the link index between rounds and re-reads it whole only every half hour
  • style(config): cargo fmt over the peer fingerprint test
  • refactor(config): a binding's own peer id is used only under the client's fingerprint
  • refactor(config): the engine no longer reads peer_fingerprint and user_agent from a config