Note
9.1.0 is available on π PyPI and π GitHub.
- Breaking: pluralize the repeatable options' parameter IDs: configuration keys and environment variables become
hash_headers/MDEDUP_HASH_HEADERSandstrategies/MDEDUP_STRATEGIES. The--hash-headerand--strategyflags are unchanged. - Skip duplicate sets containing mails with an unparsable or absent
Dateheader instead of crashing on time-based strategies. The warning names the offending mails, and a newSkipped - Timestampmetric counts these sets. Closes #132 and #600. - Identify mails from folder-based boxes in logs by the fully-qualified path of their own file, so it can be copy-pasted for direct inspection. Closes #157.
- Set aside mails exceeding the size or content thresholds against the rest of their set instead of skipping the whole set, so an outlier no longer prevents the deduplication of the true copies sharing its hash. Closes #851.
- Discover nested maildir folders stored as plain directories at any depth, as produced by
isync/mbsync's Verbatim naming style, even when the root directory holds no mail itself. Closes #973. - Add a new
emlsource and export format, reading and writing loose.emlfiles from a folder, walked recursively. Autodetected, and the unrecognized-folder error now points at--input-format. Closes #760. - Allow repeating
--strategyto chain fallback strategies: each duplicate set is handed over to the next strategy when one fails to discriminate its mails. Closes #647. - Report each copied, moved or deleted mail with a live
βtrail line and a timed summary on interactive terminals. - Validate the
--regexpand--exportoption requirements at parse time withcloupconstraints, rewording their error messages. - Reject configuration files carrying keys that match no CLI option, and refuse mail sources from configuration files: boxes to deduplicate are always passed on the command line.
- Accept kebab-case keys in configuration files, matching the spelling of the CLI flags.
- Ship the TOML writer so
--export-config tomlworks out of the box, and name every configurable option in generated templates, commented out when unset, under kebab-case keys. - Stop requiring
--exportin-H/--hash-onlymode: constraints from the selection and action steps no longer apply there. - Drop
boltonsandwheneverfrom the runtime dependencies (both remain for tests) and requireclick-extra8.7, whose--paramsand--export-confignow reflect the loaded configuration file. - Build the prebuilt Linux executables inside a
manylinux_2_28container so they link against a glibc2.28floor instead of the CI runner's newer glibc, letting them run on older enterprise distributions such as RHEL 8+, Debian 10, Ubuntu 20.04 and openSUSE Leap 15.3+. Closes #759. - Fix a spurious metrics-inconsistency exit (code
115) for*-discardedactions and dry runs: the statistics self-check now compares each action counter to the subset of mails the action targets. Closes #841. - Fix an unhandled traceback on invalid
--regexpvalues, now rejected with a proper parameter error. - Fix the payload memory purge of selected mails, which never triggered for the
move-discardedaction. - Add a hands-on tutorial page to the documentation and rework the README quickstart around use cases and example commands. Closes #984.
- Execute the tutorial's commands at documentation build time with
click-extra'sclick:rundirectives, so the rendered outputs always match the current implementation. Closes #23. - Rewrite the configuration documentation: precedence, key spelling,
pyproject.tomldiscovery, template export, validation and environment variables.
Full changelog: v9.0.0...v9.1.0