Review pass: fix bugs, silence clippy, correct docs
Bugs: - extract: pick the OUTERMOST archive suffix (sfx.first(), not last()) so x.tar.gz uses the gz->tar path - gwshop: truncate the error snippet by chars, not bytes (UTF-8 panic) - sorter: py_stem_split now matches pathlib (0 < i < len-1) so a trailing dot is not treated as a suffix - sorter::apply_plan: a per-file link/copy/mkdir failure is logged and skipped instead of aborting the whole apply (never-abort contract) - orchestrate/state: add State::mark_logged and use it for every per-URL record so a state-save error cannot abort a run Cleanups: - remove dead is_archive_name and unused SourceInfo.manifest field - mark kept-but-unused capabilities with allow(dead_code) + rationale - let-chains / is_ok_and / is_multiple_of / replace([..]) / sort_by_key and other idiomatic simplifications across modules - difflib: SequenceMatcher owns its char vecs (bit-identical parity kept) - --only now enforces gofile|0807 via value_parser Docs: - SORTING.md: drop phantom sorter_plan.jsonl, os.link -> std::fs::hard_link, zipfile -> the zip crate - README: add --since to the dlp synopsis, clarify --subs/--assume-done - .gitignore: ignore catalogue/sorter/_logs/subscriptions run artifacts Validation: cargo fmt --check clean, cargo clippy --all-targets 0 warnings, cargo test 87 passed / 0 failed.
This commit is contained in:
+11
-10
@@ -70,14 +70,14 @@ graph LR
|
||||
(`data/gwshop_catalog.json`) entries within the same faction; best
|
||||
sequence-match above `--threshold` (default 0.62) wins. The catalog
|
||||
provides canonical names, sub-factions and classes.
|
||||
4. **Plan** — default output: a dry-run table `source → target` plus
|
||||
`sorter_plan.jsonl`. Nothing is touched.
|
||||
4. **Plan** — default output: a dry-run table `source → target` on stdout
|
||||
(`--json` prints the same plan as JSON). Nothing is touched.
|
||||
5. **Apply** — create the target and **hardlink** the file there
|
||||
(`os.link`); if the filesystems differ, fall back to a real copy with a
|
||||
warning. Originals are never modified or deleted — that is what keeps the
|
||||
*arr-style workflow possible (remux/seed/sort independently). Every
|
||||
applied action is appended to `sorter_applied.jsonl` and re-runs skip
|
||||
targets that already exist.
|
||||
(`std::fs::hard_link`); if the filesystems differ, fall back to a real
|
||||
copy with a warning. Originals are never modified or deleted — that is
|
||||
what keeps the *arr-style workflow possible (remux/seed/sort
|
||||
independently). Every applied action is appended to `sorter_applied.jsonl`
|
||||
and re-runs skip targets that already exist.
|
||||
|
||||
## Bookkeeping location
|
||||
|
||||
@@ -95,8 +95,8 @@ confidence doc always lands next to the audit file.
|
||||
sees. Limitation: hardlinks need source and library on the same
|
||||
filesystem; the sorter detects this and copies instead (warned).
|
||||
- Zip contents **can** be read without extracting (that is how the sorter
|
||||
peeks). Modifying a member in place is technically possible with
|
||||
`zipfile` but is not useful here.
|
||||
peeks). Modifying a member in place is technically possible with the `zip`
|
||||
crate but is not useful here.
|
||||
- Endgame (later stage): unpack archives into the unit folder so the
|
||||
library is plain files, easier to sort per-model and to torrent. The
|
||||
unpack step will live in the sorter (`--unpack`, 7z binary) but stays off
|
||||
@@ -142,7 +142,8 @@ already-present duplicates, 0 copied):
|
||||
(`noserverino` behavior): two paths to the same hardlinked file show
|
||||
different `st_ino`, and the values are stable across calls. To verify a
|
||||
link, compare `st_nlink` (and content/size) — never inodes. Server-side
|
||||
links are real: a fresh `os.link` bumps nlink (2→3 in the checked case).
|
||||
links are real: a fresh `std::fs::hard_link` bumps nlink (2→3 in the
|
||||
checked case).
|
||||
- Filenames with raw cp437 bytes crash 7z direct-to-CIFS with exit 2
|
||||
("Cannot open output file"); the extractor then extracts to a `/var/tmp`
|
||||
temp dir, repairs the names and moves the result over.
|
||||
|
||||
Reference in New Issue
Block a user