The purpose of this document is to list all of the notable changes to this project. The format was inspired by Keep a Changelog. This project adheres to semantic versioning.
- Release 8.1 (2020-05-17)
- Release 8.0 (2020-02-18)
- Release 7.2 (2020-02-14)
- Release 7.1 (2020-02-13)
- Release 7.0 (2020-02-12)
- Release 6.0 (2018-08-03)
- Release 5.3 (2018-08-03)
- Release 5.2 (2018-04-27)
- Release 5.1 (2018-04-27)
- Release 5.0 (2018-03-29)
- Release 4.4 (2017-04-13)
- Release 4.3.1 (2017-04-13)
- Release 4.3 (2016-10-31)
- Release 4.2 (2016-08-05)
- Release 4.1 (2016-08-05)
- Release 4.0 (2016-07-09)
- Release 3.5 (2016-07-09)
- Release 3.4 (2016-07-09)
- Release 3.3 (2016-07-09)
- Release 3.2 (2016-07-08)
- Release 3.1 (2016-04-13)
- Release 3.0 (2016-04-13)
- Release 2.3 (2015-08-30)
- Release 2.2 (2015-07-19)
- Release 2.1 (2015-07-19)
- Release 2.0 (2015-07-19)
- Release 1.1 (2015-07-19)
- Release 1.0 (2015-07-19)
- Release 0.1.2 (2015-07-15)
- Release 0.1.1 (2014-07-03)
- Release 0.1 (2014-07-03)
Release 8.1 (2020-05-17)
- Bug fix to really make the 'hour', 'minute' and 'second' capture groups in user defined timestamp patterns optional (this fixes issue #26).
- Fixed π¨`humanfriendly` 8 deprecation warnings.
Release 8.0 (2020-02-18)
This is a bit of an awkward release:
- An :exc:`~exceptions.ImportError` was reported in issue #24 caused by a backwards incompatible change in :pypi:`humanfriendly` concerning an undocumented module level variable (shouldn't have used that).
- I've now updated :pypi:`rotate-backups` to be compatible with the newest release of :pypi:`humanfriendly` however in the mean time that package dropped support for Python 3.4.
- This explains how a simple bug fix release concerning two lines in the code base triggered a major version bump because compatibility is changed.
- While I was at it I set up Python 3.8 testing on Travis CI which seems to work fine, so I've documented Python 3.8 as compatible. Python 3.9 seems to be a whole other story, I'll get to that soon.
Release 7.2 (2020-02-14)
Merged pull request #23 which makes it possible to customize the regular
expression that's used to match timestamps in filenames using a new command
line option rotate-backups --timestamp-pattern
.
The pull request wasn't exactly complete (the code couldn't have run as written, although it showed the general idea clear enough) so I decided to treat #23 as more of a feature suggestion. However there was no reason no to merge the pull request and use it as a base for my changes, hence why I decided to do so despite rewriting the code.
Changes from the pull request:
- Renamed
timestamp
to :attr:`~rotate_backups.RotateBackups.timestamp_pattern` to make it less ambiguous. - Added validation that custom patterns provided by callers define named capture groups corresponding to the required date components (year, month and day).
- Rewrote the mapping from capture groups to :class:`datetime.datetime`
arguments as follows:
- Previously positional :class:`datetime.datetime` arguments were used which depended on the order of capture groups in the hard coded regular expression pattern to function correctly.
- Now that users can define their own patterns, this is no longer a reasonable approach. As such the code now constructs and passes a dictionary of keyword arguments to :class:`datetime.datetime`.
- Updated the documentation and the command line interface usage message to describe the new command line option and configuration file option.
- Added tests for the new behavior.
Release 7.1 (2020-02-13)
- Make it possibly to disable system logging using
rotate-backups --syslog=false
(fixes #20). - Explicitly support numeric π¨`ionice` classes (as required by
π¨`busybox` and suggested in #14):
- This follows up on a pull request to :pypi:`executor` (a dependency of :pypi:`rotate-backups`) that was merged in 2018.
- Since that pull request was merged this new "feature" has been implicitly supported by :pypi:`rotate-backups` by upgrading the installed version of the :pypi:`executor` package, however this probably wasn't clear to anyone who's not a Python developer π.
- I've now merged pull request #14 which adds a test to confirm that numeric π¨`ionice` classes are supported.
- I also bumped the :pypi:`executor` requirement and updated the usage instructions to point out that numeric π¨`ionice` classes are now supported.
Release 7.0 (2020-02-12)
Significant changes:
- Sanity checks are done to ensure the directory with backups exists, is
readable and is writable. However #18 made it clear that such sanity
checks can misjudge the situation, which made me realize an escape hatch
should be provided. The new
--force
option makesrotate-backups
continue even if sanity checks fail. - Skip the sanity check that the directory with backups is writable when the
--removal-command
option is given (because custom removal commands imply custom semantics, see #18 for an example).
Miscellaneous changes:
- Start testing on Python 3.7 and document compatibility.
- Dropped Python 2.6 (I don't think anyone still cares about this π).
- Copied Travis CI workarounds for MacOS from :pypi:`humanfriendly`.
- Updated
Makefile
to use Python 3 for local development. - Bumped copyright to 2020.
Release 6.0 (2018-08-03)
This is a bug fix release that changes the behavior of the program, and because rotate-backups involves the deletion of important files I'm considering this a significant change in behavior that deserves a major version bump...
It was reported in issue #12 that filenames that match the filename pattern
but contain digits with invalid values for the year/month/day/etc fields would
cause a ValueError
exception to be raised.
Starting from this release these filenames are ignored instead, although a warning is logged to make sure the operator understands what's going on.
Release 5.3 (2018-08-03)
- Merged pull request #11 which introduces the
--use-rmdir
option with the suggested use case of removing CephFS snapshots. - Replaced
--use-rmdir
with--removal-command=rmdir
(more general).
Release 5.2 (2018-04-27)
- Added support for filename patterns in configuration files (#10).
- Bug fix: Skip human friendly pathname formatting for remote backups.
- Improved documentation using
property_manager.sphinx
module.
Release 5.1 (2018-04-27)
- Properly document supported configuration options (#7, #8).
- Properly document backup collection strategy (#8).
- Avoid
u''
prefixes in log output of include/exclude list processing. - Added this changelog, restructured the online documentation.
- Added
license
key tosetup.py
script.
Release 5.0 (2018-03-29)
The focus of this release is improved configuration file handling:
Refactor configuration file handling (backwards incompatible). These changes are backwards incompatible because of the following change in semantics between the logic that was previously in rotate-backups and has since been moved to update-dotdee:
- Previously only the first configuration file that was found in a default location was loaded (there was a 'break' in the loop).
- Now all configuration files in default locations will be loaded.
My impression is that this won't bite any unsuspecting users, at least not in a destructive way, but I guess only time and a lack of negative feedback will tell :-p.
Added Python 3.6 to supported versions.
Include documentation in source distributions.
Change theme of Sphinx documentation.
Moved test helpers to
humanfriendly.testing
.
Release 4.4 (2017-04-13)
Moved ionice
support to executor.
Release 4.3.1 (2017-04-13)
Restore Python 2.6 compatibility by pinning simpleeval dependency.
While working on an unreleased Python project that uses rotate-backups I noticed that the tox build for Python 2.6 was broken. Whether it's worth it for me to keep supporting Python 2.6 is a valid question, but right now the readme and setup script imply compatibility with Python 2.6 so I feel half obliged to 'fix this issue' :-).
Release 4.3 (2016-10-31)
Added MacOS compatibility (#6):
- Ignore
stat --format=%m
failures. - Don't use
ionice
when not available.
Release 4.2 (2016-08-05)
Release 4.1 (2016-08-05)
- Enable choice for newest backup per time slot (#5).
- Converted
RotateBackups
attributes to properties (I β€ documentability :-). - Renamed 'constructor' to 'initializer' where applicable.
- Simplified the
rotate_backups.cli
module a bit.
Release 4.0 (2016-07-09)
Added support for concurrent backup rotation.
Release 3.5 (2016-07-09)
- Use key properties on
Location
objects. - Bring test coverage back up to >= 90%.
Release 3.4 (2016-07-09)
Added support for expression evaluation for retention periods.
Release 3.3 (2016-07-09)
Started using verboselogs.
Release 3.2 (2016-07-08)
Added support for Python 2.6 :-P.
By switching to the
key_property
support added in property-manager 2.0 I was able to reduce code duplication and improve compatibility:6 files changed, 20 insertions(+), 23 deletions(-)
This removes the dependency on
functools.total_ordering
and to the best of my knowledge this was the only Python >= 2.7 feature that I was using so out of curiosity I changedtox.ini
to run the tests on Python 2.6 and indeed everything worked fine! :-)Refactored the makefile and
setup.py
script (checkers, docs, wheels, twine, etc).
Release 3.1 (2016-04-13)
Implement relaxed rotation mode, adding a --relaxed
option (#2, #3).
Release 3.0 (2016-04-13)
- Support for backup rotation on remote systems.
- Added Python 3.5 to supported versions.
- Added support for
-q
,--quiet
command line option. - Delegate system logging to coloredlogs.
- Improved
rotate_backups.load_config_file()
documentation. - Use
humanfriendly.sphinx
module to generate documentation. - Configured autodoc to order members based on source order.
Some backwards incompatible changes slipped in here, e.g. removing
Backup.__init__()
and renaming Backup.datetime
to Backup.timestamp
.
In fact the refactoring that I've started here isn't finished yet, because the
separation of concerns between the RotateBackups
, Location
and
Backup
classes doesn't make a lot of sense at the moment and I'd like to
improve on this. Rewriting projects takes time though :-(.
Release 2.3 (2015-08-30)
Add/restore Python 3.4 compatibility.
It was always the intention to support Python 3 but a couple of setbacks made it harder than just "flipping the switch" before now :-). This issue was reported here: xolox/python-naturalsort#2.
Release 2.2 (2015-07-19)
Added support for configuration files.
Release 2.1 (2015-07-19)
Bug fix: Guard against empty rotation schemes.
Release 2.0 (2015-07-19)
Backwards incompatible: Implement a new Python API.
The idea is that this restructuring will make it easier to re-use (parts of) the rotate-backups package in my other Python projects..
Release 1.1 (2015-07-19)
Merged pull request #1: Add include/exclude filters.
I made significant changes while merging this (e.g. the short option for the include list and the use of shell patterns using the fnmatch module) and I added tests to verify the behavior of the include/exclude logic.
Release 1.0 (2015-07-19)
- Started working on a proper test suite.
- Split the command line interface from the Python API.
- Prepare for API documentation on Read The Docs.
- Switch from
py_modules=[...]
topackages=find_packages()
insetup.py
.
Release 0.1.2 (2015-07-15)
- Bug fix for
-y
,--yearly
command line option mapping. - Fixed some typos (in the README and a comment in
setup.py
).
Release 0.1.1 (2014-07-03)
- Added missing dependency.
- Removed Sphinx-isms from README (PyPI doesn't like it, falls back to plain text).
Release 0.1 (2014-07-03)
Initial commit (not very well tested yet).