------------------------------------------------------------------------------
rsnapshot changelog
http://www.rsnapshot.org/
------------------------------------------------------------------------------

current master
------------------------------------------------------------------------------
- Display warning, when the verbosity is set multiple times (e.g. on
  command-line and logfile at the same time)
- Changed maintainership in all files.
- Capture rsync's output right (Github issue 102)

VERSION 1.4.0
------------------------------------------------------------------------------
- Tidy the code with perltidy
- Fix --rsh command line option
  The --rsh option of rsync got errornously quoted (Debian Bug #743310)
- Define traps to unmount LVM parts after fail
  If you use LVM snapshots and rsnapshot fails, rsnapshot will unmount and
  remove the snapshot, too.
- cd to home before executing a command
- if($use_lazy_deletes): remove lockfile in any case
- Bail on failing cmd_(pre|post)exec
  If one of those commands fails, rsnapshot will exit with exit code != 0
- Capture output from rsync and print/log if level is >=4
- Print rsnpashot's PID when logging to syslog, instead of the logger's PID.
- make script uses pod2man instead of /usr/bin/pod2man
- rsnapshot-diff: Fixed removed files reported as addition (+ mark)
- Introduction of backup_exec resource for running unix commands interspersed
  with backup and backup_script jobs.
- check for SIGPIPE, mainly in case cron fails when trying to mail
  (this is probably why rsnapshot dies mysteriously if it outputs when
  called by cron on a system which does not have mail working).
- add test case for -t showing --link-dest when there is only one snapshot
- if gnu_cp_al fails, test out a simple cp -al command before suggesting
  that the cp does not support -al.
- When snapshot_root does not exist, check existence of parent directories.
- include_conf `command` now strips backticks before execution (bug fix
  based on suggestion from David Osborn).
- Ignore extraneous output from lvremove command.  (patch by Tim Connors) 
- Update current maintainer status in Authors section of man page.
  (David Cantrell stepped down between 1.3.0 and 1.3.1.) 
- Remove some old (1.1.x -> 1.2.0) upgrade notices from man page.
- Allow linux_lvm_cmd_* in config file to have options also.
- Allow `backticks with options` in include_conf.
- Fix inaccurate omission of --link-dest in test-mode output
- rsnapshot-diff: Add -s option to show size of each file.


VERSION 1.3.1  (Aug 31 2008)
------------------------------------------------------------------------------
- Fix help message mixup in lines between -c and -t.
- Add more specific error messages for not currently implemented potential 
  per backup point options, like cmd_preexec.
- Allow named pipe as logfile - suggested by Patrice Levesque.
- Include rsnapshot-copy script written by Matt McCutchen.
- Allow `backticks` in include_conf.
- Apply fix-sync_first-rollback.diff patch from Matt McCutchen (02 Apr 2008).
- Fix bug with link_dest not being used on second and later backups 
  when you have link_dest 1 and sync_first 1. (Ignore $sync_dir_was_present)
- Patch from Adam Greenbaum to allow passing of ssh arguments correctly.
- David Grant added rsync_numtries to rsnapshot.conf.
- Applied Ben Low's Linux LVM patch.
- Added stop_on_stale_lockfile, thanks to Henning Moll.
- Michael Ashley's fix for filter/space problems on the rsync command line.
- Remove trailing whitespace from command names in rsnapshot.conf.
- Warn about extra spaces between tab and argument.
- Added multi-line config options, thanks to Dieter Bloms.
- The 'interval' config option is now called 'retain'.
- chdir to avoid an obscure bug in some versions of GNU rm.
- Changed use_lazy_deletes option to use _delete.$$ directories.
- Added note about -H and hard links to docs for rsync_short_args.
- Include rsnapshot-diff.1 in rpm.
- Fix bug with rsnapshot sync the first time (when .sync does not exist)
  trying to copy hourly.0 to .sync, even if hourly.0 doesn't exist.
  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=413439


VERSION 1.3.0  (Oct 21 2006)
------------------------------------------------------------------------------
- Add files rsnapreport.pl Upgrading_from_1.1 rsnapshot-HOWTO.en.html to rpm.
- fix a bug with removing interval.delete (with use_lazy_deletes).
- rsnapshot detects the global ssh_args option being set multiple times,
  and gives a config error suggesting the per-backup ssh_args instead.
- Move Upgrading section of INSTALL to docs/Upgrading_from_1.1.
- Incorporate patch from Alan Batie to fix bugs with include_conf.
- check for quoting on $rsync_long_args rather than just splitting on space.
- Change rsnapshot.conf default to have lockfile enabled.
- Check for stale lock files (PID not currently running).
- explicitly add mode 0644 to sysopen() to create lockfile
- give warning if write() or close() return 0 when writing/closing lockfile
- Make prev_max_interval "not present (yet), nothing to copy" message
  when rotating interval.0 more visible (level 3 instead of level 4).
- Add man page for rsnapshot-diff (generated from perldoc).
- Updates to rsnapshot man pages (via perldoc).
  - Use =item in AUTHORS section
  - move mis-placed =back
  - document stale lock file detection 
  - strongly recommend using a lock file
  - add a chmod to example backup script
  - change crontab example for weekly from 4 "weekly"s per month to 1 per week
  - expand on why higher intervals are done first via cron.
- Change space to tab after #cmd_rsnapshot_diff in rsnapshot.conf.default.in.
- In rpm patch, set cmd_rsnapshot_diff to /usr/bin/rsnapshot-diff.
- Set the test scripts t/*.t.in to run from the source directory
  and create directory t/support/files/a if necessary.
- Trim comments in README about gnu cp versions > 5.3 since rsnapshot 
  strips trailing slashes for gnu cp with rsnapshot 1.2.9 and later.
- Add pointers to HOWTO and utils/rsnapreport.pl in README.
- More examples (eg: timestamp backup_script) in rsnapshot.conf.default.in.
- Change "Perhaps this is not GNU cp?" error message.


VERSION 1.2.9  (May 18 2006)
------------------------------------------------------------------------------
- David Keegel <djk@cybersource.com.au> now responsible for release
  management
- Added utils/rsnapreport.pl, written by William Bear.
- Detect exit status 23 and 24 from rsync in rsync_cleanup_after_native_cp_al
- Add $! (system error message) to various warning messages in native_cp_al
- Add more examples and comments to rsnapshot.conf.default.in
- In Makefile*, for "make tar", include "t" (testing) in the tar file.
- Do not strip the trailing slash if it's a remote root filesystem.
  (This was a bug in rsnapshot 1.2.3 if you use "backup host:/  ...")
- Give a more descriptive error message "cannot have a remote snapshot_root"
  if user tries to configure an ssh path or rsync path as snapshot_root.
- Add some more description to the error "rsnapshot refuses to create
  snapshot_root when no_create_root is enabled", after checking whether
  the snapshot_root is a non-directory file, or just plain non-existent.
- Changed default syslog level to 'info' instead of 'notice'
- Added include_conf directive
- Allowed remote ssh directory paths starting with "~/" as well as "/".
- Changed rsnapshot maintainer from Nathan Rosenquist to David Cantrell
- David Cantrell <david@cantrell.org.uk> wrote the rsnapshot-diff utility
- Chris Petersen added cwrsync permanent-share support
- Robert Jackson <RobertJ@promedicalinc.com> added use_lazy_deletes
- Added rollback for backup_scripts
- Added rsnapshot-diff to Autoconf/Automake install/build process
- Added sha1sum to utils/sign_packages.sh
- Added a CVS Id to key files
- Fixed exit value for some test invocations
- Added 'rsnapshot diff' front-end to rsnapshot-diff
- Added cmd_rsnapshot_diff
- Added cmd_preexec
- Added cmd_postexec
- Added db prefs examples to utils/backup_mysql.sh and utils/backup_pgsql.sh
- Fixed formatting with email addresses under AUTHORS section of man page
- Added an extra safety check in copy_symlink()
- Fixed swapped config comments about rsync_long_args in
  write_upgrade_config_file()
- Added optional use of the CPAN Lchown module
- Added safe_chown() wrapper to handle chown() calls safely
- Added warning message if we can't properly lchown a symlink
- Added fixes in sync_cp_src_dest() and sync_rm_dest() to properly delete a
  file that is being replaced with a directory
- Fixed error message for dest not being specified in sync_rm_dest()
- Changed skip message level to 2 in rsync_backup_point() 
- Added better file type checking in sync_cp_src_dest()
- Removed redundant stat() calls in sync_cp_src_dest() and sync_rm_dest()
- Removed trailing slashes from file paths when calling cp -al subroutines
- Changed show_usage() to use here printing
- Changed strip trailing slash operation in rsync_backup_point() to use
  strip_trailing_slash()
- Fixed incorrect call to cmd_rm_rf() in handle_interval()
- Fixed trailing slash on call to bail() in handle_interval()
- Added sync_first feature (touches a lot of code)
- When link_dest is enabled, rsnapshot will now hunt for the newest available
  directory to use as a link_dest target (up to the oldest directory)
- When use_lazy_deletes is enabled, remove the lockfile before the final
  delete
- Expanded on default (no args) and help messages
- Added show_latest_snapshot() subroutine for shell scripts
- Fixed sync_if_different() to allow alternating directories and files to be
  created with the same names between runs
- Removed redundant line width and indent values in wrap_cmd() calls
- Anthony Ettinger <apwebdesign@yahoo.com> wrote utils/mysqlbackup.pl
- Sherman Boyd wrote utils/random_file_verify.sh

VERSION 1.2.3 (Aug ?? ??:?? 2005)
------------------------------------------------------------------------------
- Fixed a bug introduced in 1.2.2 when rsync is not using --relative
- Fixed a bug where the snapshot_root could be included in backups if
  the root filesystem was being backed up and --relative was not set

VERSION 1.2.2 (Aug 20 18:07 2005)
------------------------------------------------------------------------------
- David Keegel <djk@cybersource.com.au> fixed a race condition in
  add_lockfile()
- David Keegel <djk@cybersource.com.au> improved error reporting when config
  file isn't present
- Provided a workaround for a bug in some versions of rsync which caused
  files to not be deleted properly when the --relative flag was set.

VERSION 1.2.1 (Apr 09 15:10 2005)
------------------------------------------------------------------------------
- Fixed security bug when neither cmd_cp or link_dest are enabled
- Disabled chown() call in copy_symlink()
- Check for symlink before all chown() calls

VERSION 1.2.0 (Jan 31 21:43 2005)
------------------------------------------------------------------------------
- Turned off buffering ($|=1)
- Changed default lockfile to /var/run/rsnapshot.pid, for FHS compliance
- Clarified man page licensing (GPL)
- Fixed is_real_local_abs_path() to handle dangling symlinks
- Changed utils/backup_smb_share.sh to re-order the smbtar arguments
- Added "-uroot" to utils/backup_mysql.sh example file
- Changed regex in is_blank() subroutine
- Changed rsync include/exclude mode to relative
- Peter Palfrader <weasel@debian.org> enhanced error reporting to include
  command line options
- Bharat Mediratta <bharat@menalto.com> improved the exclusion rules to avoid
  backing up the snapshot root. The old way was also kept for users who can't
  or don't want to upgrade their destination paths in their backup points.
- Bharat Mediratta <bharat@menalto.com> added a "+" feature to the per-backup
  point args to allow additive include/exclude rules.
- Added safe_rename() subroutine to work around a semi-obscure timestamp bug
  in certain Linux kernels
- Clarified error message about local/relative paths in config file parsing
- Added check for leading/trailing spaces in remote (ssh) paths
- Added du(1) and crontab(1) to man page references
- Added config.guess and config.sub for automake
- Changed default destination paths for backup points in example config file
  for compatibility with --relative rsync flag
- Added formatting fix to show one slash only when invoking backup_script
  with link_dest option enabled
- Broke backwards compatibility for the benefit of fixing several outstanding
  issues. The default value for rsync_long_args is now different.
- Changed add_lockfile() verbose message to "echo $$ > /path/to/lockfile.pid"
  which is actually what the code is doing
- Added check to make sure backup_scripts can't share destination path with
  backup points
- Added check to make sure different backup_script destinations don't overlap
  and don't clobber backup point destinations
- Added "cmd_du" parameter to allow specifying the path to "du"
- Nicolas Kaiser <nikai@nikai.net> provided various typo fixes in the program
  and man page
- Fixed "missing rsync/configtest ok" bug
- Added config_version parameter, which is now required
- All autoconf files were updated with the ones from Debian sarge
- Added upgrade-config-file feature for "make upgrade" target and manual use
- Added upgrade feature to RPM spec file
- Added check-config-version feature for use with shell scripts, etc.
- Changed version_only argument to version-only, for consistency with new
  options
- Conditionalized configure script to only advise the user to copy the
  rsnapshot.conf.default file to rsnapshot.conf if it's a new installation
- Added rollback feature to restore interval.0 snapshots when using link_dest
- Added second option for du, to compare subdirectories or files
- Added "du_args" to pass arguments to du
- Relaxed cmd line option validation, but only when du is the command
- Now only show command invocation for logger on verbose level 4
- Added rsync cleanup after native_cp_al() to preserve special files
- Removed warning messages from native_cp_al() about special files
- Modified error printing so full run string is displayed once at the top
  of a list of error messages
- Fixed bug in old method of preventing the snapshot root from being backed
  up, which occurred when snapshot root was more than one level down from a
  backup point
- Added commented out du_args to rsnapshot.conf.default.in
- Added descriptive error if "du" fails

VERSION 1.1.6 (Jul 05 16:35 2004)
------------------------------------------------------------------------------
- Moved the bulk of the program into smaller subroutines (finally)
- show_disk_usage() now exits the program directly instead of returning a
  value
- "0" can now be used as a valid interval name
- Config error messages now wrap before 80 columns.
- Moved $file_line_num global var into parse_config_file()
- Split on \s+ instead of \s where appropriate
- Moved $rsync_include_args and $rsync_include_file_args into
  parse_config_file()
- Removed the $have_{cmd} global variables entirely
- Took %opts out of the global namespace and into get_cmd_line_opts()
- Changed a failed syslog call from an error to a warning
- Removed $cwd from global namespace
- Fixed bug where cp_al() commands would not be displayed in test mode
- Removed redundant $done flag from file_diff() while loop
- Downgraded close() file errors to warnings
- Added utils/backup_dpkg.sh to backup Debian package information
- Simplified the utils/ section of the Makefile under "make tar"
- Now exits with an error if unknown command line flags are found
- Added a check in parse_cmd_line_opts() for the config file if specified
- Changed link_dest rsync error message to description instead of number
- Changed description of test mode in the help cmd
- Changed description of -V mode
- Removed perl defaults from man page
- Clarified crontab entry timing in man page
- Removed trailing slashes on calls to mkpath() to fix bug with NetBSD
- Removed trailing slashes on calls to rename() to fix bug with NetBSD
- Removed trailing slashes on calls to rmtree() just in case
- Fixed man page generation in "make tar" target
- Changed -V message when there's no directory to rotate

VERSION 1.1.5 (Jun 20 20:56 2004)
------------------------------------------------------------------------------
- /bin/rm is the default for deleting directories (in the default config file)
- Removed redundant validation (re: intervals) in execution section
- Print PID in lockfile
- Added a few more comments, clarified some existing comments
- Made some minor updates to the man page
- Fix display formatting double-slash bug when '/' is a backup point
- Changed return value when called with no cmd line args to 1
- Added a new exit code, for warnings (2)
- rsync exit codes 23 and 24 make rsnapshot return a warning exit code
  instead of an error
- Changed link_dest comment in config file to mention "cross-platform"
- Added utils/debug_moving_files.sh abuse script for testing
- Added 'du' option to show disk usage in snapshot_root
- Moved setlocale() after begin message
- Added manual link() call when we're using --link-dest and a single file
- Don't call syslog in bail() if it's a test run

VERSION 1.1.4 (May 16 23:44 2004)
------------------------------------------------------------------------------
- (re)added the cmd_rm parameter. rmtree() can't delete some obscure files
  on some systems
- Added rm_rf() stub function to recursively remove things using either
  rmtree() or /bin/rm -rf, depending on the configuration.
- Added cp and rm detection to ./configure script
- Set LC_ALL locale variable to C in an attempt to fix rmtree() locale issue
- Added no_create_root option to rsnapshot
- Added utils/make_cvs_snapshot.sh utility script
- Added utils/sign_packages.sh utility script
- Added utils/rsnapshot_if_mounted.sh utility script
- Standardized comment headers in utils/ scripts
- Added DEBIAN/copyright file
- Fixed man page to say RSNAPSHOT instead of RSNAPSHOT-PROGRAM for the title

VERSION 1.1.3 (Apr 06 14:24 2004)
------------------------------------------------------------------------------
- Validating rsync_short_args, must be in format '-an', not '-a -n'
- Assembling @cmd_stack list one at a time, rather than using join()
- Added "don't panic" message in rotate_interval() at verbose >= 4
  when no filesystem actions get performed
- Fixed latent display bug in print_msg() (now that it's getting used)
- Fixed "cd //" display bug when running from root directory (removed extra /)

VERSION 1.1.2 (Mar 17 02:12 2004)
------------------------------------------------------------------------------
- Fixed slash formatting issue with non-ssh rsync protocol calls
- Fixed a slightly inconvenient permissions issue in rsnaptar
- Added support for arbitrary arguments to backup_script files

VERSION 1.1.1 (Feb 11 23:24 2004)
------------------------------------------------------------------------------
- Changed some fatal errors to warnings in some recursive subroutines
- Added optional GPG support to the rsnaptar utility shell script

VERSION 1.1.0 (Jan 24 16:41 2004)
------------------------------------------------------------------------------
- The first interval must now have a value of at least 2 if more than one
  interval is being used
- Now allows "/" as a backup point on the local drive
- Cleaned up command formatting to consolidate slashes
- Added subroutines for centralized print/logging
- Added logfile and loglevel parameters to the config file
- Added logging feature
- Moved loglevel/verbose number validation into a seperate subroutine
- Added much more error checking on the config file
- Changed @snapshot_points to @backup_points for more consistent terminology
- Made all "-x" executable checks also check for "-f" file
- Made rsync error messages report the full path to rsync and the correct
  return value
- Fixed minor screen formatting issue with print_cmd() subroutine where it
  could line wrap the first element of a command
- Changed exit error code from -1 (255) to 1, to be more standard
- Added include, exclude, include_file, and exclude_file params
- Fixed bug where not all locally specified backup options would be parsed
- Replaced calls to bail() from config parsing code with config_err() calls
- Added directory traversal checks for commands
- Changed indentation in print_cmd() to 4 spaces instead of 2
- Fixed bug where a file named "tmp" in the snapshot root would not be
  deleted properly at runtime (if sync_if_different() was used)

VERSION 1.0.10 (Jan 20 00:43 2004)
------------------------------------------------------------------------------
- Added link_dest option, to use the --link-dest flag with rsync
- Now checking the return values from rsync, with conditional syntax warning
  for --link-dest on older versions
- Added additional calls to syslog, to report rsync failures
- Now checking the return value of scripts called from backup_script
- Conditionalized the backup_interval() and rotate_interval() subroutines to
  only delete the oldest interval if we're keeping more than one of that
  interval
- Reformatted source code so it doesn't wrap (at 126 columns, or 1024x768)
- Shortened output when invoked with no args or from help to fix in 80 columns
- Changed rotate_interval() subroutine to simply move directories from lower
  intervals up instead of recursively copying hard links
- Added formatting subroutine to wrap all verbose command output at 80 columns

VERSION 1.0.9 (Jan 6 19:17 2004)
------------------------------------------------------------------------------
- Added backup_mysql.sh example script in utils/ to backup a MySQL database
- Added backup_smb_share.sh example script in utils/ to backup an SMB share
- Changed verbose settings internally to use numbers, instead of several
  arbitrary variables.
- Added optional "verbose" field to the config file, with values 1-5
- Fixed lockfile code to not run in test mode

VERSION 1.0.8 (Dec 26 12:56 2003)
------------------------------------------------------------------------------
- Added backup_script option to have rsnapshot invoke backup scripts directly
- Added two example backup scripts in the utils/ directory, one for Postgres,
  and one for downloading the CVS root for rsnapshot
- Added optional syslog support using the "logger" command
- Fixed ssh_args local override for individual backup points
- Added additional comments to various sections of the code
- Removed redundant rsync arguments from the default
- Moved add_lockfile() call so it runs later in the program

VERSION 1.0.7 (Dec 19 19:22 2003)
------------------------------------------------------------------------------
- Added ssh_args parameter to pass arbitrary args to ssh
- Fully integrated Autoconf build support for the program and config file
- Provided more helpful error messages when the config file is not found
- Fixed false "Can not remove lockfile" error when cmd_ssh is not defined
  but is referenced later in backup points

VERSION 1.0.6 (Nov 26 21:03 2003)
------------------------------------------------------------------------------
- added \n to utime() debug message
- moved all rsync calls into dynamically populated arrays
- added rsync_short_args and rsync_long_args to config file
- improved parse_backup_opts() validation code
- Fixed "make install" vs. INSTALL bug for Mac OS X
- Ted Zlatanov <tzz@lifelogs.com> added Autoconf support!

VERSION 1.0.5 (Nov 14 00:22 2003)
------------------------------------------------------------------------------
- Changed domain to rsnapshot.org
- Added lockfile feature, with patch to enable it by default in the RPM
- Updated man page to include the one_fs feature, did general clean up
- Fixed '..' pattern matching bug that would exclude valid files
- Updated Makefile to use "install", now allows "make tar" as a non-root user
- Moved most remaining regexes into dedicated subroutines

VERSION 1.0.4 (Nov 6 23:18 2003)
------------------------------------------------------------------------------
- Added one_fs feature to the config file (same as -x on the command line)
- Fixed anonymous rsync feature, which had been broken in 1.0.3
- Added verification data to the RPM package

VERSION 1.0.3 (Nov 2 14:43 2003)
------------------------------------------------------------------------------
- Carl Wilhelm Soderstrom <chrome@real-time.com> added RPM format to release.
- Added "one filesystem" option to prevent rsnapshot from crossing filesystems
  within a backup point. Patch provided by Ted Zlatanov <tzz@lifelogs.com>
- Minor typographical errors fixed.

VERSION 1.0.2 (Oct 24 23:22 2003)
------------------------------------------------------------------------------
- added -V "extra verbose" option, to show rsync verbose output

VERSION 1.0.1 (Oct 18 03:22 2003)
------------------------------------------------------------------------------
- Make sure the snapshot directory either needs to be created or already is a
  directory. Previously we were checking only if the snapshot root existed,
  which would cause problems if it were a file.
- Cleaned up and streamlined the config file parsing portion of the code.
- Changed numeric comparisons so that a typo would prevent compilation,
  instead of acting weird. i.e. (0 == $foo) instead of ($foo == 0)

VERSION 1.0.0 (Sep 14 02:58 2003)
------------------------------------------------------------------------------
- Removed backward compatibility cruft for mkdir, touch, rm, and mv.
- rsnapshot has now been tested successfully on Debian and Redhat Linux, as well
  as IRIX and Solaris.
- Man pages are no longer gzipped, for compatibility with Solaris and others.

VERSION 0.9.5 (Sep 9 20:11 2003)
------------------------------------------------------------------------------
- Removed most dependencies on external shell programs.
- Added compatibility for non-Linux platforms.
- Did significant testing/debugging to ensure compatibility with perl 5.004,
  5.6, and 5.8
- Tested and working successfully on IRIX, more tests to follow.

VERSION 0.9.4 (Sep 1 23:55 2003)
------------------------------------------------------------------------------
- Heavily commented variables, and added much stricter syntax checking of the
  config file.
- Additional error checking on mkdir
- updated the man page.

VERSION 0.9.3 (Sep 1 01:46 2003)
------------------------------------------------------------------------------
- Anonymous rsync connections now supported.
- Reverted back from recycling the oldest snapshots to the tried and true
  method of deleting the old ones.
- Now rsnapshot will not only create the snapshot root directory as it did
  before, but it will also chmod 0700 the directory when it creates it.

VERSION 0.9.2 (Aug 31 04:08 2003)
------------------------------------------------------------------------------
- Optimized rotating snapshot intervals by recycling the last directory to the
  first, instead of deleting the last and copying .0 to .1
- Added support for spaces in path names.
- The config file now requires tabs to seperate all entries, where spaces were
  before acceptable. This was the easiest way to support spaces in path names.
- Directory entries now require a trailing slash. This is so that files can be
  treated correctly without having to be examined directly (which is
  impractical over rsync/ssh).
