On behalf of the Unison team, I am delighted to announce that Unison
2.27 is now designated as stable, replacing 2.13 and 2.17 as the
recommended version for all users.
Version 2.27.57, available as of today, fixes a few minor issues found
by early users of 2.27. Sources for this version can be found on the
Unison web site...
...and binaries should appear over the next couple of weeks as people
build them on various architectures. 2.27.57 will interoperate with
other variants of 2.27, but not with earlier versions with different
major release numbers.
Changes in Version 2.27
Changes since 2.17:
* Major rewrite and cleanup of the whole Mac OS X graphical user
interface by Craig Federighi. Thanks, Craig!!!
* Several small fixes to the GTK2 UI to make it work better under
Windows. Thanks to Karl M for these.
* The backup functionality has been completely rewritten. The
external interface has not changed, but numerous bugs, irregular
behaviors, and cross-platform inconsistencies have been
* The Unison project now accepts donations via PayPal. You can
a link to the donation page on the Unison home page
* Some important safety improvements:
+ Added a new mountpoint preference, which can be used to
specify a path that must exist in both replicas at the
update detection (otherwise Unison aborts). This can be
to avoid potentially dangerous situations when Unison is
with removable media such as external hard drives and
+ The confirmation of "big deletes" is now controlled by a
boolean preference confirmbigdeletes. Default is true,
gives the same behavior as previously. (This
at least partly superceded by the mountpoint preference,
it has been left in place in case it is useful to some
+ If Unison is asked to "follow" a symbolic link but there is
nothing at the other end of the link, it will now flag this
path as an error, rather than treating the symlink
missing or deleted. This avoids a potentially dangerous
situation where a followed symlink points to an external
filesystem that might be offline when Unison is run
(whereupon Unison would cheerfully delete the corresponding
files in the other replica!).
* Smaller changes:
+ Added forcepartial and preferpartial preferences, which
behave like force and prefer but can be specified on a
per-path basis. [Thanks to Alan Schmitt for this.]
+ A bare-bones self test feature was added, which runs unison
through some of its paces and checks that the results
expected. The coverage of the tests is still very limited,
but the facility has already been very useful in debugging
the new backup functionality (especially in exposing some
subtle cross-platform issues).
+ Refined debugging code so that the verbosity of individual
modules can be controlled separately. Instead of just
'-debug verbose' on the command line, you can put '-debug
update+', which causes all the extra messages in the Update
module, but not other modules, to be printed. Putting '-
verbose' causes all modules to print with maximum
+ Removed mergebatch preference. (It never seemed very
and its semantics were confusing.)
+ Rewrote some of the merging functionality, for better
cooperation with external Harmony instances.
+ Changed the temp file prefix from .# to .unison.
+ Compressed the output from the text user interface
(particularly when run with the -terse flag) to make it
easier to interpret the results when Unison is run several
times in succession from a script.
+ Diff and merge functions now work under Windows.
+ Changed the order of arguments to the default diff command
(so that the + and - annotations in diff's output are
+ Added .mpp files to the "never fastcheck" list (like .xls
+ Ignore all-whitespace lines in preference files
+ Small fix to ctime (non-)handling in update detection under
windows with fastcheck.
* Many small bugfixes, including:
+ Fixed a longstanding bug regarding fastcheck and daylight
saving time under Windows when Unison is set up to
synchronize modification times. (Modification times
updated in the archive in this case, so we have to
+ Fixed a bug that would occasionally cause the archives
left in non-identical states on the two hosts after
+ Fixed a bug that prevented Unison from communicating
correctly between 32- and 64-bit architectures.
+ On windows, file creation times are no longer used as a
for inode numbers. (This is unfortunate, as it makes
fastcheck a little less safe. But it turns out that file
creation times are not reliable under Windows: if a file is
removed and a new file is created in its place, the new one
will sometimes be given the same creation date as the old
+ Set read-only file to R/W on OSX before attempting to
+ Fixed bug resulting in spurious "Aborted" errors during
transport (thanks to Jerome Vouillon)
+ Enable diff if file contents have changed in one
only properties in the other.
+ Removed misleading documentation for 'repeat' preference.
+ Fixed a bug in merging code where Unison could sometimes
deadlock with the external merge program, if the latter
produced large amounts of output.
+ Workaround for a bug compiling gtk2 user interface against
current versions of gtk2+ libraries.
+ Added a better error message for "ambiguous paths".
+ Squashed a longstanding bug that would cause file
fail with the message "Failed: Error in readWrite: Is a
+ Replaced symlinks with copies of their targets in the Growl
framework in src/uimac. This should make the sources easier
to check out from the svn repository on WinXP systems.
+ Added a workaround (suggested by Karl M.) for the problem
discussed on the unison users mailing list where, on the
Windows platform, the server would hang when transferring
files. I conjecture that the problem has to do with the RPC
mechanism, which was used to make a call back from the
to the client (inside the Trace.log function) so that
message would be appended to the log file on the client.
workaround is to dump these messages (about when
xferbycopying shortcuts are applied and whether they
just to the standard output of the Unison process, not
Changes since 2.13:
* The features for performing backups and for invoking external
merge programs have been completely rewritten by Stephane
(thanks, Stephane!). The user-visible functionality should not
change, but the internals have been rationalized and there are a
number of new features. See the manual (in particular, the
description of the backupXXX preferences) for details.
* Incorporated patches for ipv6 support, contributed by Samuel
Thibault. (Note that, due to a bug in the released OCaml 3.08.3
compiler, this code will not actually work with ipv6 unless
compiled with the CVS version of the OCaml compiler, where
has been fixed; however, ipv4 should continue to work normally.)
* OSX interface:
+ Incorporated Ben Willmore's cool new icon for the Mac UI.
* Small fixes:
+ Fixed off by one error in month numbers (in printed dates)
reported by Bob Burger