Change History
==============

1.6 (2017-01-21)
----------------

- --check option crashed on destination when it has untracked inodes
  whose paths are greater (alphabetically) than any path on source side.

1.5 (2015-02-09)
----------------

- Several bugs causing the DB to be wrongly updated have been fixed. They are
  quite severe because could later cause useless resync or corruption, and
  as usual, it is advised to use --check & --force options if you think you
  were affected. See messages of commits 45a3425, 5f98a37 & 87bbece for more
  information.
- --check option crashed when used several times in a row.
- --check option learned to detect untracked files that have hardlinks.
  This required to bump the protocol version.

1.4 (2014-09-08)
----------------

- In v1.3, the --check option was improved to check hardlinks but the
  implementation was broken: this is now fixed.
- --check option learned to detect unexpected inodes on destination.
  Those that are not filtered (by --filter, which is not ignored anymore
  in this mode) are marked for deletion.
- --check option failed with an encoding error when paths were specified
  at command line.
- A new --force option was added to check data even if metadata don't differ
  between source and database. With the above improvements to --check, fssync
  should now be able to recover from any inconsistency between the database
  and the destination side.
- fssync now opens regular files for reading without updating the last access
  time. I don't plan to do the same for directory listing because it's not
  trivial (and in my opinion, last access time is so useless compared to what
  it costs that `noatime` should be the default).

1.3 (2014-08-20)
----------------

This version fixes a few bugs related to hardlinks, symlinks and timestamps.
Unless you only use fssync for regular files and directories, it is advised
to use --check option.

- --check option has been improved to check hardlinks and acls. It now also
  updates the database so that next synchronization fixes all found errors.
  In order words, it now checks all metadata (and only that).
- In some cases, fssync failed to hardlink a new inode and instead created
  different inodes on destination. This could happen when all hardlinks of an
  old inode I were deleted and the new inode of different type was created with
  same number I and hardlinked multiple times.
- Symlinks to different targets were treated as being of same type. Although
  they are, in practice this is wrong because the kernel does not provide any
  way to edit the target without deleting it first. A related bug was that
  modification time of parent directory was not always checked.
- A possible case of wrong mtime for regular files has been fixed.

Other changes:

- fssync now checks that local and remote speak same protocol, so that users
  do not run versions that differ too much on both sides.
- fssync learned to resume synchronization of new files.
- A file descriptor leak when handling hardlinks/renames has been fixed.

1.2 (2014-06-24)
----------------

- The modification time of a directory could be wrongly left altered after
  children were synchronized. This case happened when the source timestamp
  was explicitly restored to its original value, in such way that fssync
  thought metadata were the same on both sides.
- All failures due to a missing inode on destination side should be fixed,
  with a warning. If this inode was already visited, it is required to run
  fssync again to restore. Of course, fssync should be the only process that
  modifies destination which means such case should not happen, but it's simple
  and safe to recover.
- Default value of -R option is documented and fixed.

1.1 (2014-03-10)
----------------

- Destination side failed at synchronizing extended attributes.
- README: What is not synchronized is documented in paragraph 4
  of BUGS/LIMITATIONS/TODO section.
- Better support of mount points, to safely synchronize when everything is
  unmounted, without having to explicitly filter them. Instead of deleting
  inodes (usually empty directories) that get masked by other filesystems,
  fssync now checks these inodes don't appear in the visible/synchronized tree.
  `fssync_root` example is updated to reflect this.

1.0 (2013-12-18)
----------------

Initial release.
