Releases: manfred-kaiser/folderdiff
Releases · manfred-kaiser/folderdiff
Release list
1.0.0
Added
- Support for comparing tar archives (
.tar,.tar.gz,.tar.bz2,.tar.xz)
in addition to zip archives and plain directories - Unit test suite (pytest) covering the core comparison logic and the CLI
hatch test/ pytest integration inhatch run lint:check
Changed
- Migrated packaging from
setup.pytopyproject.tomlwith hatch as build backend - Raised minimum supported Python version to 3.11 (developed and tested with 3.13)
- Added a restrictive lint environment (black, bandit, ruff, flake8, pylint, mypy --strict) via
hatch run lint:check - Added GitHub Actions workflows for linting across supported Python versions and for publishing to PyPI via Trusted Publishing
- Relicensed from GPL-3.0-or-later to MIT
- Unreadable files (broken symlinks, missing permissions) are now skipped with
a warning on stderr instead of aborting the whole comparison folderdiffCLI now prints a clean error message and exits with status 2
instead of a raw traceback when the comparison itself fails
Fixed
- Files with duplicate content could be silently dropped from the result
when computing moved/removed/added file sets, hiding genuinely removed or
added files whenever another file with identical content existed --prefixhad no effect when comparing two plain directories; it only
ever worked for the zip-archive side- A corrupt zip archive's CRC-32 self-test result was computed but never
checked, so a bad archive still crashed later with an unhandled exception - Fixed "profix" typo in the
--prefixhelp text - Folder-mode relative paths used
os.sepwhile zip entries always use/,
so comparing a zip archive against a directory would report every file in
a subfolder as changed on platforms whereos.sep != "/" - A named pipe or other special file in the compared directory tree caused
open()to block indefinitely, hanging the whole comparison; such entries
are now skipped with a warning instead - Zip archive members were read fully into memory before hashing, which
could exhaust memory on a maliciously crafted archive; hashing is now
streamed in fixed-size chunks