AutoArchive user visible changes ================================ Version 1.0.1 [2013-03-01] -------------------------- * Fixed crash with Python 3.3 (bug #3606424). Application crashed right after the start when running with Python 3.3. Thanks to Aleksey Avdeev for the reporting and hints. Version 1.0.0 [2012-08-02] -------------------------- * New option --remove-obsolete-backups was added. The newly added option --remove-obsolete-backups, when enabled, backups of levels higher than the current one are removed during backup creation operation. * Added option --quiet. New option --quiet was added. If specified, only error messages are shown. It has higher priority than --verbose. So if both are specified at the same level (e. g. both are passed on the command line or both are specified in the configuration file) then only --quiet is taken into account. * Selective listing of orphaned archives. The List action now shows only selected archives also in case they are orphaned. Previously all orphaned archives were always listed regardless of which were specified on the command line. * Removed support for â.tar.lzmaâ backups. Archive type âtarlzmaâ which was creating â.tar.lzmaâ backups is no longer supported and was removed. Type âtarxzâ supersedes it. * Ignore starting â/â and â..â in âinclude-filesâ and âexclude-filesâ. Implemented new behaviour when reading paths from archive specification file â if a path in âinclude-filesâ or âexclude-filesâ variable is an absolute path then the starting â/â is ignored. Likewise, for paths that points to a parent directory the â..â is ignored. * Search for tar binary is done in multiple locations. Tar binary is searched in directories specified in PATH environment variable. If not found there then it is searched in /bin, /usr/bin and /usr/local/bin directories. * Improved exit codes in List and Purge operations. List operation returns exit code 1 if a warning or error occurs (for example, if user pass a name of non-existing archive). Purge operation returns exit code 1 if requested archive was not purged or other problem occurs. * Archive specifications directory is automatically created. If the archive specifications directory (which is by default ~/.config/aa/archive_specs) does not exists, it will be created. * Backup level is not increased in case of a fatal error. If the backup operation finishes with a fatal error the backup level is not raised. Also no information (such as number of restarts, etc.) is stored in that case. * Removed error when passing orphaned archive to the List action. If an orphaned archive is passed as the argument for List action it no longer shows the error that archive specification file can not be found. The selected orphaned archive is listed without errors. * Fix listing of archives in case of non-existent one. The List operation finished prematurely after it attempted to list a non-existent archive, which caused that remaining archives were not listed. This was fixed so now it shows all selected archives even if there are some non-existent ones among them. * Fixed exception when absolute paths were used in âinclude-filesâ. If âinclude-filesâ contained absolute paths and internal archiver was used then the backup creation failed with exception 'RuntimeError: maximum recursion depth exceeded while calling a Python object'. * Fixed crash after interrupted backup creation. It the backup creationâfor the archive with âfull-restart-after-countâ setâ was interrupted (e. g. by Ctrl+C) then subsequent attempts to create the backup failed because the program crashed. * User documentation improvements: ** Added examples on backup restoration to the user documentation. ** Added description of the versioning scheme to the user documentation. ** Short description of exit codes was added to the user documentation. * Refactoring of Archiving component. Part of the Archiving component responsibility was moved to the newly created Archiver service. Version 0.5.2 [2012-06-19] -------------------------- * Fixed exclude matching for external archiver Exclude pattern now has to match the whole path, not just the name. Up to now if âfooâ was specified as excluded, all files and directories named âfooâ were excluded (e. g. bar/foo, foo, dir/bar/foo) which was wrong. From now on, only âfooâ would be excluded from the previous list. If one would want to exclude âbar/fooâ then he has to explicitly specify âbar/fooâ as excluded. * Fixed not excluding content of excluded directories for internal tar archiver Content of excluded directories was not excluded when using internal tar archiver. This was fixed. * Fixed restarting to a higher level If âmax-restart-level-sizeâ option was specified the restarting was done always to the highest level. The size of previous backup levels was not taken into account. This was fixed to work as expected. Version 0.5.1 [2012-02-27] -------------------------- * Fixed ignoring of symbolic links by internal tar When *_internal archiver type was used, symbolic links to directories were not included in the backup. Error message "permission denied" was shown instead. * Fixed showing warnings about non-accessible files in unrelated archives During the list operation warnings about non-accessible files were shown for _all_ configured archives. This was fixed, now warnings only related to _selected_ archives are being shown. * Message "Cannot stat: ..." from GNU Tar is now handled as an error This corresponds with handling of the message "Cannot open: ...". * Tests were included into the source distribution Version 0.5.0 [2012-02-16] -------------------------- * Options in ânegative formâ can no longer be used in configuration files Normal option form with ânoâ value should be used instead. For example, instead of using âno-restarting = yesâ the form ârestarting = noâ should be used. This applies to configuration files (system and user) and archive specification files. * Removed option --force-no-incremental It is not needed anymore because âno-incrementalâ can not be specified in the archive specification file. * Changed the default behaviour in case no arguments are passed If no AA_SPEC arguments are specified on the command line program no longer creates backups for all configured archives. It shows an error instead. To operate on all archives the --all option has to be used. * Introduced a concept of commands So far AutoArchive was able to do only a single operation - backup creation. With this version additional operations were added (archive listing and purging archive data). In order to be able to choose which operation shall be executed, commands were introduced. A command can be passed as a program argument in a form similar to long option. The command can not be specified in the any of configuration files. By default, if no command is specified, the backup creation action will be executed. * Added support for listing archives The command --list was added which prints information about all archives as configured in the archive specifications directory and all non-configured archives for which the application still stores some data (orphaned archives). With AA_SPEC argument only the specified archives are listed. Command has also a verbose form activated by âverboseâ option. * Added support for purging remains of non-existing archives During the backup creation the application internally stores some data about the archive. If such archive is deleted later (e. g. by removing its archive specification file) stored data remains. Such data, so called orphaned archives, can be removed by --purge command. The are also shown by the --list command. * Name of the application in output messages is not shown with full path The application executable name which prefixes output messages now contains the name only, without the path to it. * Added --force-restarting option * Output of the --help command was clarified In the --help output and the user documentation options were grouped to categories to make it more clear. * External archivers show âpermission deniedâ message as an error now If a file or directory can not be opened then the type of the shown message is now consistent between external and internal archivers. It is shown as error. * Internal archivers shows final error message If an error occurs during creation of a backup then at the end of the process internal archiver shows a message that the backup creation has failed. This is same behaviour as external archivers already has. * Fixed ignoring of archive name from the archive specification file The archive name specified in the archive specification file via the ânameâ variable was ignored. * Fixed ignoring of force options in some cases * Fixed crash if an âemptyâ variable was specified in a configuration file If the configuration file contained non-string option without a value (e. g. âcompression-level =â), the program thrown an exception and finished. * A new chapter âOperations Explainedâ added to User Manual. Chapter briefly describes operations which can be performed by the application. * Underscores in options on the command-line are not replaced by dashes Removed undocumented feature that options specified on the command-line could be provided with underscores (â_â) in place of dashes (â-â). Now, only dashes are valid. * AutoArchive now depends on Python 3.2 Version 0.4.0 [2011-06-17] -------------------------- * Tar format of created archives was changed to POSIX.1-2001. Option --format=posix is passed to GNU tar. * Backup level restarting When incremental archiving is used AutoArchive can automatically restart the backup level to a lower number on various occasions such as, when certain backup level was reached, or after configured time period. Two types of restarting were added: restarting to a lower level which is higher than level 0 (typically to level 1), and restarting to level 0. By default the restarting is turned off. It can be turned on by the --restarting option or turned off by --no-restarting. Following options were added to support restarting to a lower level: --restart-after-level=LEVEL, --restart-after-age=DAYS, --max-restart-level-size=PERCENTAGE Following options were added to support restarting to level 0: --full-restart-after-count=COUNT, --full-restart-after-age=DAYS See the program help or the user documentation for their description. * Added support for Python's internal tar. With internal tar support the GNU tar binary becomes optional. One may use tar_internal, targz_internal and tarbz2_internal archiver types which use internal tar implementation that does not depend on GNU tar, gzip and bzip2 external binaries. Incremental archiving and compression strength setting are not supported by internal archiver types. * Added an option for specifying the archive destination directory. New option -d DIR_PATH, --dest-dir=DIR_PATH was added. It takes a path as the argument and if specified, the archive will be created in that path. Its default value is "." (current directory) so the behaviour is not changed from previous versions. It can be specified also in archive specification file. âForceâ option --force-dest-dir=DIR_PATH was added as well. * Improved handling of tar messages. Messages that tar program sends to stderr are printed as warnings by AutoArchive. Similarly, messages that tar sends to stdout are printed as verbose messages by AutoArchive. * If used archiver type does not support a specified feature the user is warned about it. * Fixed the program crash when âtarâ archiver type was specified. * Added User documentation in HTML format Alongside with manual pages the user documentation is now available also in HTML. Entire documentation processing was moved to Sphinx. Sources are written in ReStructuredText format and outputs to HTML, manual pages and README documents are generated. Version 0.3.1 [2011-03-28] -------------------------- * Output messages contains archive specification file reference If an error, warning or info message is printed during an archive specification file processing (during archive creation), it contains name of the currently processed .aa file or a path to it enclosed in square brackets. This is useful if more .aa files are processed in a single run. * Fixed setting of the exit code Exit code was always 0 even if an error occurred. * Fixed error reporting in case of inaccessible archive root directory If directory set in the âpathâ option is not valid in some way (i.e. does not exists) the error is shown only once. * Fixed priority of user-config-dir option If both command line and configuration file specified the user-config-dir option then the value from the configuration file was preferred. This was fixed so now the command line option has higher priority. * Fixed reading the --user-config-file from command line Option --user-config-file was ignored when specified on the command line. Version 0.3.0 [2011-03-18] -------------------------- * Changed format of the archive specification file Incompatible changes of the â.aa fileâ format were introduced. Section [General] has been renamed to [Content]. Also, a new section [Archive] was added. Preferred option format is now âvariable-name = valueâ instead of âvariable_name: valueâ â this affects options âinclude_filesâ and âexclude_filesâ. Migration of all â.aa filesâ is required. It involves renaming the [General] section to [Archive]; also renaming options âinclude_filesâ and âexclude_filesâ to âinclude-filesâ and âexclude-filesâ respectively. Optionally, the colon (:) after the variable name can be replaced by equals sign (=). * Added support for configuration files Most of the options that is possible to specify on the command line can be now specified in a configuration file as well. System-wide and user configuration files are supported in â/etc/aa/aa.confâ and â~/.config/aa/aa.confâ paths respectively. Options names are same as command line ones except the leading â--â. * Archive specification files can contain configuration options Some of the command line or configuration options can be specified in the archive specification file as well, under the [Archive] section. Options specified here have higher priority than options in configuration files and the command line. An error is reported if a known configuration option which is not supported in the archive spec. file is present in it. Also an error is reported if the archive spec. file contains an unsupported section. * Archive specifications directory. Archive specification files can now be stored in a dedicated directory â the archive specifications directory. By default, if no â.aa fileâ is specified on the command line, all â.aa filesâ from the archive specifications directory are processed. If the archive specification file is specified without the extension then it is searched in the archive specifications directory. If it is specified with the extension then it is the path to it. * New options ** --archive-specs-dir Directory where archive specification files will be searched. ** --user-config-file Alternate user configuration file. ** --user-config-dir Alternate user configuration directory. ** Force options As some of the options can be specified in the archive specification file they can not be overridden by a same command line option. Therefore several âforceâ command line options was introduced. For example the option âarchiverâ can be overridden by --force-archiver even if âarchiverâ is specified in an archiver spec. file. *** --force-archiver Force archiver type. *** --force-incremental Force incremental backup. *** --force-compression-level Force compression strength level. *** --force-no-incremental Force disabling the incremental backup. ** --no-incremental Disable incremental backup. * Default archiver type was changed to targz. * Do not give up if specified level is too high If --level value is higher than next level in a row, do not fail but use next-in-a-row level value instead. * Fixed error handling when creating user directories If it is not possible to create the user configuration directory or the snapshot directory an error is reported instead of an unhandled exception. * Moved to Python 3 AutoArchive now requires Python 3. * Refactored to a new architecture Application was split to several separate components (Configuration, Archiving, UI) which are managed by a framework (Mainf). Components are using the framework to expose their public interfaces and access interfaces of other components. Version 0.2.0 [2010-03-21] -------------------------- * Added xz support for tar archives. In the --archiver option it is now possible to specify a tarxz type which creates .tar.xz archives. * Changed the --compresion-level option spelling Option --compresion-level was changed to --compression-level. * Fixed environment variable overwriting when using -c option If the --compression-level option is specified, the corresponding option is added to the environment variable for specific compression utility so its previous content is not overwritten. This fixes behavior in scenarios like: $ BZIP2=-v aa -c 1 etc.aa where in previous versions the option -v set in BZIP2 environment variable did not have any effect. Version 0.1.2 [2009-04-14] -------------------------- * Specified GNU GPL version in file headers (bug #2691699). No GNU GPL version was specified in headers of source code files which was confusing about used version of the license. Now every source file specifies version 3 of the GNU GPL license. * Added example files (bug #2692252). Added some example '.aa' configuration files to doc directory. * Created autoarchive symlink to aa command and aa man page (bug #2692266). Created symbolic link to aa command named 'autoarchive'. It is thus possible to use either aa or autoarchive command. Same for the man page. Version 0.1.1 [2008-11-19] -------------------------- * Better handling of archiver exit codes and failures. When tar exits with code 1 (Some files changed while being archived), the result of backup operation is not 'failed'. Notice message is printed instead. Version 0.1.0 [2008-10-25] -------------------------- * Added gzip and lzma support for tar archives. New archiver types are possible to specify in --archiver option: targz and tarlzma which creates tar.gz and tar.lzma archives. * Path to user configuration directory changed. User configuration directory is now at ~/.config/aa/ instead of ~/.aa/. * Added ability to specify multiple .aa files. Now it is possible to specify more than one archive spec file as arguments. All of them will be processed and corresponding number of archives will be created. Version 0.0.4 [2008-09-19] -------------------------- * Fixed bug where specifying backup level 0 leads to creation of level 1 if level 0 already existed. * Fixed printing of empty error messages. * Ctrl-C does not print stack trace anymore. Version 0.0.3 [2008-09-16] -------------------------- * First public release. Local variables: mode: outline end: