Skip to content

v9.1.0

Latest

Choose a tag to compare

@kdeldycke kdeldycke released this 01 Aug 13:32
Immutable release. Only release title and notes can be modified.

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_HEADERS and strategies/MDEDUP_STRATEGIES. The --hash-header and --strategy flags are unchanged.
  • Skip duplicate sets containing mails with an unparsable or absent Date header instead of crashing on time-based strategies. The warning names the offending mails, and a new Skipped - Timestamp metric 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 eml source and export format, reading and writing loose .eml files from a folder, walked recursively. Autodetected, and the unrecognized-folder error now points at --input-format. Closes #760.
  • Allow repeating --strategy to 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 --regexp and --export option requirements at parse time with cloup constraints, 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 toml works out of the box, and name every configurable option in generated templates, commented out when unset, under kebab-case keys.
  • Stop requiring --export in -H/--hash-only mode: constraints from the selection and action steps no longer apply there.
  • Drop boltons and whenever from the runtime dependencies (both remain for tests) and require click-extra 8.7, whose --params and --export-config now reflect the loaded configuration file.
  • Build the prebuilt Linux executables inside a manylinux_2_28 container so they link against a glibc 2.28 floor 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 *-discarded actions 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 --regexp values, now rejected with a proper parameter error.
  • Fix the payload memory purge of selected mails, which never triggered for the move-discarded action.
  • 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's click:run directives, so the rendered outputs always match the current implementation. Closes #23.
  • Rewrite the configuration documentation: precedence, key spelling, pyproject.toml discovery, template export, validation and environment variables.

Full changelog: v9.0.0...v9.1.0