Important
This version is not released yet and is under active development.
- Switch from Poetry to
uv
. - Drop support for Python 3.8.
- Mark Python 3.13-dev tests as stable.
- Slim down package by moving unit tests out of the main package.
- Split
dev
dependency groups into optionaltest
,typing
anddocs
groups. - Remove direct dependency on
mypy
. - Run tests on Python
3.13-dev
on all platforms butmacos
. - Run tests on
macos-14
. Drop tests onmacos-12
. - Build
arm64
binaries onmacos-14
.
- Drop support of Python 3.7.
- Reduce memory usage. Addresses {issue}
362
. - Replace unmaintained
bump2version
bybump-my-version
. - Test
mdedup
binaries. - Run tests and actions on released Python 3.12 version.
- Run tests on macos-13. Remove tests on macos-11.
- Reverts distribution of package via trusted channel.
- Redo release to fix trusted publisher on PyPi.
- Produce dependency graph in Mermaid instead of Graphviz. Add new dev dependency on
sphinxcontrib-mermaid
. - Move all documentation assets to
assets
subfolder. - Distribute package on PyPi via a trusted publisher channel.
- Build standalone executable for macOS, Linux and Windows.
- Generates dependency graph in Graphviz format.
- Run tests on Python
3.12-dev
. - Code, comments and documentation style change to conform to new QA workflows based on
ruff
.
- Renumber and rename phases to steps.
- Group options per steps.
- Add minimal code typing and checking.
- Add logo.
- Execute all workflows with Python 3.11.
- Drop Python 3.6 support.
- Add support for Python 3.11.
- Add new
--time
/--no-time
option to measure elapsed execution time. - Add new
--color
/--no-color
and--ansi
/--no-ansi
alias options to deactivate CLI color rendering. - Add new
--color
/--no-color
and--ansi
/--no-ansi
alias options to deactivate CLI color rendering. - Add new
-C
/--config
option which support local and remote configuration file in TOML, YAML, JSON, INI or XML formats. - Add new
--show-params
option to debug default parameter value and provenance. - Fix incconsistent printing of help screen. Closes {issue}
160
. - Force linear rendering of options in help screen to improve readability.
- Fix run on Python 3.10. Closes {issue}
361
. - Run unittests on Python 3.10 and Python 3.11.
- Add dependency on
click-extra
andtyping-extensions
- Remove direct dependency on
click-help-colors
,click-log
andtomlkit
. - Fix broken selection logic in quantity-based strategies. Refs {issue}
146
. - Add unittests to cover time-based and size-based selection edge-cases.
- Drop unittests on deprecated
ubuntu-18.04
andmacos-10.15
. - Add unittests on
ubuntu-22.04
,macos-12
andwindows-2022
. - Run tests on multiple cores.
- Simplify project management by abandoning the dual use of
main
/develop
branches. - Migrate to external workflows to automate builds, releases, autofixes, linting, documentation, changelog, mailmap maintenance and label management.
- Convert all documentation from RST to Markdown. Closes {issue}
368
. - Keep CLI output in sync in documentation. Closes {issue}
23
. - Move
sphinx
dependencies to dev requirements. - Add citation file.
- Upgrade to Click 8.x.
- Implements all missing
copy-discarded
,move-discarded
anddelete-discarded
actions. Closes {issue}270
and {issue}146
. - Add
-b
/--hash-body
option to set the way each email body is hashed. - Add
--export-append
option to allow for the resulting deduplicated email to be appended to an existing mail box. - Skip duplicate sets without any matching duplicate candidates. Closes
{issue}
203
.
- Fix dynamic
mailbox.Message
inheritance. Closes {issue}191
.
- Reconcile
v3
branch withdevelop
.
- Simple re-release.
- Add retroactive support for Python 3.6. Closes {issue}
154
. - Fix documentation link and generation. Closes {issue}
66
. - Auto-generate API documentation via a GitHub action workflow.
- Add
tomlkit
dependency. - Add test runs against new OSes and distributions:
ubuntu-18.04
andmacos-11.0
. - Remove
pycodestyle
, it brings nothing more now that we rely onblack
.
- Load up all subfolders from
Maildir
andMH
boxes. Closes {issue}123
.
- Check early that
--export
file doesn't exists. Closes {issue}119
. - Add screenshots.
- Add new
-a
/--action
option to choose what to do on the final mail selection. - Implements new
copy-discarded
,copy-selected
,delete-discarded
,delete-selected
,move-discarded
andmove-selected
actions. - Add new
-E
/--export
and-e
/--export-format
options to support the newcopy-*
andmoved-*
actions. - Rename all
--delete-*
strategies to--discard-*
. - Add
--select-*
aliases to all strategies. - Add new
discard-all-but-one
,discard-one
,select-one
andselect-all-but-one
selection strategies. - Rename
-f
/--sources-format
option to-i
/--input-format
. --time-source
parameter is now optional and defaults todate-header
.- Add metric description in deduplication end report.
- Add detailed strategy description in help screen's epilog.
- Colorize help screen.
- Colorize version screen and print environment data for bug reports.
- Run tests on Python 3.9.
- Add new
-h
/--hash-header
option to select which mail headers to use to compute hash. - Remove
-i
/--message-id
option. Can be emulated with-h Message-ID
or--hash-header Message-ID
option. - Make all keyword-based choice parameters (
--sources-format
,--strategy
and--time-source
) case-insensitive.
- Add supports for
Babyl
,MH
andMMDF
mailbox types. - Add new
-f
/--sources-format
option to force the type of mail sources on opening. - Add new
-u
/--force-unlock
option to force the removal of a lock on mailboxes on opening. - Split-up the selection of mails candidate for removal and the deletion itself into two distinct batch operations.
- Add issue templates to guide users to report bugs and request features.
- Upgrade to
Poetry 1.1.0
. - Test publishing to PyPi in dry-run mode by the way of Poetry.
- Auto-optimize images.
- Auto-lock closed issues and PRs after a moment of inactivity.
- Removes the
hash
subcommand. Replaced it with a--hash-only
parameter to the main dedupe command. - Removes
deduplicate
subcommand.mdedup
is now a simple CLI. - Fix calls to deduplication strategy. Closes {issue}
86
and {issue}88
. - Fix computation of stats. Closes {issue}
89
. - Drop support for Python 2. Refs {issue}
90
. - Bump minimal Python requirement to 3.7.
- Repackage project around Poetry and
pyproject.toml
. Get rid ofsetup.py
. - Replace unmaintained
bumpversion
bybump2version
. - Drop dependency on
progressbar2
and replace it withclick
's. Closes {issue}37
. - Switch from Travis to GitHub Actions for all CI/CD jobs.
- Regularly run unittests against Windows, Linux and macOS.
- Removes all copyright dates.
- Auto-fix Python format, typos and JSON content.
- Let dependabot check for dependencies and update them.
- Keep
.gitignore
and.mailmap
up to date and in sync. - Auto-publish package on tagging events via
twine
. - Always run test build and check resulting package on each commits.
- Use declarative JSON to maintain list of GitHub labels for issues and PRs.
- Lint both Python code and YAML content on each commit.
- Run unittests in random to order to detect coupling.
- Add explicit warning in CLI output to warn about 3.x branch
deprecation. Refs {issue}
180
.
Caution
As of v3.0.0
, the project has been renamed to Mail Deduplicate and is
now available on:
- Rename project from
maildir-deduplicate
tomail-deduplicate
. - Rename
master
branch tomain
. - Add support for mboxes. Closes {issue}
48
. - Remove requirement on
-s
/--strategy
parameter, to let mails being grouped into duplicate sets without any removal action, effectively acting as a second-level dry-run.
Warning
This is the last version of the project known under the name Maildir Deduplicate
(a.k.a. maildir-deduplicate
).
- Add disclaimer to prepare project name change.
- Fix Header being object instead of string (#61).
- Make body_lines conversion more reliable.
- Fix bugs in counter statistics ({issue}
45
, {issue}57
). - Add Message-ID as a header to check.
- Fix
UnicodeDecodeError
. Closes {issue}53
and {issue}55
. - Bump requirement to
click_log >= 0.2.0
. Closes {issue}58
, {issue}59
and {issue}60
. - Replace
nose
bypytest
. - Only notify by mail of test failures.
- Drop support of Python 3.3.
- Fix rendering of changelog link in RST.
- Show selected log level in debug mode.
- Test builds against Python 3.6 and 3.7-dev, and most recent PyPy targeting Python 2.7 and 3.3.
- Bump requirement to
readme_renderer >= 16.0
. - Skip sets with unparsable mails because of incorrect encoding. Closes
{issue}
47
, {issue}41
and {issue}39
. - Require the
-s
/--strategy
CLI parameter to be set. Closes {issue}44
.
- Reject mails without
Message-ID
headers if--message-id
option is active. - Add a class to holds global config.
- Print more debug info in unittests when CLI produce tracebacks.
- Always check for package metadata in Travis CI jobs.
- Fix package's long description against PyPi rendering constraints.
- Add link to full changelog in package's long description.
- Refactor and redefine all removal strategies. Closes {issue}
40
. - Add a new
-t
/--time-source
CLI parameter to point to the canonical source of a mail's timestamp. - Rename
-s
/--show-diffs
parameter to-d
/--show-diff
. - Rename
-D
/--diff-threshold
parameter to-C
/--content-threshold
. - Add new
-s
shorthand to--strategy
parameter. - Re-implement diff threshold options. Closes {issue}
43
. - Re-implement statistics. Closes {issue}
42
. - Normalize and canonicalize all paths to deduplicate on the fly mails pointing to the same file.
- Build documentation via Sphinx.
- Add
test
anddevelop
dependencies. - Move coverage config to
setup.cfg
. - Replace
pep8
package bypycodestyle
. - Enforce
pycodestyle
checks in Travis CI jobs. - Remove popularity badge: PyPI download counters are broken and no longer displayed.
- Test production of packages in Travis CI jobs.
- Move development and packaging documentation to Sphinx. Closes {issue}
22
. - Make wheels generated under Python 2 environnment available for Python 3 too.
- Let unittests generates their own fake and temporary maildirs.
- Print CLI output in unittests.
- Use generic factory to produce mail fixtures in unittests.
- Only show latest changes in the long description of the package instead of the full changelog.
- User-friendly progress bar.
- Decrease memory usage on large datasets. Closes {issue}
19
, {issue}8
and {issue}3
. - Attempt several encodings when parsing message body. Closes {issue}
32
. - Fixed comparison issue in Python 3. Closes {issue}
34
. - Add a set of basic deduplication unittests.
- Use logger to output messages to the user.
- Activate tests on Python 3.3, PyPy and PyPy3.
- Fix date parsing. See {issue}
33
. - Fix decoding of unicode header value. Closes {issue}
24
and {issue}32
.
- Add Python 3.4 and 3.5 support. Closes {issue}
30
. - Add default
isort
configuration. - Remove hackish default encoding forcing in main code.
- Fix
AttributeError
on message instance. Closes {issue}28
. - Various fixes of references to internal variables introduced by a switch to more Pythonic classes in 1.0.0.
- Remove
Message-ID
from the list of default canonical headers.
- Switch from coveralls to codecov.
- Fix package version parsing.
- Add installation instructions. Closes {issue}
21
. - Add PEP8 and PyLint configuration.
- Add bumpversion configuration.
- Rework CLI around click framework. Closes {issue}
26
.
- Package the script for proper distribution.
- First external contribution.
- First commit.