Note
9.3.0 is available on π PyPI and π GitHub.
- Breaking: a dry run now says
DRY RUN: N mails would be acted upon, but none will be altered.once, in place of aDRY RUN: Skip action.line per mail. Scripts matching the old wording need updating. - Breaking: Python importers must switch to
Strategy.function/Strategy.apply(),Action.perform()andDuplicateSet.select(), which replacestrategy_function/apply_strategy(),perform_action()andcategorize_candidates(). The CLI is unchanged. - Add a
hardlink-discardedaction: each discarded mail becomes a hardlink to the copy kept in its set, reclaiming its space while staying in its own folder. Only byte-identical copies are linked, unless--hardlink-differingis passed. Closes #164. - Add
--cacheand--cache-path, off by default, to reuse the hashes of previous runs: a second run over a 20,000-mail maildir takes half the time. Entries expire with their mail or when the hashing options change. Closes #87. - Spread hashing and selection over worker processes instead of threads, so
--jobsfinally pays off: a first run over a 20,000-mail maildir drops from3.4sto1.8sat--jobs=4. Only folder-based boxes (maildir,MH,eml) fan out. - Speed up hashing by about
2xand halve the file-system calls amaildirrun makes per mail, taking a whole run about2.6xfaster with the default--hash-body skip. Refs #87. - Cut the memory retained per mail from about
950to600bytes. Refs #87. - Settle the size and content thresholds over the whole duplicate set instead of comparing every pair: a single set of 200 copies took
1.90sand now takes0.04s. - Cut what a run prints by seven eighths, from 32,000 lines to 4,000 on a 20,000-mail corpus: mails and duplicate sets are now named at
--verbosity DEBUGonly. The selection step gained a progress bar. - Add
platformdirsto the runtime dependencies, which resolves the per-platform location of the hash cache. - Fix the documentation's broken links:
pipx's installation guide moved, and thectimenote now cites Python'sos.path.getctimedocs. Closes #899. - Add a performance page covering where a run spends its time, the memory it holds and how to manage the hash cache, plus tutorial and design sections on hardlinking. Correct the per-mail memory figures, which claimed a few hundred bytes.
Full changelog: v9.2.0...v9.3.0