Search the web
Sign In
New User? Sign Up
unison-announce · Release announcements for Unison file synchronizer
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Show off your group to the world. Share a photo of your group with us.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Messages 1 - 31 of 52   Newest  |  < Newer  |  Older >  |  Oldest
Messages: Show Message Summaries   (Group by Topic) Sort by Date v  
#31 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Sun Jan 6, 2002 8:50 am
Subject: Any comments on Unison beta-release?
benjamincpierce
Offline Offline
Send Email Send Email
 
We've gotten no reports of serious problems with the beta-release
announced a few weeks ago, and we're hoping to upgrade it to a stable
release this week.  If anybody has comments on things that ought to be
fixed before we do that, now's the time...

(In particular, we'd appreciate some feedback -- negative or positive --
from people running the current beta-release on Windows.  We've heard
some rumors that there may be some rough edges there, but nothing
concrete.)

Thanks,

         - B

#30 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Mon Dec 24, 2001 4:41 pm
Subject: Re: [unison-users] unison 2.7.39 (beta) now available
benjamincpierce
Offline Offline
Send Email Send Email
 
P.S. to Zhe's release announcement...

We've been using this release ourselves for several weeks with no
problems, but there have been some pretty major internal changes since
the last release and it is likely to be a little flakey.  *Courageous*
users (and those with a Need for Speed) are strongly encouraged to
upgrade so that we can get the bugs worked out as quickly as possible,
but most users should wait for the next stable release.

      B

#29 From: Zhe Yang <zheyang@...>
Date: Mon Dec 24, 2001 8:38 am
Subject: unison 2.7.39 (beta) now available
zheyang
Offline Offline
Send Email Send Email
 
The unison team is pleased to announce a new beta-release of Unison.
This release improves on the functionality in several aspects, most
notably its use light-weight threads to take better advantage of
available network bandwidth.  The source code has been upgraded to
OCaml 3.04 with LablGtk 1.2.3.  For compiling on Windows platforms, we
now provide the option of using the Cygwin GNU C compiler.  See the
detail below for other changes.

Grab it from the usual address:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Please let us know if you notice any problems.

Happy holidays,

The Unison Team

------------------------------------------------------------------------

News

    The current version of Unison is 2.7.39.
    Changes since 2.7.7:
      * Incorporated, once again, a multi-threaded transport sub-system.
        It transfers several files at the same time, thereby making much
        more effective use of available network bandwidth. Unlike the
        earlier attempt, this time we do not rely on the native thread
        library of OCaml. Instead, we implement a light-weight,
        non-preemptive multi-thread library in OCaml directly. This
        version appears stable.
        Some adjustments to unison are made to accommodate the
        multi-threaded version. These include, in particular, changes to
        the user interface and logging, for example:
           + Two log entries for each transferring task, one for the
             beginning, one for the end.
           + Suppressed warning messages against removing temp files left
             by a previous unison run, because warning does not work
             nicely under multi-threading. The temp file names are made
             less likely to coincide with the name of a file created by
             the user. They take the form
             .#<filename>.<serial>.unison.tmp.
      * Added a new command to the GTK user interface: pressing 'f' causes
        Unison to start a new update detection phase, using as paths just
        those paths that have been detected as changed and not yet marked
        as successfully completed. Use this command to quickly restart
        Unison on just the set of paths still needing attention after a
        previous run.
      * Made the ignorecase preference user-visible, and changed the
        initialization code so that it can be manually set to true, even
        if neither host is running Windows. (This may be useful, e.g.,
        when using Unison running on a Unix system with a FAT volume
        mounted.)
      * Small improvements and bug fixes:
           + Errors in preference files now generate fatal errors rather
             than warnings at startup time. (I.e., you can't go on from
             them.) Also, we fixed a bug that was preventing these
             warnings from appearing in the text UI, so some users who
             have been running (unsuspectingly) with garbage in their
             prefs files may now get error reports.
           + Error reporting for preference files now provides file name
             and line number.
           + More intelligible message in the case of identical change to
             the same files: ``Nothing to do: replicas have been changed
             only in identical ways since last sync.''
           + Files with prefix '.#' excluded when scanning for preference
             files.
           + Rsync instructions are send directly instead of first
             marshaled.
           + Won't try forever to get the fingerprint of a continuously
             changing file: unison will give up after certain number of
             retries.
           + Other bug fixes, including the one reported by Peter Selinger
             (force=older preference not working).
      * Compilation:
           + Upgraded to the new OCaml 3.04 compiler, with the LablGtk
             1.2.3 library (patched version used for compiling under
             Windows).
           + Added the option to compile unison on the Windows platform
             with Cygwin GNU C compiler. This option only supports
             building dynamically linked unison executables.

    Changes since 2.7.4:
      * Fixed a silly (but debilitating) bug in the client startup
        sequence.

    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.7.39.
    Changes since 2.7.7:
      * Incorporated, once again, a multi-threaded transport sub-system.
        It transfers several files at the same time, thereby making much
        more effective use of available network bandwidth. Unlike the
        earlier attempt, this time we do not rely on the native thread
        library of OCaml. Instead, we implement a light-weight,
        non-preemptive multi-thread library in OCaml directly. This
        version appears stable.
        Some adjustments to unison are made to accommodate the
        multi-threaded version. These include, in particular, changes to
        the user interface and logging, for example:
           + Two log entries for each transferring task, one for the
             beginning, one for the end.
           + Suppressed warning messages against removing temp files left
             by a previous unison run, because warning does not work
             nicely under multi-threading. The temp file names are made
             less likely to coincide with the name of a file created by
             the user. They take the form
             .#<filename>.<serial>.unison.tmp.
      * Added a new command to the GTK user interface: pressing 'f' causes
        Unison to start a new update detection phase, using as paths just
        those paths that have been detected as changed and not yet marked
        as successfully completed. Use this command to quickly restart
        Unison on just the set of paths still needing attention after a
        previous run.
      * Made the ignorecase preference user-visible, and changed the
        initialization code so that it can be manually set to true, even
        if neither host is running Windows. (This may be useful, e.g.,
        when using Unison running on a Unix system with a FAT volume
        mounted.)
      * Small improvements and bug fixes:
           + Errors in preference files now generate fatal errors rather
             than warnings at startup time. (I.e., you can't go on from
             them.) Also, we fixed a bug that was preventing these
             warnings from appearing in the text UI, so some users who
             have been running (unsuspectingly) with garbage in their
             prefs files may now get error reports.
           + Error reporting for preference files now provides file name
             and line number.
           + More intelligible message in the case of identical change to
             the same files: ``Nothing to do: replicas have been changed
             only in identical ways since last sync.''
           + Files with prefix '.#' excluded when scanning for preference
             files.
           + Rsync instructions are send directly instead of first
             marshaled.
           + Won't try forever to get the fingerprint of a continuously
             changing file: unison will give up after certain number of
             retries.
           + Other bug fixes, including the one reported by Peter Selinger
             (force=older preference not working).
      * Compilation:
           + Upgraded to the new OCaml 3.04 compiler, with the LablGtk
             1.2.3 library (patched version used for compiling under
             Windows).
           + Added the option to compile unison on the Windows platform
             with Cygwin GNU C compiler. This option only supports
             building dynamically linked unison executables.

    Changes since 2.7.4:
      * Fixed a silly (but debilitating) bug in the client startup
        sequence.

    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#28 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Nov 15, 2001 8:18 am
Subject: Calling all power Unison users...
benjamincpierce
Offline Offline
Send Email Send Email
 
We are finishing up a paper on the design and implementation of Unison
(to be submitted to Usenix), and we'd like to include some discussion of
the kinds of things that people are using it for.

If you consider yourself a "power user" -- i.e., you regularly
synchronize more than a couple of gigabytes, use it to administer a
system for more than just yourself, etc., could you drop me a quick note
saying what you're doing?

Thanks,

        -- B

P.S.  I'll summarize the results to the unison-users list
(http://groups.yahoo.com/group/unison-users), in case other people are
curious.

#27 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Sep 13, 2001 5:38 pm
Subject: unison 2.7.7 now available
bcpierce@...
Send Email Send Email
 
Another (hopefully more) stable version of Unison is now available in
the usual place:

    http://www.cis.upenn.edu/~bcpierce/unison/download.html

This version fixes a bug that would reliably prevent the Unison client
from starting in 2.7.4.

         -- B



    Changes since 2.7.4:
      * Fixed a silly (but debilitating) bug in the client startup
        sequence.

    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.7.7.
    Changes since 2.7.4:
      * Fixed a silly (but debilitating) bug in the client startup
        sequence.

    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#26 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Wed Sep 12, 2001 3:34 pm
Subject: unison 2.7.4 now available
bcpierce@...
Send Email Send Email
 
A new stable release of Unison is now available at the usual place:

    http://www.cis.upenn.edu/~bcpierce/unison/download.html

This one is not much different from 2.7.1 -- just a small bugfix
(which affects only installation, so if you're using 2.7.1 happily,
you don't need it) and a tiny feature enhancement.

         -- B

    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.  Useful if you use the include directive in preference
        files.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.7.4.
    Changes since 2.7.1:
      * Added addprefsto preference, which (when set) controls which
        preference file new preferences (e.g. new ignore patterns) are
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
        bug did not affect normal operation --- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#25 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Tue Aug 28, 2001 4:40 pm
Subject: unison 2.7.1 (stable) now available
bcpierce@...
Send Email Send Email
 
We've just exported a new stable release, 2.7.1.  Grab it from here:

    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Enjoy,

         The Unison Team

-----------------------------------------------------------------------

News

    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.7.1.
    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
        default (for a fast check---which also happens to be safe---when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
        preference names are now spelled out in lowercase. For backward
        compatibility, the old names still work, but they are not
        mentioned in the manual any more.
      * The temp files created by the 'diff' and 'merge' commands are now
        named by prepending a new prefix to the file name, rather than
        appending a suffix. This should avoid confusing diff/merge
        programs that depend on the suffix to guess the type of the file
        contents.
      * We now set the keepalive option on the server socket, to make sure
        that the server times out if the communication link is
        unexpectedly broken.
      * Bug fixes:
           + When updating small files, Unison now closes the destination
             file.
           + File permissions are properly updated when the file is behind
             a followed link.
           + Several other small fixes.

    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: centralized backups and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a centralized backup facility that keeps
             a full backup of (selected files in) each replica, and a
             merging feature that allows Unison to invoke an external
             file-merging tool to resolve conflicting changes to
             individual files.
           + Centralized backups:
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
                  usual sense and as the ``common version'' when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONBACKUPDIR.)
                o The predicate backup controls which files are actually
                  backed up: giving the preference 'backup = Path *'
                  causes backing up of all files.
                o Files are added to the backup directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be backed up.
                     # Otherwise, each file will be backed up the first
                       time unison propagates an update for it.
                o The preference backupversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backups preference is
                  also still supported, but backup is now preferred.
                o It is OK to manually delete files from the backup
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a backup exists for this file
                  (see the backup preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the backed up copy
                       of the original version of the file (i.e., its
                       state at the end of the last successful run of
                       Unison), if one exists (applies only to merge, not
                       merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#24 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Jul 6, 2001 2:18 pm
Subject: unison 2.6.59 (beta) now available
bcpierce@...
Send Email Send Email
 
We've now fixed (we hope) a number of problems that people discovered
with the previous beta release (a few are still pending).  We've also
added some major new functionality, thanks principally to the efforts
of Sylvain Roy, who just finished a summer internship at Penn.  Since
this code is not yet extensively tested, we're labeling this a
beta-release.  However, users that do not exercise the new
functionality should find this version quite stable.

Grab it from here, as usual:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Enjoy,

         The Unison Team

-------------------------------------------------------------------------

News

    The current version of Unison is 2.6.59.
    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: mirroring and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a mirroring facility that keeps a full
             backup of (selected files in) each replica, and a merging
             feature that allows Unison to invoke an external file-merging
             tool to resolve conflicting changes to individual files.
           + Mirroring:
                o Unison now maintains mirrors of the last-synchronized
                  versions of (some of) the files in each replica, both as
                  backups and to be used as the ``common version'' when
                  invoking external merge programs.
                o The mirrored files are stored in a directory
                  /.unison/mirror on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONMIRRORDIR.)
                o The predicate 'mirror' controls which files are actually
                  mirrored: giving the preference 'mirror = Path *' causes
                  mirroring of all files.
                o Files are added to the mirror directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be mirrored.
                     # Otherwise, each file will be mirrored the first
                       time unison propagates an update for it.
                o The preference mirrorversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backup preference is
                  also still supported, but mirror is now preferred.
                o It is OK to manually delete files from the mirror
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a mirror exists for this file
                  (see the mirror preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the mirrored copy of
                       the original version of the file (i.e., its state
                       at the end of the last successful run of Unison),
                       if one exists (applies only to merge, not merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.6.59.
    Changes since 2.6.38:
      * Major Windows performance improvement!
        We've added a preference fastcheck that makes Unison look only at
        a file's creation time and last-modified time to check whether it
        has changed. This should result in a huge speedup when checking
        for updates in large replicas.
        When this switch is set, Unison will use file creation times as
        'pseudo inode numbers' when scanning Windows replicas for updates,
        instead of reading the full contents of every file. This may cause
        Unison to miss propagating an update if the create time,
        modification time, and length of the file are all unchanged by the
        update (this is not easy to achieve, but it can be done). However,
        Unison will never overwrite such an update with a change from the
        other replica, since it always does a safe check for updates just
        before propagating a change. Thus, it is reasonable to use this
        switch most of the time and occasionally run Unison once with
        fastcheck set to false, if you are worried that Unison may have
        overlooked an update.
        Warning: This change is has not yet been thoroughly field-tested.
        If you set the fastcheck preference, pay careful attention to what
        Unison is doing.
      * New functionality: mirroring and merging
           + This version incorporates two pieces of major new
             functionality, implemented by Sylvain Roy during a summer
             internship at Penn: a mirroring facility that keeps a full
             backup of (selected files in) each replica, and a merging
             feature that allows Unison to invoke an external file-merging
             tool to resolve conflicting changes to individual files.
           + Mirroring:
                o Unison now maintains mirrors of the last-synchronized
                  versions of (some of) the files in each replica, both as
                  backups and to be used as the ``common version'' when
                  invoking external merge programs.
                o The mirrored files are stored in a directory
                  /.unison/mirror on each host. (The name of this
                  directory can be changed by setting the environment
                  variable UNISONMIRRORDIR.)
                o The predicate 'mirror' controls which files are actually
                  mirrored: giving the preference 'mirror = Path *' causes
                  mirroring of all files.
                o Files are added to the mirror directory whenever unison
                  updates its archive. This means that
                     # When unison reconstructs its archive from scratch
                       (e.g., because of an upgrade, or because the
                       archive files have been manually deleted), all
                       files will be mirrored.
                     # Otherwise, each file will be mirrored the first
                       time unison propagates an update for it.
                o The preference mirrorversions controls how many previous
                  versions of each file are kept. The default is 2 (i.e.,
                  the last synchronized version plus one backup).
                o For backward compatibility, the backup preference is
                  also still supported, but mirror is now preferred.
                o It is OK to manually delete files from the mirror
                  directory (or to throw away the directory itself).
                  Before unison uses any of these files for anything
                  important, it checks that its fingerprint matches the
                  one that it expects.
           + Merging:
                o Both user interfaces offer a new 'merge' command,
                  invoked by pressing 'm' (with a changed file selected).
                o The actual merging is performed by an external program.
                  The preferences merge and merge2 control how this
                  program is invoked. If a mirror exists for this file
                  (see the mirror preference), then the merge preference
                  is used for this purpose; otherwise merge2 is used. In
                  both cases, the value of the preference should be a
                  string representing the command that should be passed to
                  a shell to invoke the merge program. Within this string,
                  the special substrings CURRENT1, CURRENT2, NEW, and OLD
                  may appear at any point. Unison will substitute these as
                  follows before invoking the command:
                     # CURRENT1 is replaced by the name of the local copy
                       of the file;
                     # CURRENT2 is replaced by the name of a temporary
                       file, into which the contents of the remote copy of
                       the file have been transferred by Unison prior to
                       performing the merge;
                     # NEW is replaced by the name of a temporary file
                       that Unison expects to be written by the merge
                       program when it finishes, giving the desired new
                       contents of the file; and
                     # OLD is replaced by the name of the mirrored copy of
                       the original version of the file (i.e., its state
                       at the end of the last successful run of Unison),
                       if one exists (applies only to merge, not merge2).
                  For example, on Unix systems setting the merge
                  preference to

    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
                  will tell Unison to use the external diff3 program for
                  merging.
                  A large number of external merging programs are
                  available. For example, emacs users may find the
                  following convenient:

     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
                nil "NEW")'
     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
                  (These commands are displayed here on two lines to avoid
                  running off the edge of the page. In your preference
                  file, each should be written on a single line.)
                o If the external program exits without leaving any file
                  at the path NEW, Unison considers the merge to have
                  failed. If the merge program writes a file called NEW
                  but exits with a non-zero status code, then Unison
                  considers the merge to have succeeded but to have
                  generated conflicts. In this case, it attempts to invoke
                  an external editor so that the user can resolve the
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
                  the merge2 and merge preferences -- we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
             adds the suffix '.prf' to the included file by default. If a
             file with precisely the given name exists in the .unison
             directory, it will be used; otherwise Unison will add .prf,
             as it did before. (This change means that included preference
             files can be named blah.include instead of blah.prf, so that
             unison will not offer them in its 'choose a preference file'
             dialog.)
           + For Linux systems, we now offer both a statically linked and
             a dynamically linked executable. The static one is larger,
             but will probably run on more systems, since it doesn't
             depend on the same versions of dynamically linked library
             modules being available.
           + Fixed the force and prefer preferences, which were getting
             the propagation direction exactly backwards.
           + Fixed a bug in the startup code that would cause unison to
             crash when the default profile (~/.unison/default.prf) does
             not exist.
           + Fixed a bug where, on the run when a profile is first
             created, Unison would confusingly display the roots in
             reverse order in the user interface.
      * For developers:
           + We've added a module dependency diagram to the source
             distribution, in src/DEPENDENCIES.ps, to help new prospective
             developers with navigating the code.

    Changes since 2.6.11:
      * INCOMPATIBLE CHANGE: Archive format has changed.
      * INCOMPATIBLE CHANGE: The startup sequence has been completely
        rewritten and greatly simplified. The main user-visible change is
        that the defaultpath preference has been removed. Its effect can
        be approximated by using multiple profiles, with include
        directives to incorporate common settings. All uses of defaultpath
        in existing profiles should be changed to path.
        Another change in startup behavior that will affect some users is
        that it is no longer possible to specify roots both in the profile
        and on the command line.
        You can achieve a similar effect, though, by breaking your profile
        into two:


   default.prf =
       root = blah
       root = foo
       include common

   common.prf =
       <everything else>
        Now do

   unison common root1 root2
        when you want to specify roots explicitly.
      * The -prefer and -force options have been extended to allow users
        to specify that files with more recent modtimes should be
        propagated, writing either -prefer newer or -force newer. (For
        symmetry, Unison will also accept -prefer older or -force older.)
        The -force older/newer options can only be used when -times is
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
      * Names of roots can now be ``aliased'' to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
        experts only. See the ``Archive Files'' section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
             switching to a new profile without restarting Unison from
             scratch.
           + The GUI also supports one-key shortcuts for commonly used
             profiles. If a profile contains a preference of the form 'key
             = n', where n is a single digit, then pressing this key will
             cause Unison to immediately switch to this profile and begin
             synchronization again from scratch. (Any actions that may
             have been selected for a set of changes currently being
             displayed will be discarded.)
           + Each profile may include a preference 'label = <string>'
             giving a descriptive string that described the options
             selected in this profile. The string is listed along with the
             profile name in the profile selection dialog, and displayed
             in the top-right corner of the main Unison window.
      * Minor:
           + Fixed a bug that would sometimes cause the 'diff' display to
             order the files backwards relative to the main user
             interface. (Thanks to Pascal Brisset for this fix.)
           + On Unix systems, the graphical version of Unison will check
             the DISPLAY variable and, if it is not set, automatically
             fall back to the textual user interface.
           + Synchronization paths (path preferences) are now matched
             against the ignore preferences. So if a path is both
             specified in a path preference and ignored, it will be
             skipped.
           + Numerous other bugfixes and small improvements.

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#23 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Tue Mar 20, 2001 6:22 pm
Subject: Re: testing
bcpierce@...
Send Email Send Email
 
Sorry -- I did not mean that to go to the whole list.  (Actually, I was
trying to test something about the egroups moderation mechanism -- what I
didn't realize [because it was not true a week ago] was that a message
from a moderator would not be submitted to moderation!)

      B

#22 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Tue Mar 20, 2001 7:11 pm
Subject: testing
bcpierce@...
Send Email Send Email
 
Please do NOT approve this message.  (I want to see what happens when one
is rejected.)

        B

#21 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Tue Mar 6, 2001 5:17 pm
Subject: unison 2.6.38 now available (beta-release)
bcpierce@...
Send Email Send Email
 
The unison team is pleased to announce a beta-release of a new version
of Unison.  This release includes some much-requested new features
(detailed below), as well as some major rewrites of internal
structures, so if you download it, please pay attention to what it's
doing and make sure you agree.  If you do download, we'd appreciate a
note (even just "Works fine" is useful, since it helps us decide when
the release has been tested enough to move it to stable status -- of
course, if you notice problems, we'd like to hear about those too).

Have fun,

         -- B

Download address, as usual:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Changes since 2.6.11:
    * INCOMPATIBLE CHANGE: Archive format has changed.
    * INCOMPATIBLE CHANGE: The startup sequence has been completely
      rewritten and greatly simplified. The main user-visible change is
      that the defaultpath preference has been removed. Its effect can
      be approximated by using multiple profiles, with include
      directives to incorporate common settings. All uses of defaultpath
      in existing profiles should be changed to path.
    * The -prefer and -force options have been extended to allow users
      to specify that files with more recent modtimes should be
      propagated, writing either -prefer newer or -force newer. (For
      symmetry, Unison will also accept -prefer older or -force older.)
      The -force older/newer options can only be used when -times is
      also set.
      The graphical user interface provides access to these facilities
      on a one-off basis via the Actions menu.
    * Names of roots can now be ``aliased'' to allow replicas to be
      relocated without changing the name of the archive file where
      Unison stores information between runs. This feature is for
      experts only. See the ``Archive Files'' section of the manual for
      more information.
    * Graphical user-interface:
         + A new command is provided in the Synchronization menu for
           switching to a new profile without restarting Unison from
           scratch.
         + The GUI also supports one-key shortcuts for commonly used
           profiles. If a profile contains a preference of the form 'key
           = n', where n is a single digit, then pressing this key will
           cause Unison to immediately switch to this profile and begin
           synchronization again from scratch. (Any actions that may
           have been selected for a set of changes currently being
           displayed will be discarded.)
         + Each profile may include a preference 'label = <string>'
           giving a descriptive string that described the options
           selected in this profile. The string is listed along with the
           profile name in the profile selection dialog, and displayed
           in the top-right corner of the main Unison window.
    * Minor:
         + Fixed a bug that would sometimes cause the 'diff' display to
           order the files backwards relative to the main user
           interface. (Thanks to Pascal Brisset for this fix.)
         + On Unix systems, the graphical version of Unison will check
           the DISPLAY variable and, if it is not set, automatically
           fall back to the textual user interface.
         + Synchronization paths (path preferences) are now matched
           against the ignore preferences. So if a path is both
           specified in a path preference and ignored, it will be
           skipped.
         + Numerous other bugfixes and small improvements.

  Changes since 2.6.1:
    * The synchronization of modification times has been disabled for
      directories.
    * Preference files may now include lines of the form include <name>,
      which will cause name.prf to be read at that point.
    * The synchronization of permission between Windows and Unix now
      works properly.
    * A binding CYGWIN=binmode in now added to the environment so that
      the Cygwin port of OpenSSH works properly in a non-Cygwin context.
    * The servercmd and addversionno preferences can now be used
      together: -addversionno appends an appropriate -NNN to the server
      command, which is found by using the value of the -servercmd
      preference if there is one, or else just unison.
    * Both '-pref=val' and '-pref val' are now allowed for boolean
      values. (The former can be used to set a preference to false.)
    * Lot of small bugs fixed.

  Changes since 2.5.31:
    * The log preference is now set to true by default, since the log
      file seems useful for most users.
    * Several miscellaneous bugfixes (most involving symlinks).

  Changes since 2.5.25:
    * INCOMPATIBLE CHANGE: Archive format has changed (again).
    * Several significant bugs introduced in 2.5.25 have been fixed.

  Changes since 2.5.1:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * New functionality:
         + Unison now synchronizes file modtimes, user-ids, and
           group-ids.
           These new features are controlled by a set of new
           preferences, all of which are currently false by default.
              o When the times preference is set to true, file
                modification times are propaged. (Because the
                representations of time may not have the same
                granularity on both replicas, Unison may not always be
                able to make the modtimes precisely equal, but it will
                get them as close as the operating systems involved
                allow.)
              o When the owner preference is set to true, file ownership
                information is synchronized.
              o When the group preference is set to true, group
                information is synchronized.
              o When the numericIds preference is set to true, owner and
                group information is synchronized numerically. By
                default, owner and group numbers are converted to names
                on each replica and these names are synchronized. (The
                special user id 0 and the special group 0 are never
                mapped via user/group names even if this preference is
                not set.)
         + Added an integer-valued preference perms that can be used to
           control the propagation of permission bits. The value of this
           preference is a mask indicating which permission bits should
           be synchronized. It is set by default to 0o1777: all bits but
           the set-uid and set-gid bits are synchronised (synchronizing
           theses latter bits can be a security hazard). If you want to
           synchronize all bits, you can set the value of this
           preference to -1.
         + Added a log preference (default false), which makes Unison
           keep a complete record of the changes it makes to the
           replicas. By default, this record is written to a file called
           unison.log in the user's home directory (the value of the
           HOME environment variable). If you want it someplace else,
           set the logfile preference to the full pathname you want
           Unison to use.
         + Added an ignorenot preference that maintains a set of
           patterns for paths that should definitely not be ignored,
           whether or not they match an ignore pattern. (That is, a path
           will now be ignored iff it matches an ignore pattern and does
           not match any ignorenot patterns.)
    * User-interface improvements:
         + Roots are now displayed in the user interface in the same
           order as they were given on the command line or in the
           preferences file.
         + When the batch preference is set, the graphical user
           interface no longer waits for user confirmation when it
           displays a warning message: it simply pops up an advisory
           window with a Dismiss button at the bottom and keeps on
           going.
         + Added a new preference for controlling how many status
           messages are printed during update detection: statusdepth
           controls the maximum depth for paths on the local machine
           (longer paths are not displayed, nor are non-directory
           paths). The value should be an integer; default is 1.
         + Removed the trace and silent preferences. They did not seem
           very useful, and there were too many preferences for
           controlling output in various ways.
         + The text UI now displays just the default command (the one
           that will be used if the user just types <return>) instead of
           all available commands. Typing ? will print the full list of
           possibilities.
         + The function that finds the canonical hostname of the local
           host (which is used, for example, in calculating the name of
           the archive file used to remember which files have been
           synchronized) normally uses the gethostname operating system
           call. However, if the environment variable
           UNISONLOCALHOSTNAME is set, its value will now be used
           instead. This makes it easier to use Unison in situations
           where a machine's name changes frequently (e.g., because it
           is a laptop and gets moved around a lot).
         + File owner and group are now displayed in the ``detail
           window'' at the bottom of the screen, when unison is
           configured to synchronize them.
    * For hackers:
         + Updated to Jacques Garrigue's new version of lablgtk, which
           means we can throw away our local patched version.
           If you're compiling the GTK version of unison from sources,
           you'll need to update your copy of lablgtk to the developers
           release, available from
           http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
           (Warning: installing lablgtk under Windows is currently a bit
           challenging.)
         + The TODO.txt file (in the source distribution) has been
           cleaned up and reorganized. The list of pending tasks should
           be much easier to make sense of, for people that may want to
           contribute their programming energies. There is also a
           separate file BUGS.txt for open bugs.
         + The Tk user interface has been removed (it was not being
           maintained and no longer compiles).
         + The debug preference now prints quite a bit of additional
           information that should be useful for identifying sources of
           problems.
         + The version number of the remote server is now checked right
           away during the connection setup handshake, rather than
           later. (Somebody sent a bug report of a server crash that
           turned out to come from using inconsistent versions: better
           to check this earlier and in a way that can't crash either
           client or server.)
         + Unison now runs correctly on 64-bit architectures (e.g. Alpha
           linux). We will not be distributing binaries for these
           architectures ourselves (at least for a while) but if someone
           would like to make them available, we'll be glad to provide a
           link to them.
    * Bug fixes:
         + Pattern matching (e.g. for ignore) is now case-insensitive
           when Unison is in case-insensitive mode (i.e., when one of
           the replicas is on a windows machine).
         + Some people had trouble with mysterious failures during
           propagation of updates, where files would be falsely reported
           as having changed during synchronization. This should be
           fixed.
         + Numerous smaller fixes.

  Changes since 2.4.1:
    * Added a number of 'sorting modes' for the user interface. By
      default, conflicting changes are displayed at the top, and the
      rest of the entries are sorted in alphabetical order. This
      behavior can be changed in the following ways:
         + Setting the sortnewfirst preference to true causes newly
           created files to be displayed before changed files.
         + Setting sortbysize causes files to be displayed in increasing
           order of size.
         + Giving the preference sortfirst=<pattern> (where <pattern> is
           a path descriptor in the same format as 'ignore' and 'follow'
           patterns, causes paths matching this pattern to be displayed
           first.
         + Similarly, giving the preference sortlast=<pattern> causes
           paths matching this pattern to be displayed last.
      The sorting preferences are described in more detail in the user
      manual. The sortnewfirst and sortbysize flags can also be accessed
      from the 'Sort' menu in the grpahical user interface.
    * Added two new preferences that can be used to change unison's
      fundamental behavior to make it more like a mirroring tool instead
      of a synchronizer.
         + Giving the preference prefer with argument <root> (by adding
           -prefer <root> to the command line or prefer=<root>) to your
           profile) means that, if there is a conflict, the contents of
           <root> should be propagated to the other replica (with no
           questions asked). Non-conflicting changes are treated as
           usual.
         + Giving the preference force with argument <root> will make
           unison resolve all differences in favor of the given root,
           even if it was the other replica that was changed.
      These options should be used with care! (More information is
      available in the manual.)
    * Small changes:
         + Changed default answer to 'Yes' in all two-button dialogs in
           the graphical interface (this seems more intuitive).
         + The rsync preference has been removed (it was used to
           activate rsync compression for file transfers, but rsync
           compression is now enabled by default).
         + In the text user interface, the arrows indicating which
           direction changes are being propagated are printed
           differently when the user has overridded Unison's default
           recommendation (====> instead of ---->). This matches the
           behavior of the graphical interface, which displays such
           arrows in a different color.
         + Carriage returns (Control-M's) are ignored at the ends of
           lines in profiles, for Windows compatibility.
         + All preferences are now fully documented in the user manual.

  Changes since 2.3.12:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * New/improved functionality:
         + A new preference -sortbysize controls the order in which
           changes are displayed to the user: when it is set to true,
           the smallest changed files are displayed first. (The default
           setting is false.)
         + A new preference -sortnewfirst causes newly created files to
           be listed before other updates in the user interface.
         + We now allow the ssh protocol to specify a port.
         + Incompatible change: The unison: protocol is deprecated, and
           we added file: and socket:. You may have to modify your
           profiles in the .unison directory. If a replica is specified
           without an explicit protocol, we now assume it refers to a
           file. (Previously "//saul/foo" meant to use SSH to connect to
           saul, then access the foo directory. Now it means to access
           saul via a remote file mechanism such as samba; the old
           effect is now achieved by writing ssh://saul/foo.)
         + Changed the startup sequence for the case where roots are
           given but no profile is given on the command line. The new
           behavior is to use the default profile (creating it if it
           does not exist), and temporarily override its roots. The
           manual claimed that this case would work by reading no
           profile at all, but AFAIK this was never true.
         + In all user interfaces, files with conflicts are always
           listed first
         + A new preference 'sshversion' can be used to control which
           version of ssh should be used to connect to the server. Legal
           values are 1 and 2. (Default is empty, which will make unison
           use whatever version of ssh is installed as the default 'ssh'
           command.)
         + The situation when the permissions of a file was updated the
           same on both side is now handled correctly (we used to report
           a spurious conflict)
    * Improvements for the Windows version:
         + The fact that filenames are treated case-insensitively under
           Windows should now be handled correctly. The exact behavior
           is described in the cross-platform section of the manual.
         + It should be possible to synchronize with Windows shares,
           e.g., //host/drive/path.
         + Workarounds to the bug in syncing root directories in
           Windows. The most difficult thing to fix is an ocaml bug:
           Unix.opendir fails on c: in some versions of Windows.
    * Improvements to the GTK user interface (the Tk interface is no
      longer being maintained):
         + The UI now displays actions differently (in blue) when they
           have been explicitly changed by the user from Unison's
           default recommendation.
         + More colorful appearance.
         + The initial profile selection window works better.
         + If any transfers failed, a message to this effect is
           displayed along with 'Synchronization complete' at the end of
           the transfer phase (in case they may have scrolled off the
           top).
         + Added a global progress meter, displaying the percentage of
           total bytes that have been transferred so far.
    * Improvements to the text user interface:
         + The file details will be displayed automatically when a
           conflict is been detected.
         + when a warning is generated (e.g. for a temporary file left
           over from a previous run of unison) Unison will no longer
           wait for a response if it is running in -batch mode.
         + The UI now displays a short list of possible inputs each time
           it waits for user interaction.
         + The UI now quits immediately (rather than looping back and
           starting the interaction again) if the user presses 'q' when
           asked whether to propagate changes.
         + Pressing 'g' in the text user interface will proceed
           immediately with propagating updates, without asking any more
           questions.
    * Documentation and installation changes:
         + The manual now includes a FAQ, plus sections on common
           problems and on tricks contributed by users.
         + Both the download page and the download directory explicitly
           say what are the current stable and beta-test version
           numbers.
         + The OCaml sources for the up-to-the-minute developers'
           version (not guaranteed to be stable, or even to compile, at
           any given time!) are now available from the download page.
         + Added a subsection to the manual describing cross-platform
           issues (case conflicts, illegal filenames)
    * Many small bug fixes and random improvements.

  Changes since 2.3.1:
    * Several bug fixes. The most important is a bug in the rsync module
      that would occasionally cause change propagation to fail with a
      'rename' error.

  Changes since 2.2:
    * The multi-threaded transport system is now disabled by default.
      (It is not stable enough yet.)
    * Various bug fixes.
    * A new experimental feature:
      The final component of a -path argument may now be the wildcard
      specifier *. When Unison sees such a path, it expands this path on
      the client into into the corresponding list of paths by listing
      the contents of that directory.
      Note that if you use wildcard paths from the command line, you
      will probably need to use quotes or a backslash to prevent the *
      from being interpreted by your shell.
      If both roots are local, the contents of the first one will be
      used for expanding wildcard paths. (Nb: this is the first one
      after the canonization step -- i.e., the one that is listed first
      in the user interface -- not the one listed first on the command
      line or in the preferences file.)

  Changes since 2.1:
    * The transport subsystem now includes an implementation by Sylvain
      Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
      protocol. This protocol achieves much faster transfers when only a
      small part of a large file has been changed by sending just diffs.
      This feature is mainly helpful for transfers over slow links---on
      fast local area networks it can actually degrade performance---so
      we have left it off by default. Start unison with the -rsync
      option (or put rsync=true in your preferences file) to turn it on.
    * ``Progress bars'' are now diplayed during remote file transfers,
      showing what percentage of each file has been transferred so far.
    * The version numbering scheme has changed. New releases will now be
      have numbers like 2.2.30, where the second component is
      incremented on every significant public release and the third
      component is the ``patch level.''
    * Miscellaneous improvements to the GTK-based user interface.
    * The manual is now available in PDF format.
    * We are experimenting with using a multi-threaded transport
      subsystem to transfer several files at the same time, making much
      more effective use of available network bandwidth. This feature is
      not completely stable yet, so by default it is disabled in the
      release version of Unison.
      If you want to play with the multi-threaded version, you'll need
      to recompile Unison from sources (as described in the
      documentation), setting the THREADS flag in Makefile.OCaml to
      true. Make sure that your OCaml compiler has been installed with
      the -with-pthreads configuration option. (You can verify this by
      checking whether the file threads/threads.cma in the OCaml
      standard library directory contains the string -lpthread near the
      end.)

  Changes since 1.292:
    * Reduced memory footprint (this is especially important during the
      first run of unison, where it has to gather information about all
      the files in both repositories).
    * Fixed a bug that would cause the socket server under NT to fail
      after the client exits.
    * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
      interface (to avoid hitting them accidentally).

  Changes since 1.231:
    * Tunneling over ssh is now supported in the Windows version. See
      the installation section of the manual for detailed instructions.
    * The transport subsystem now includes an implementation of the
      rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
      protocol achieves much faster transfers when only a small part of
      a large file has been changed by sending just diffs. The rsync
      feature is off by default in the current version. Use the -rsync
      switch to turn it on. (Nb. We still have a lot of tuning to do:
      you may not notice much speedup yet.)
    * We're experimenting with a multi-threaded transport subsystem,
      written by Jerome Vouillon. The downloadable binaries are still
      single-threaded: if you want to try the multi-threaded version,
      you'll need to recompile from sources. (Say make THREADS=true.)
      Native thread support from the compiler is required. Use the
      option -threads N to select the maximal number of concurrent
      threads (default is 5). Multi-threaded and single-threaded
      clients/servers can interoperate.
    * A new GTK-based user interface is now available, thanks to Jacques
      Garrigue. The Tk user interface still works, but we'll be shifting
      development effort to the GTK interface from now on.
    * OCaml 3.00 is now required for compiling Unison from sources. The
      modules uitk and myfileselect have been changed to use labltk
      instead of camltk. To compile the Tk interface in Windows, you
      must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
      c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
      to install the headers and libraries (which are not installed by
      default).
    * Added a new -addversionno switch, which causes unison to use
      unison-<currentversionnumber> instead of just unison as the remote
      server command. This allows multiple versions of unison to coexist
      conveniently on the same server: whichever version is run on the
      client, the same version will be selected on the server.

  Changes since 1.219:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * This version fixes several annoying bugs, including:
         + Some cases where propagation of file permissions was not
           working.
         + umask is now ignored when creating directories
         + directories are create writable, so that a read-only
           directory and its contents can be propagated.
         + Handling of warnings generated by the server.
         + Synchronizing a path whose parent is not a directory on both
           sides is now flagged as erroneous.
         + Fixed some bugs related to symnbolic links and nonexistant
           roots.
              o When a change (deletion or new contents) is propagated
                onto a 'follow'ed symlink, the file pointed to by the
                link is now changed. (We used to change the link itself,
                which doesn't fit our assertion that 'follow' means the
                link is completely invisible)
              o When one root did not exist, propagating the other root
                on top of it used to fail, becuase unison could not
                calculate the working directory into which to write
                changes. This should be fixed.
    * A human-readable timestamp has been added to Unison's archive
      files.
    * The semantics of Path and Name regular expressions now correspond
      better.
    * Some minor improvements to the text UI (e.g. a command for going
      back to previous items)
    * The organization of the export directory has changed --- should be
      easier to find / download things now.

  Changes since 1.200:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * This version has not been tested extensively on Windows.
    * Major internal changes designed to make unison safer to run at the
      same time as the replicas are being changed by the user.
    * Internal performance improvements.

  Changes since 1.190:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * A number of internal functions have been changed to reduce the
      amount of memory allocation, especially during the first
      synchronization. This should help power users with very big
      replicas.
    * Reimplementation of low-level remote procedure call stuff, in
      preparation for adding rsync-like smart file transfer in a later
      release.
    * Miscellaneous bug fixes.

  Changes since 1.180:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * Fixed some small bugs in the interpretation of ignore patterns.
    * Fixed some problems that were preventing the Windows version from
      working correctly when click-started.
    * Fixes to treatment of file permissions under Windows, which were
      causing spurious reports of different permissions when
      synchronizing between windows and unix systems.
    * Fixed one more non-tail-recursive list processing function, which
      was causing stack overflows when synchronizing very large
      replicas.

  Changes since 1.169:
    * The text user interface now provides commands for ignoring files.
    * We found and fixed some more non-tail-recursive list processing
      functions. Some power users have reported success with very large
      replicas.
    * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
      automatically. If you want to ignore such files, put an
      appropriate ignore pattern in your profile.
    * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
      changed. Instead of putting a line of the form

                ignore = <regexp>
      in your profile (.unison/default.prf), you should put:

                ignore = Regexp <regexp>
      Moreover, two other styles of pattern are also recognized:

                ignore = Name <name>
      matches any path in which one component matches <name>, while

                ignore = Path <path>
      matches exactly the path <path>.
      Standard ``globbing'' conventions can be used in <name> and
      <path>:
         + a ? matches any single character except /
         + a * matches any sequence of characters not including /
         + [xyz] matches any character from the set {x, y, z }
         + {a,bb,ccc} matches any one of a, bb, or ccc.
      See the user manual for some examples.

  Changes since 1.146:
    * Some users were reporting stack overflows when synchronizing huge
      directories. We found and fixed some non-tail-recursive list
      processing functions, which we hope will solve the problem. Please
      give it a try and let us know.
    * Major additions to the documentation.

  Changes since 1.142:
    * Major internal tidying and many small bugfixes.
    * Major additions to the user manual.
    * Unison can now be started with no arguments -- it will prompt
      automatically for the name of a profile file containing the roots
      to be synchronized. This makes it possible to start the graphical
      UI from a desktop icon.
    * Fixed a small bug where the text UI on NT was raising a 'no such
      signal' exception.

  Changes since 1.139:
    * The precompiled windows binary in the last release was compiled
      with an old OCaml compiler, causing propagation of permissions not
      to work (and perhaps leading to some other strange behaviors we've
      heard reports about). This has been corrected. If you're using
      precompiled binaries on Windows, please upgrade.
    * Added a -debug command line flag, which controls debugging of
      various modules. Say -debug XXX to enable debug tracing for module
      XXX, or -debug all to turn on absolutely everything.
    * Fixed a small bug where the text UI on NT was raising a 'no such
      signal' exception.

  Changes since 1.111:
    * INCOMPATIBLE CHANGE: The names and formats of the preference files
      in the .unison directory have changed. In particular:
         + the file ``prefs'' should be renamed to default.prf
         + the contents of the file ``ignore'' should be merged into
           default.prf. Each line of the form REGEXP in ignore should
           become a line of the form ignore = REGEXP in default.prf.
    * Unison now handles permission bits and symbolic links. See the
      manual for details.
    * You can now have different preference files in your .unison
      directory. If you start unison like this

            unison profilename
      (i.e. with just one ``anonymous'' command-line argument), then the
      file ~/.unison/profilename.prf will be loaded instead of
      default.prf.
    * Some improvements to terminal handling in the text user interface
    * Added a switch -killServer that terminates the remote server
      process when the unison client is shutting down, even when using
      sockets for communication. (By default, a remote server created
      using ssh/rsh is terminated automatically, while a socket server
      is left running.)
    * When started in 'socket server' mode, unison prints 'server
      started' on stderr when it is ready to accept connections. (This
      may be useful for scripts that want to tell when a socket-mode
      server has finished initalization.)
    * We now make a nightly mirror of our current internal development
      tree, in case anyone wants an up-to-the-minute version to hack
      around with.
    * Added a file CONTRIB with some suggestions for how to help us make
      Unison better.



News

  The current version of Unison is 2.6.38.
  Changes since 2.6.11:
    * INCOMPATIBLE CHANGE: Archive format has changed.
    * INCOMPATIBLE CHANGE: The startup sequence has been completely
      rewritten and greatly simplified. The main user-visible change is
      that the defaultpath preference has been removed. Its effect can
      be approximated by using multiple profiles, with include
      directives to incorporate common settings. All uses of defaultpath
      in existing profiles should be changed to path.
    * The -prefer and -force options have been extended to allow users
      to specify that files with more recent modtimes should be
      propagated, writing either -prefer newer or -force newer. (For
      symmetry, Unison will also accept -prefer older or -force older.)
      The -force older/newer options can only be used when -times is
      also set.
      The graphical user interface provides access to these facilities
      on a one-off basis via the Actions menu.
    * Names of roots can now be ``aliased'' to allow replicas to be
      relocated without changing the name of the archive file where
      Unison stores information between runs. This feature is for
      experts only. See the ``Archive Files'' section of the manual for
      more information.
    * Graphical user-interface:
         + A new command is provided in the Synchronization menu for
           switching to a new profile without restarting Unison from
           scratch.
         + The GUI also supports one-key shortcuts for commonly used
           profiles. If a profile contains a preference of the form 'key
           = n', where n is a single digit, then pressing this key will
           cause Unison to immediately switch to this profile and begin
           synchronization again from scratch. (Any actions that may
           have been selected for a set of changes currently being
           displayed will be discarded.)
         + Each profile may include a preference 'label = <string>'
           giving a descriptive string that described the options
           selected in this profile. The string is listed along with the
           profile name in the profile selection dialog, and displayed
           in the top-right corner of the main Unison window.
    * Minor:
         + Fixed a bug that would sometimes cause the 'diff' display to
           order the files backwards relative to the main user
           interface. (Thanks to Pascal Brisset for this fix.)
         + On Unix systems, the graphical version of Unison will check
           the DISPLAY variable and, if it is not set, automatically
           fall back to the textual user interface.
         + Synchronization paths (path preferences) are now matched
           against the ignore preferences. So if a path is both
           specified in a path preference and ignored, it will be
           skipped.
         + Numerous other bugfixes and small improvements.

  Changes since 2.6.1:
    * The synchronization of modification times has been disabled for
      directories.
    * Preference files may now include lines of the form include <name>,
      which will cause name.prf to be read at that point.
    * The synchronization of permission between Windows and Unix now
      works properly.
    * A binding CYGWIN=binmode in now added to the environment so that
      the Cygwin port of OpenSSH works properly in a non-Cygwin context.
    * The servercmd and addversionno preferences can now be used
      together: -addversionno appends an appropriate -NNN to the server
      command, which is found by using the value of the -servercmd
      preference if there is one, or else just unison.
    * Both '-pref=val' and '-pref val' are now allowed for boolean
      values. (The former can be used to set a preference to false.)
    * Lot of small bugs fixed.

  Changes since 2.5.31:
    * The log preference is now set to true by default, since the log
      file seems useful for most users.
    * Several miscellaneous bugfixes (most involving symlinks).

  Changes since 2.5.25:
    * INCOMPATIBLE CHANGE: Archive format has changed (again).
    * Several significant bugs introduced in 2.5.25 have been fixed.

  Changes since 2.5.1:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * New functionality:
         + Unison now synchronizes file modtimes, user-ids, and
           group-ids.
           These new features are controlled by a set of new
           preferences, all of which are currently false by default.
              o When the times preference is set to true, file
                modification times are propaged. (Because the
                representations of time may not have the same
                granularity on both replicas, Unison may not always be
                able to make the modtimes precisely equal, but it will
                get them as close as the operating systems involved
                allow.)
              o When the owner preference is set to true, file ownership
                information is synchronized.
              o When the group preference is set to true, group
                information is synchronized.
              o When the numericIds preference is set to true, owner and
                group information is synchronized numerically. By
                default, owner and group numbers are converted to names
                on each replica and these names are synchronized. (The
                special user id 0 and the special group 0 are never
                mapped via user/group names even if this preference is
                not set.)
         + Added an integer-valued preference perms that can be used to
           control the propagation of permission bits. The value of this
           preference is a mask indicating which permission bits should
           be synchronized. It is set by default to 0o1777: all bits but
           the set-uid and set-gid bits are synchronised (synchronizing
           theses latter bits can be a security hazard). If you want to
           synchronize all bits, you can set the value of this
           preference to -1.
         + Added a log preference (default false), which makes Unison
           keep a complete record of the changes it makes to the
           replicas. By default, this record is written to a file called
           unison.log in the user's home directory (the value of the
           HOME environment variable). If you want it someplace else,
           set the logfile preference to the full pathname you want
           Unison to use.
         + Added an ignorenot preference that maintains a set of
           patterns for paths that should definitely not be ignored,
           whether or not they match an ignore pattern. (That is, a path
           will now be ignored iff it matches an ignore pattern and does
           not match any ignorenot patterns.)
    * User-interface improvements:
         + Roots are now displayed in the user interface in the same
           order as they were given on the command line or in the
           preferences file.
         + When the batch preference is set, the graphical user
           interface no longer waits for user confirmation when it
           displays a warning message: it simply pops up an advisory
           window with a Dismiss button at the bottom and keeps on
           going.
         + Added a new preference for controlling how many status
           messages are printed during update detection: statusdepth
           controls the maximum depth for paths on the local machine
           (longer paths are not displayed, nor are non-directory
           paths). The value should be an integer; default is 1.
         + Removed the trace and silent preferences. They did not seem
           very useful, and there were too many preferences for
           controlling output in various ways.
         + The text UI now displays just the default command (the one
           that will be used if the user just types <return>) instead of
           all available commands. Typing ? will print the full list of
           possibilities.
         + The function that finds the canonical hostname of the local
           host (which is used, for example, in calculating the name of
           the archive file used to remember which files have been
           synchronized) normally uses the gethostname operating system
           call. However, if the environment variable
           UNISONLOCALHOSTNAME is set, its value will now be used
           instead. This makes it easier to use Unison in situations
           where a machine's name changes frequently (e.g., because it
           is a laptop and gets moved around a lot).
         + File owner and group are now displayed in the ``detail
           window'' at the bottom of the screen, when unison is
           configured to synchronize them.
    * For hackers:
         + Updated to Jacques Garrigue's new version of lablgtk, which
           means we can throw away our local patched version.
           If you're compiling the GTK version of unison from sources,
           you'll need to update your copy of lablgtk to the developers
           release, available from
           http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
           (Warning: installing lablgtk under Windows is currently a bit
           challenging.)
         + The TODO.txt file (in the source distribution) has been
           cleaned up and reorganized. The list of pending tasks should
           be much easier to make sense of, for people that may want to
           contribute their programming energies. There is also a
           separate file BUGS.txt for open bugs.
         + The Tk user interface has been removed (it was not being
           maintained and no longer compiles).
         + The debug preference now prints quite a bit of additional
           information that should be useful for identifying sources of
           problems.
         + The version number of the remote server is now checked right
           away during the connection setup handshake, rather than
           later. (Somebody sent a bug report of a server crash that
           turned out to come from using inconsistent versions: better
           to check this earlier and in a way that can't crash either
           client or server.)
         + Unison now runs correctly on 64-bit architectures (e.g. Alpha
           linux). We will not be distributing binaries for these
           architectures ourselves (at least for a while) but if someone
           would like to make them available, we'll be glad to provide a
           link to them.
    * Bug fixes:
         + Pattern matching (e.g. for ignore) is now case-insensitive
           when Unison is in case-insensitive mode (i.e., when one of
           the replicas is on a windows machine).
         + Some people had trouble with mysterious failures during
           propagation of updates, where files would be falsely reported
           as having changed during synchronization. This should be
           fixed.
         + Numerous smaller fixes.

  Changes since 2.4.1:
    * Added a number of 'sorting modes' for the user interface. By
      default, conflicting changes are displayed at the top, and the
      rest of the entries are sorted in alphabetical order. This
      behavior can be changed in the following ways:
         + Setting the sortnewfirst preference to true causes newly
           created files to be displayed before changed files.
         + Setting sortbysize causes files to be displayed in increasing
           order of size.
         + Giving the preference sortfirst=<pattern> (where <pattern> is
           a path descriptor in the same format as 'ignore' and 'follow'
           patterns, causes paths matching this pattern to be displayed
           first.
         + Similarly, giving the preference sortlast=<pattern> causes
           paths matching this pattern to be displayed last.
      The sorting preferences are described in more detail in the user
      manual. The sortnewfirst and sortbysize flags can also be accessed
      from the 'Sort' menu in the grpahical user interface.
    * Added two new preferences that can be used to change unison's
      fundamental behavior to make it more like a mirroring tool instead
      of a synchronizer.
         + Giving the preference prefer with argument <root> (by adding
           -prefer <root> to the command line or prefer=<root>) to your
           profile) means that, if there is a conflict, the contents of
           <root> should be propagated to the other replica (with no
           questions asked). Non-conflicting changes are treated as
           usual.
         + Giving the preference force with argument <root> will make
           unison resolve all differences in favor of the given root,
           even if it was the other replica that was changed.
      These options should be used with care! (More information is
      available in the manual.)
    * Small changes:
         + Changed default answer to 'Yes' in all two-button dialogs in
           the graphical interface (this seems more intuitive).
         + The rsync preference has been removed (it was used to
           activate rsync compression for file transfers, but rsync
           compression is now enabled by default).
         + In the text user interface, the arrows indicating which
           direction changes are being propagated are printed
           differently when the user has overridded Unison's default
           recommendation (====> instead of ---->). This matches the
           behavior of the graphical interface, which displays such
           arrows in a different color.
         + Carriage returns (Control-M's) are ignored at the ends of
           lines in profiles, for Windows compatibility.
         + All preferences are now fully documented in the user manual.

  Changes since 2.3.12:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * New/improved functionality:
         + A new preference -sortbysize controls the order in which
           changes are displayed to the user: when it is set to true,
           the smallest changed files are displayed first. (The default
           setting is false.)
         + A new preference -sortnewfirst causes newly created files to
           be listed before other updates in the user interface.
         + We now allow the ssh protocol to specify a port.
         + Incompatible change: The unison: protocol is deprecated, and
           we added file: and socket:. You may have to modify your
           profiles in the .unison directory. If a replica is specified
           without an explicit protocol, we now assume it refers to a
           file. (Previously "//saul/foo" meant to use SSH to connect to
           saul, then access the foo directory. Now it means to access
           saul via a remote file mechanism such as samba; the old
           effect is now achieved by writing ssh://saul/foo.)
         + Changed the startup sequence for the case where roots are
           given but no profile is given on the command line. The new
           behavior is to use the default profile (creating it if it
           does not exist), and temporarily override its roots. The
           manual claimed that this case would work by reading no
           profile at all, but AFAIK this was never true.
         + In all user interfaces, files with conflicts are always
           listed first
         + A new preference 'sshversion' can be used to control which
           version of ssh should be used to connect to the server. Legal
           values are 1 and 2. (Default is empty, which will make unison
           use whatever version of ssh is installed as the default 'ssh'
           command.)
         + The situation when the permissions of a file was updated the
           same on both side is now handled correctly (we used to report
           a spurious conflict)
    * Improvements for the Windows version:
         + The fact that filenames are treated case-insensitively under
           Windows should now be handled correctly. The exact behavior
           is described in the cross-platform section of the manual.
         + It should be possible to synchronize with Windows shares,
           e.g., //host/drive/path.
         + Workarounds to the bug in syncing root directories in
           Windows. The most difficult thing to fix is an ocaml bug:
           Unix.opendir fails on c: in some versions of Windows.
    * Improvements to the GTK user interface (the Tk interface is no
      longer being maintained):
         + The UI now displays actions differently (in blue) when they
           have been explicitly changed by the user from Unison's
           default recommendation.
         + More colorful appearance.
         + The initial profile selection window works better.
         + If any transfers failed, a message to this effect is
           displayed along with 'Synchronization complete' at the end of
           the transfer phase (in case they may have scrolled off the
           top).
         + Added a global progress meter, displaying the percentage of
           total bytes that have been transferred so far.
    * Improvements to the text user interface:
         + The file details will be displayed automatically when a
           conflict is been detected.
         + when a warning is generated (e.g. for a temporary file left
           over from a previous run of unison) Unison will no longer
           wait for a response if it is running in -batch mode.
         + The UI now displays a short list of possible inputs each time
           it waits for user interaction.
         + The UI now quits immediately (rather than looping back and
           starting the interaction again) if the user presses 'q' when
           asked whether to propagate changes.
         + Pressing 'g' in the text user interface will proceed
           immediately with propagating updates, without asking any more
           questions.
    * Documentation and installation changes:
         + The manual now includes a FAQ, plus sections on common
           problems and on tricks contributed by users.
         + Both the download page and the download directory explicitly
           say what are the current stable and beta-test version
           numbers.
         + The OCaml sources for the up-to-the-minute developers'
           version (not guaranteed to be stable, or even to compile, at
           any given time!) are now available from the download page.
         + Added a subsection to the manual describing cross-platform
           issues (case conflicts, illegal filenames)
    * Many small bug fixes and random improvements.

  Changes since 2.3.1:
    * Several bug fixes. The most important is a bug in the rsync module
      that would occasionally cause change propagation to fail with a
      'rename' error.

  Changes since 2.2:
    * The multi-threaded transport system is now disabled by default.
      (It is not stable enough yet.)
    * Various bug fixes.
    * A new experimental feature:
      The final component of a -path argument may now be the wildcard
      specifier *. When Unison sees such a path, it expands this path on
      the client into into the corresponding list of paths by listing
      the contents of that directory.
      Note that if you use wildcard paths from the command line, you
      will probably need to use quotes or a backslash to prevent the *
      from being interpreted by your shell.
      If both roots are local, the contents of the first one will be
      used for expanding wildcard paths. (Nb: this is the first one
      after the canonization step -- i.e., the one that is listed first
      in the user interface -- not the one listed first on the command
      line or in the preferences file.)

  Changes since 2.1:
    * The transport subsystem now includes an implementation by Sylvain
      Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
      protocol. This protocol achieves much faster transfers when only a
      small part of a large file has been changed by sending just diffs.
      This feature is mainly helpful for transfers over slow links---on
      fast local area networks it can actually degrade performance---so
      we have left it off by default. Start unison with the -rsync
      option (or put rsync=true in your preferences file) to turn it on.
    * ``Progress bars'' are now diplayed during remote file transfers,
      showing what percentage of each file has been transferred so far.
    * The version numbering scheme has changed. New releases will now be
      have numbers like 2.2.30, where the second component is
      incremented on every significant public release and the third
      component is the ``patch level.''
    * Miscellaneous improvements to the GTK-based user interface.
    * The manual is now available in PDF format.
    * We are experimenting with using a multi-threaded transport
      subsystem to transfer several files at the same time, making much
      more effective use of available network bandwidth. This feature is
      not completely stable yet, so by default it is disabled in the
      release version of Unison.
      If you want to play with the multi-threaded version, you'll need
      to recompile Unison from sources (as described in the
      documentation), setting the THREADS flag in Makefile.OCaml to
      true. Make sure that your OCaml compiler has been installed with
      the -with-pthreads configuration option. (You can verify this by
      checking whether the file threads/threads.cma in the OCaml
      standard library directory contains the string -lpthread near the
      end.)

  Changes since 1.292:
    * Reduced memory footprint (this is especially important during the
      first run of unison, where it has to gather information about all
      the files in both repositories).
    * Fixed a bug that would cause the socket server under NT to fail
      after the client exits.
    * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
      interface (to avoid hitting them accidentally).

  Changes since 1.231:
    * Tunneling over ssh is now supported in the Windows version. See
      the installation section of the manual for detailed instructions.
    * The transport subsystem now includes an implementation of the
      rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
      protocol achieves much faster transfers when only a small part of
      a large file has been changed by sending just diffs. The rsync
      feature is off by default in the current version. Use the -rsync
      switch to turn it on. (Nb. We still have a lot of tuning to do:
      you may not notice much speedup yet.)
    * We're experimenting with a multi-threaded transport subsystem,
      written by Jerome Vouillon. The downloadable binaries are still
      single-threaded: if you want to try the multi-threaded version,
      you'll need to recompile from sources. (Say make THREADS=true.)
      Native thread support from the compiler is required. Use the
      option -threads N to select the maximal number of concurrent
      threads (default is 5). Multi-threaded and single-threaded
      clients/servers can interoperate.
    * A new GTK-based user interface is now available, thanks to Jacques
      Garrigue. The Tk user interface still works, but we'll be shifting
      development effort to the GTK interface from now on.
    * OCaml 3.00 is now required for compiling Unison from sources. The
      modules uitk and myfileselect have been changed to use labltk
      instead of camltk. To compile the Tk interface in Windows, you
      must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
      c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
      to install the headers and libraries (which are not installed by
      default).
    * Added a new -addversionno switch, which causes unison to use
      unison-<currentversionnumber> instead of just unison as the remote
      server command. This allows multiple versions of unison to coexist
      conveniently on the same server: whichever version is run on the
      client, the same version will be selected on the server.

  Changes since 1.219:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * This version fixes several annoying bugs, including:
         + Some cases where propagation of file permissions was not
           working.
         + umask is now ignored when creating directories
         + directories are create writable, so that a read-only
           directory and its contents can be propagated.
         + Handling of warnings generated by the server.
         + Synchronizing a path whose parent is not a directory on both
           sides is now flagged as erroneous.
         + Fixed some bugs related to symnbolic links and nonexistant
           roots.
              o When a change (deletion or new contents) is propagated
                onto a 'follow'ed symlink, the file pointed to by the
                link is now changed. (We used to change the link itself,
                which doesn't fit our assertion that 'follow' means the
                link is completely invisible)
              o When one root did not exist, propagating the other root
                on top of it used to fail, becuase unison could not
                calculate the working directory into which to write
                changes. This should be fixed.
    * A human-readable timestamp has been added to Unison's archive
      files.
    * The semantics of Path and Name regular expressions now correspond
      better.
    * Some minor improvements to the text UI (e.g. a command for going
      back to previous items)
    * The organization of the export directory has changed --- should be
      easier to find / download things now.

  Changes since 1.200:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * This version has not been tested extensively on Windows.
    * Major internal changes designed to make unison safer to run at the
      same time as the replicas are being changed by the user.
    * Internal performance improvements.

  Changes since 1.190:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * A number of internal functions have been changed to reduce the
      amount of memory allocation, especially during the first
      synchronization. This should help power users with very big
      replicas.
    * Reimplementation of low-level remote procedure call stuff, in
      preparation for adding rsync-like smart file transfer in a later
      release.
    * Miscellaneous bug fixes.

  Changes since 1.180:
    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
      synchronize your replicas before upgrading, to avoid spurious
      conflicts. The first sync after upgrading will be slow.
    * Fixed some small bugs in the interpretation of ignore patterns.
    * Fixed some problems that were preventing the Windows version from
      working correctly when click-started.
    * Fixes to treatment of file permissions under Windows, which were
      causing spurious reports of different permissions when
      synchronizing between windows and unix systems.
    * Fixed one more non-tail-recursive list processing function, which
      was causing stack overflows when synchronizing very large
      replicas.

  Changes since 1.169:
    * The text user interface now provides commands for ignoring files.
    * We found and fixed some more non-tail-recursive list processing
      functions. Some power users have reported success with very large
      replicas.
    * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
      automatically. If you want to ignore such files, put an
      appropriate ignore pattern in your profile.
    * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
      changed. Instead of putting a line of the form

                ignore = <regexp>
      in your profile (.unison/default.prf), you should put:

                ignore = Regexp <regexp>
      Moreover, two other styles of pattern are also recognized:

                ignore = Name <name>
      matches any path in which one component matches <name>, while

                ignore = Path <path>
      matches exactly the path <path>.
      Standard ``globbing'' conventions can be used in <name> and
      <path>:
         + a ? matches any single character except /
         + a * matches any sequence of characters not including /
         + [xyz] matches any character from the set {x, y, z }
         + {a,bb,ccc} matches any one of a, bb, or ccc.
      See the user manual for some examples.

  Changes since 1.146:
    * Some users were reporting stack overflows when synchronizing huge
      directories. We found and fixed some non-tail-recursive list
      processing functions, which we hope will solve the problem. Please
      give it a try and let us know.
    * Major additions to the documentation.

  Changes since 1.142:
    * Major internal tidying and many small bugfixes.
    * Major additions to the user manual.
    * Unison can now be started with no arguments -- it will prompt
      automatically for the name of a profile file containing the roots
      to be synchronized. This makes it possible to start the graphical
      UI from a desktop icon.
    * Fixed a small bug where the text UI on NT was raising a 'no such
      signal' exception.

  Changes since 1.139:
    * The precompiled windows binary in the last release was compiled
      with an old OCaml compiler, causing propagation of permissions not
      to work (and perhaps leading to some other strange behaviors we've
      heard reports about). This has been corrected. If you're using
      precompiled binaries on Windows, please upgrade.
    * Added a -debug command line flag, which controls debugging of
      various modules. Say -debug XXX to enable debug tracing for module
      XXX, or -debug all to turn on absolutely everything.
    * Fixed a small bug where the text UI on NT was raising a 'no such
      signal' exception.

  Changes since 1.111:
    * INCOMPATIBLE CHANGE: The names and formats of the preference files
      in the .unison directory have changed. In particular:
         + the file ``prefs'' should be renamed to default.prf
         + the contents of the file ``ignore'' should be merged into
           default.prf. Each line of the form REGEXP in ignore should
           become a line of the form ignore = REGEXP in default.prf.
    * Unison now handles permission bits and symbolic links. See the
      manual for details.
    * You can now have different preference files in your .unison
      directory. If you start unison like this

            unison profilename
      (i.e. with just one ``anonymous'' command-line argument), then the
      file ~/.unison/profilename.prf will be loaded instead of
      default.prf.
    * Some improvements to terminal handling in the text user interface
    * Added a switch -killServer that terminates the remote server
      process when the unison client is shutting down, even when using
      sockets for communication. (By default, a remote server created
      using ssh/rsh is terminated automatically, while a socket server
      is left running.)
    * When started in 'socket server' mode, unison prints 'server
      started' on stderr when it is ready to accept connections. (This
      may be useful for scripts that want to tell when a socket-mode
      server has finished initalization.)
    * We now make a nightly mirror of our current internal development
      tree, in case anyone wants an up-to-the-minute version to hack
      around with.
    * Added a file CONTRIB with some suggestions for how to help us make
      Unison better.

#20 From: Jerome Vouillon <vouillon@...>
Date: Sun Dec 31, 2000 6:06 pm
Subject: unison 2.6.11 now available (stable release)
vouillon@...
Send Email Send Email
 
This is mostly a bug-fix release.

Get it from here:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Please let us now if you notice any problems.

Enjoy,

          The Unison Team
          (Trevor, Benjamin, and Jerome)

---------------------------------------------------------------

News

    Changes since 2.6.1:
      * The synchronization of modification times has been disabled for
        directories.
      * Preference files may now include lines of the form include <name>,
        which will cause name.prf to be read at that point.
      * The synchronization of permission between Windows and Unix now
        works properly.
      * A binding CYGWIN=binmode in now added to the environment so that
        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
      * The servercmd and addversionno preferences can now be used
        together: -addversionno appends an appropriate -NNN to the server
        command, which is found by using the value of the -servercmd
        preference if there is one, or else just unison.
      * Both '-pref=val' and '-pref val' are now allowed for boolean
        values. (The former can be used to set a preference to false.)
      * Lot of small bugs fixed.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#19 From: Jerome Vouillon <vouillon@...>
Date: Thu Nov 9, 2000 3:28 pm
Subject: unison 2.6.1 (stable release) now available
vouillon@...
Send Email Send Email
 
As the latest beta-release seems to be behaving fine, we're promoting
this version to a stable release.

Get it from here:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

The main feature added since the last stable release is the
ability to synchronize file modtimes, user-ids, and group-ids.

Please let us now if you notice any problems.

Enjoy,

          The Unison Team
          (Trevor, Benjamin, and Jerome)

-----------------------------------------------------------------------

    The current version of Unison is 2.6.1.

    Changes since 2.5.31:
      * The log preference is now set to true by default, since the log
        file seems useful for most users.
      * Several miscellaneous bugfixes (most involving symlinks).

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the
                  representations of time may not have the same
                  granularity on both replicas, Unison may not always be
                  able to make the modtimes precisely equal, but it will
                  get them as close as the operating systems involved
                  allow.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#18 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Mon Oct 23, 2000 12:54 pm
Subject: Unison 2.5.31 binaries available for Windows and Linux
bcpierce@...
Send Email Send Email
 
Those who were waiting for precompiled Windows or Linux binaries before
trying out the new beta-release of Unison can go ahead now and download
them from the usual place:

      http://www.cis.upenn.edu/~bcpierce/unison

No serious bugs have been discovered so far in this release, but it
should still be considered experimental.

By the way, one correction to the documentation of the new features: the
original release message said that modtimes would not necessarily be kept
in sync, but just propagated when things changed.  We decided this was
ugly, and changed it so that Unison now synchronizes modtimes (when the
=times preference is set) just like permission bits.

(There is one caveat: if you're synchronizing between a Windows and a
Unix machine, you may see a one-second difference between the modtimes
after synchronization.  This is because times are actually represented
differently by the two sorts of filesystems: Windows cannot represent
modtimes with an odd number of seconds.)

          -- B

#17 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Oct 20, 2000 8:53 pm
Subject: unison 2.5.31 (beta release) now available
bcpierce@...
Send Email Send Email
 
OK, we've fixed the bugs that cropped up in yesterday's release.  This
one is still for courageous users only, though.  As before, please let
us know how it goes if you give it a try.

At the moment, only the sources and precompiled binaries for Solaris
are available.  Windows and Linux binaries will appear in the next
couple of days.

         -- The Unison Team

    http://www.cis.upenn.edu/~bcpierce/unison/download.html

---------------------------------------------------------------------------

News

    The current version of Unison is 2.5.31.

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the time may
                  not have the same granularity on both replicas, these
                  times are not synchronized if they differ between the
                  replicas, but only propagated each time they change.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.5.31.

    Changes since 2.5.25:
      * INCOMPATIBLE CHANGE: Archive format has changed (again).
      * Several significant bugs introduced in 2.5.25 have been fixed.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the time may
                  not have the same granularity on both replicas, these
                  times are not synchronized if they differ between the
                  replicas, but only propagated each time they change.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#16 From: bcpierce@...
Date: Fri Oct 20, 2000 2:20 am
Subject: Hold those downloads
bcpierce@...
Send Email Send Email
 
We've noticed a couple of significant bugs in the beta-release announced
earlier today -- it does not seem to be ready yet for production use,
even by courageous people.

Feel free to download it if you want to play with the new features, but
don't use it for anything important.

       Benjamin

#15 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Oct 19, 2000 6:17 pm
Subject: unison 2.5.25 (beta release) now available
bcpierce@...
Send Email Send Email
 
We've fixed a lot of bugs and incorporated some much-requested
features (such as propatagion of modtimes) in this version.  This has
involved changes to many parts of the program, so this release may be
a little less robust than usual and should be considered "for the
courageous only."  And please pay attention to what it is doing.

If you do try this release, please let us know how it goes (even if it
goes fine) so that we can get a sense of when it's reliable enough to
inflict on ordinary users.

Enjoy,

         The Unison Team
         (Jerome, Trevor, Benjamin)

Grab it here, as usual:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

---------------------------------------------------------------------------

News

    The current version of Unison is 2.5.25.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the time may
                  not have the same granularity on both replicas, these
                  times are not synchronized if they differ between the
                  replicas, but only propagated each time they change.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.5.25.

    Changes since 2.5.1:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New functionality:
           + Unison now synchronizes file modtimes, user-ids, and
             group-ids.
             These new features are controlled by a set of new
             preferences, all of which are currently false by default.
                o When the times preference is set to true, file
                  modification times are propaged. (Because the time may
                  not have the same granularity on both replicas, these
                  times are not synchronized if they differ between the
                  replicas, but only propagated each time they change.)
                o When the owner preference is set to true, file ownership
                  information is synchronized.
                o When the group preference is set to true, group
                  information is synchronized.
                o When the numericIds preference is set to true, owner and
                  group information is synchronized numerically. By
                  default, owner and group numbers are converted to names
                  on each replica and these names are synchronized. (The
                  special user id 0 and the special group 0 are never
                  mapped via user/group names even if this preference is
                  not set.)
           + Added an integer-valued preference perms that can be used to
             control the propagation of permission bits. The value of this
             preference is a mask indicating which permission bits should
             be synchronized. It is set by default to 0o1777: all bits but
             the set-uid and set-gid bits are synchronised (synchronizing
             theses latter bits can be a security hazard). If you want to
             synchronize all bits, you can set the value of this
             preference to -1.
           + Added a log preference (default false), which makes Unison
             keep a complete record of the changes it makes to the
             replicas. By default, this record is written to a file called
             unison.log in the user's home directory (the value of the
             HOME environment variable). If you want it someplace else,
             set the logfile preference to the full pathname you want
             Unison to use.
           + Added an ignorenot preference that maintains a set of
             patterns for paths that should definitely not be ignored,
             whether or not they match an ignore pattern. (That is, a path
             will now be ignored iff it matches an ignore pattern and does
             not match any ignorenot patterns.)
      * User-interface improvements:
           + Roots are now displayed in the user interface in the same
             order as they were given on the command line or in the
             preferences file.
           + When the batch preference is set, the graphical user
             interface no longer waits for user confirmation when it
             displays a warning message: it simply pops up an advisory
             window with a Dismiss button at the bottom and keeps on
             going.
           + Added a new preference for controlling how many status
             messages are printed during update detection: statusdepth
             controls the maximum depth for paths on the local machine
             (longer paths are not displayed, nor are non-directory
             paths). The value should be an integer; default is 1.
           + Removed the trace and silent preferences. They did not seem
             very useful, and there were too many preferences for
             controlling output in various ways.
           + The text UI now displays just the default command (the one
             that will be used if the user just types <return>) instead of
             all available commands. Typing ? will print the full list of
             possibilities.
           + The function that finds the canonical hostname of the local
             host (which is used, for example, in calculating the name of
             the archive file used to remember which files have been
             synchronized) normally uses the gethostname operating system
             call. However, if the environment variable
             UNISONLOCALHOSTNAME is set, its value will now be used
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
           + File owner and group are now displayed in the ``detail
             window'' at the bottom of the screen, when unison is
             configured to synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
             If you're compiling the GTK version of unison from sources,
             you'll need to update your copy of lablgtk to the developers
             release, available from
             http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
             (Warning: installing lablgtk under Windows is currently a bit
             challenging.)
           + The TODO.txt file (in the source distribution) has been
             cleaned up and reorganized. The list of pending tasks should
             be much easier to make sense of, for people that may want to
             contribute their programming energies. There is also a
             separate file BUGS.txt for open bugs.
           + The Tk user interface has been removed (it was not being
             maintained and no longer compiles).
           + The debug preference now prints quite a bit of additional
             information that should be useful for identifying sources of
             problems.
           + The version number of the remote server is now checked right
             away during the connection setup handshake, rather than
             later. (Somebody sent a bug report of a server crash that
             turned out to come from using inconsistent versions: better
             to check this earlier and in a way that can't crash either
             client or server.)
           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
             linux). We will not be distributing binaries for these
             architectures ourselves (at least for a while) but if someone
             would like to make them available, we'll be glad to provide a
             link to them.
      * Bug fixes:
           + Pattern matching (e.g. for ignore) is now case-insensitive
             when Unison is in case-insensitive mode (i.e., when one of
             the replicas is on a windows machine).
           + Some people had trouble with mysterious failures during
             propagation of updates, where files would be falsely reported
             as having changed during synchronization. This should be
             fixed.
           + Numerous smaller fixes.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#14 From: Benjamin Pierce <bcpierce@...>
Date: Sat Oct 7, 2000 11:14 am
Subject: Unison now running on MacOS X
bcpierce@...
Send Email Send Email
 
We've received a few questions about when Unison will be ported to MacOS.
The answer is that, on the forthcoming OS X, it already has been!  Damien
Doligez and I tried compiling it the other day and it worked without any
modifications at all.  The only restriction is that the graphical user
interface will probably not work on OS X until somebody ports GTK.

Since OS X is currently being distributed only to developers, we're not
going to provide pre-built binaries for a while.  But any early-adopters
of OS X who would like to use Unison there can start now if they're
willing to compile from sources.

       Benjamin

P.S.  Unison is *not* likely ever to run on earlier versions of MacOS:
the OCaml implementation there doesn't provide some stuff that we need.

#13 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Mon Sep 25, 2000 7:26 pm
Subject: Unison 2.5 (stable release) now available
bcpierce@...
Send Email Send Email
 
Last week's beta-release didn't turn up any major issues, so we're
promoting this version (plus a few more cosmetic improvements that
people have been requesting) to a stable release.

Get it from here:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Please let us know if you notice any problems.

Enjoy,

         The Unison Team
         (Jerome, Trevor, and Benjamin)

---------------------------------------------------------------------------

    The current version of Unison is 2.5.1.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.5.1.

    Changes since 2.4.1:
      * Added a number of 'sorting modes' for the user interface. By
        default, conflicting changes are displayed at the top, and the
        rest of the entries are sorted in alphabetical order. This
        behavior can be changed in the following ways:
           + Setting the sortnewfirst preference to true causes newly
             created files to be displayed before changed files.
           + Setting sortbysize causes files to be displayed in increasing
             order of size.
           + Giving the preference sortfirst=<pattern> (where <pattern> is
             a path descriptor in the same format as 'ignore' and 'follow'
             patterns, causes paths matching this pattern to be displayed
             first.
           + Similarly, giving the preference sortlast=<pattern> causes
             paths matching this pattern to be displayed last.
        The sorting preferences are described in more detail in the user
        manual. The sortnewfirst and sortbysize flags can also be accessed
        from the 'Sort' menu in the grpahical user interface.
      * Added two new preferences that can be used to change unison's
        fundamental behavior to make it more like a mirroring tool instead
        of a synchronizer.
           + Giving the preference prefer with argument <root> (by adding
             -prefer <root> to the command line or prefer=<root>) to your
             profile) means that, if there is a conflict, the contents of
             <root> should be propagated to the other replica (with no
             questions asked). Non-conflicting changes are treated as
             usual.
           + Giving the preference force with argument <root> will make
             unison resolve all differences in favor of the given root,
             even if it was the other replica that was changed.
        These options should be used with care! (More information is
        available in the manual.)
      * Small changes:
           + Changed default answer to 'Yes' in all two-button dialogs in
             the graphical interface (this seems more intuitive).
           + The rsync preference has been removed (it was used to
             activate rsync compression for file transfers, but rsync
             compression is now enabled by default).
           + In the text user interface, the arrows indicating which
             direction changes are being propagated are printed
             differently when the user has overridded Unison's default
             recommendation (====> instead of ---->). This matches the
             behavior of the graphical interface, which displays such
             arrows in a different color.
           + Carriage returns (Control-M's) are ignored at the ends of
             lines in profiles, for Windows compatibility.
           + All preferences are now fully documented in the user manual.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba; the old
             effect is now achieved by writing ssh://saul/foo.)
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#12 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Sep 15, 2000 1:16 pm
Subject: Unison 2.4: Windows binaries now available
bcpierce@...
Send Email Send Email
 
Pre-built binaries for Windows are now available for download as usual.
Sorry for the delay.

       Benjamin

#11 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Sep 14, 2000 7:24 pm
Subject: Unison 2.4 --> Windows :-(
bcpierce@...
Send Email Send Email
 
I might have known it.  The machine where we compile the windows binaries
has undergone some software rot since the last release and needs to be
perked up a bit before it will do it again.

I *hope* the binaries for Windows will be ready tomorrow.  Solaris and
Linux binaries (and the sources, of course) are there now.

Sorry 'bout that,

       B

#10 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Sep 14, 2000 7:08 pm
Subject: Unison 2.4 (beta-test release) now available
bcpierce@...
Send Email Send Email
 
The last beta-release of Unison exposed or reminded us of some serious
issues that we wanted to fix properly, so we've been hacking away and
are now ready to make another beta-release to our courageous users.
If everything goes well, we'll follow this with a stable release in a
couple of weeks.

If you do grab this one, please let us know how it goes.

Enjoy,

       - The Unison team

Download address:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

(Windows binaries are not there yet -- should appear momentarily.)

----------------------------------------------------------------------

Here are the changes (a whole pile of them) since the last
beta-release...

    The current version of Unison is 2.4.1.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba).
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.4.1.

    Changes since 2.3.12:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * New/improved functionality:
           + A new preference -sortbysize controls the order in which
             changes are displayed to the user: when it is set to true,
             the smallest changed files are displayed first. (The default
             setting is false.)
           + A new preference -sortnewfirst causes newly created files to
             be listed before other updates in the user interface.
           + We now allow the ssh protocol to specify a port.
           + Incompatible change: The unison: protocol is deprecated, and
             we added file: and socket:. You may have to modify your
             profiles in the .unison directory. If a replica is specified
             without an explicit protocol, we now assume it refers to a
             file. (Previously "//saul/foo" meant to use SSH to connect to
             saul, then access the foo directory. Now it means to access
             saul via a remote file mechanism such as samba).
           + Changed the startup sequence for the case where roots are
             given but no profile is given on the command line. The new
             behavior is to use the default profile (creating it if it
             does not exist), and temporarily override its roots. The
             manual claimed that this case would work by reading no
             profile at all, but AFAIK this was never true.
           + In all user interfaces, files with conflicts are always
             listed first
           + A new preference 'sshversion' can be used to control which
             version of ssh should be used to connect to the server. Legal
             values are 1 and 2. (Default is empty, which will make unison
             use whatever version of ssh is installed as the default 'ssh'
             command.)
           + The situation when the permissions of a file was updated the
             same on both side is now handled correctly (we used to report
             a spurious conflict)
      * Improvements for the Windows version:
           + The fact that filenames are treated case-insensitively under
             Windows should now be handled correctly. The exact behavior
             is described in the cross-platform section of the manual.
           + It should be possible to synchronize with Windows shares,
             e.g., //host/drive/path.
           + Workarounds to the bug in syncing root directories in
             Windows. The most difficult thing to fix is an ocaml bug:
             Unix.opendir fails on c: in some versions of Windows.
      * Improvements to the GTK user interface (the Tk interface is no
        longer being maintained):
           + The UI now displays actions differently (in blue) when they
             have been explicitly changed by the user from Unison's
             default recommendation.
           + More colorful appearance.
           + The initial profile selection window works better.
           + If any transfers failed, a message to this effect is
             displayed along with 'Synchronization complete' at the end of
             the transfer phase (in case they may have scrolled off the
             top).
           + Added a global progress meter, displaying the percentage of
             total bytes that have been transferred so far.
      * Improvements to the text user interface:
           + The file details will be displayed automatically when a
             conflict is been detected.
           + when a warning is generated (e.g. for a temporary file left
             over from a previous run of unison) Unison will no longer
             wait for a response if it is running in -batch mode.
           + The UI now displays a short list of possible inputs each time
             it waits for user interaction.
           + The UI now quits immediately (rather than looping back and
             starting the interaction again) if the user presses 'q' when
             asked whether to propagate changes.
           + Pressing 'g' in the text user interface will proceed
             immediately with propagating updates, without asking any more
             questions.
      * Documentation and installation changes:
           + The manual now includes a FAQ, plus sections on common
             problems and on tricks contributed by users.
           + Both the download page and the download directory explicitly
             say what are the current stable and beta-test version
             numbers.
           + The OCaml sources for the up-to-the-minute developers'
             version (not guaranteed to be stable, or even to compile, at
             any given time!) are now available from the download page.
           + Added a subsection to the manual describing cross-platform
             issues (case conflicts, illegal filenames)
      * Many small bug fixes and random improvements.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#9 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Jul 6, 2000 7:32 pm
Subject: unison 2.3.12 (beta-release) now available
bcpierce@...
Send Email Send Email
 
Courageous users (especially those who have already upgraded to 2.3.1)
are encouraged to grab this one, which fixes a couple of significant
bugs.  We're still working on a few more minor issues before making
another stable release.

The download address, as usual:
    http://www.cis.upenn.edu/~bcpierce/unison/download.html

Have fun,

         The Team


The current version of Unison is 2.3.12.

    Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.3.12. Changes since 2.3.1:
      * Several bug fixes. The most important is a bug in the rsync module
        that would occasionally cause change propagation to fail with a
        'rename' error.

    Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#8 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Jun 22, 2000 6:25 pm
Subject: unison 2.3 (pretty good beta) now available
bcpierce@...
Send Email Send Email
 
The beta-test version that we announced the other day (2.2) seems
stable *except* for the multi-threaded transport, where we're still
shaking out some bugs.  We have disabled it in this version.  The
rsync support does seem to be working well, so we've left it in.

This version will be dubbed 'stable' and announced publically in a few
days, unless new problems appear.

         The Unison Team

Download from http://www.cis.upenn.edu/~bcpierce/unison/unison.html

    The current version of Unison is 2.3.1. Changes since 2.2:

      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    The current version of Unison is 2.3.1. Changes since 2.2:
      * The multi-threaded transport system is now disabled by default.
        (It is not stable enough yet.)
      * Various bug fixes.
      * A new experimental feature:
        The final component of a -path argument may now be the wildcard
        specifier *. When Unison sees such a path, it expands this path on
        the client into into the corresponding list of paths by listing
        the contents of that directory.
        Note that if you use wildcard paths from the command line, you
        will probably need to use quotes or a backslash to prevent the *
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
        after the canonization step -- i.e., the one that is listed first
        in the user interface -- not the one listed first on the command
        line or in the preferences file.)

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is mainly helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance---so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
        subsystem to transfer several files at the same time, making much
        more effective use of available network bandwidth. This feature is
        not completely stable yet, so by default it is disabled in the
        release version of Unison.
        If you want to play with the multi-threaded version, you'll need
        to recompile Unison from sources (as described in the
        documentation), setting the THREADS flag in Makefile.OCaml to
        true. Make sure that your OCaml compiler has been installed with
        the -with-pthreads configuration option. (You can verify this by
        checking whether the file threads/threads.cma in the OCaml
        standard library directory contains the string -lpthread near the
        end.)

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#7 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Jun 16, 2000 7:21 pm
Subject: New beta-test release (unison 2.2.35)
bcpierce@...
Send Email Send Email
 
We noticed a few small problems with last night's release, so we've
made another one available.  This is still a beta version -- a stable
release should follow in a few days.

Download it from http://www.cis.upenn.edu/~bcpierce/unison/unison.html

        -- The Team

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is only helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance. So
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * Several files can now be transferred at the same time, making much
        more effective use of available network bandwidth. (This feature
        is made possible by a multi-threaded transport subsystem built by
        Jerome Vouillon.)
        If you download a binary executable for unison, it will already
        have been built with thread support enabled. If you compile Unison
        yourself from the sources, you will need to either disable threads
        (by compiling with 'make THREADS=false') or make sure that your
        OCaml compiler has been installed with the -with-pthreads
        configuration option. (You can verify this by checking whether the
        file threads/threads.cma in the OCaml standard library directory
        contains the string -lpthread near the end.)
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    Changes since 2.1:
      * The transport subsystem now includes an implementation by Sylvain
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
        This feature is only helpful for transfers over slow links---on
        fast local area networks it can actually degrade performance. So
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
      * Several files can now be transferred at the same time, making much
        more effective use of available network bandwidth. (This feature
        is made possible by a multi-threaded transport subsystem built by
        Jerome Vouillon.)
        If you download a binary executable for unison, it will already
        have been built with thread support enabled. If you compile Unison
        yourself from the sources, you will need to either disable threads
        (by compiling with 'make THREADS=false') or make sure that your
        OCaml compiler has been installed with the -with-pthreads
        configuration option. (You can verify this by checking whether the
        file threads/threads.cma in the OCaml standard library directory
        contains the string -lpthread near the end.)
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#6 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Jun 16, 2000 10:23 am
Subject: Unison beta-release: correction
bcpierce@...
Send Email Send Email
 
The change log claimed incorrectly that the new rsync functionality
was enabled by default.  If you grab the current version of unison,
you'll need to give it the '-rsync' option (on the command line or in
the preferences file) to enable the new 'diffs only' transport mode.

     B

#5 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Jun 15, 2000 11:17 pm
Subject: unison 2.2 (beta-test) now available
bcpierce@...
Send Email Send Email
 
A new version of unison is now available for courageous users in the
usual place...
   http://www.cis.upenn.edu/~bcpierce/unison/unison.html

We've been using the new features ourselves for a few days and they
seem pretty stable (and this version is *much* faster.)  Please let us
know whether it works for you,

A new stable release will be announced in a few days, if all goes well.

         -- The Unison Team


    Changes since 2.1:
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. (This feature
        was actually included in 2.1, but was disabled by default. We have
        been using it internally for some time now and it appears to be
        stable, so it is now enabled by default.)
      * Several files can now be transferred at the same time, making much
        more effective use of available network bandwidth. (This feature
        is made possible by a multi-threaded transport subsystem built by
        Jerome Vouillon.)
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.



News

    Changes since 2.1:
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. (This feature
        was actually included in 2.1, but was disabled by default. We have
        been using it internally for some time now and it appears to be
        stable, so it is now enabled by default.)
      * Several files can now be transferred at the same time, making much
        more effective use of available network bandwidth. (This feature
        is made possible by a multi-threaded transport subsystem built by
        Jerome Vouillon.)
      * ``Progress bars'' are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
        component is the ``patch level.''
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format

    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.

#4 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Thu Jun 8, 2000 6:41 pm
Subject: unison 2.1 now available
bcpierce@...
Send Email Send Email
 
The incremented major version number signals that we believe this
release is pretty stable...  Both courageous and conservative users
are now welcome to upgrade!

         Share and enjoy,

             The Unison Team
             (Sylvain, Jerome, Trevor, Benjamin)



    Changes since 1.292:
      * Reduced memory footprint (this is especially important during the
        first run of unison, where it has to gather information about all
        the files in both repositories).
      * Fixed a bug that would cause the socket server under NT to fail
        after the client exits.
      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
        interface (to avoid hitting them accidentally).

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.


Documentation topic news not recognized:
Type "unison -doc topics" for a list

#3 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Jun 2, 2000 6:42 pm
Subject: Unison 1.292 (beta-test version) now available
bcpierce@...
Send Email Send Email
 
We will shortly be announcing a major new release of Unison.  A
beta-test version is now available from the usual place:

         http://www.cis.upenn.edu/~bcpierce/unison/download.html

Courageous users are encouraged to try installing the new release to
help shake out problems (please let us know how it goes, good or
bad!).  Conservative users should wait a few days for the stable
release announcement.

Share and enjoy,

         The Unison Team
         (Sylvain Gommier, Jerome Vouillon, Trevor Jim, Benjamin Pierce)


Here are the main changes in the new version.

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.


Documentation topic news not recognized:
Type "unison -doc topics" for a list

#2 From: "Benjamin C. Pierce" <bcpierce@...>
Date: Fri Jun 2, 2000 7:07 pm
Subject: Unison 1.292 (beta-test version) now available
bcpierce@...
Send Email Send Email
 
We will shortly be announcing a major new release of Unison.  A
beta-test version is now available from the usual place:

         http://www.cis.upenn.edu/~bcpierce/unison/download.html

Courageous users are encouraged to try installing the new release to
help shake out problems (please let us know how it goes, good or
bad!).  Conservative users should wait a few days for the stable
release announcement.

Share and enjoy,

         The Unison Team
         (Sylvain Gommier, Jerome Vouillon, Trevor Jim, Benjamin Pierce)


Here are the main changes in the new version.

    Changes since 1.231:
      * Tunneling over ssh is now supported in the Windows version. See
        the installation section of the manual for detailed instructions.
      * The transport subsystem now includes an implementation of the
        rsync protocol, built by Sylvain Gommier and Norman Ramsey. This
        protocol achieves much faster transfers when only a small part of
        a large file has been changed by sending just diffs. The rsync
        feature is off by default in the current version. Use the -rsync
        switch to turn it on. (Nb. We still have a lot of tuning to do:
        you may not notice much speedup yet.)
      * We're experimenting with a multi-threaded transport subsystem,
        written by Jerome Vouillon. The downloadable binaries are still
        single-threaded: if you want to try the multi-threaded version,
        you'll need to recompile from sources. (Say make THREADS=true.)
        Native thread support from the compiler is required. Use the
        option -threads N to select the maximal number of concurrent
        threads (default is 5). Multi-threaded and single-threaded
        clients/servers can interoperate.
      * A new GTK-based user interface is now available, thanks to Jacques
        Garrigue. The Tk user interface still works, but we'll be shifting
        development effort to the GTK interface from now on.
      * OCaml 3.00 is now required for compiling Unison from sources. The
        modules uitk and myfileselect have been changed to use labltk
        instead of camltk. To compile the Tk interface in Windows, you
        must have ocaml-3.00 and tk8.3. When installing tk8.3, put it in
        c:\Tcl rather than the suggested c:\Program Files\Tcl, and be sure
        to install the headers and libraries (which are not installed by
        default).
      * Added a new -addversionno switch, which causes unison to use
        unison-<currentversionnumber> instead of just unison as the remote
        server command. This allows multiple versions of unison to coexist
        conveniently on the same server: whichever version is run on the
        client, the same version will be selected on the server.

    Changes since 1.219:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version fixes several annoying bugs, including:
           + Some cases where propagation of file permissions was not
             working.
           + umask is now ignored when creating directories
           + directories are create writable, so that a read-only
             directory and its contents can be propagated.
           + Handling of warnings generated by the server.
           + Synchronizing a path whose parent is not a directory on both
             sides is now flagged as erroneous.
           + Fixed some bugs related to symnbolic links and nonexistant
             roots.
                o When a change (deletion or new contents) is propagated
                  onto a 'follow'ed symlink, the file pointed to by the
                  link is now changed. (We used to change the link itself,
                  which doesn't fit our assertion that 'follow' means the
                  link is completely invisible)
                o When one root did not exist, propagating the other root
                  on top of it used to fail, becuase unison could not
                  calculate the working directory into which to write
                  changes. This should be fixed.
      * A human-readable timestamp has been added to Unison's archive
        files.
      * The semantics of Path and Name regular expressions now correspond
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
      * The organization of the export directory has changed --- should be
        easier to find / download things now.

    Changes since 1.200:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * This version has not been tested extensively on Windows.
      * Major internal changes designed to make unison safer to run at the
        same time as the replicas are being changed by the user.
      * Internal performance improvements.

    Changes since 1.190:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * A number of internal functions have been changed to reduce the
        amount of memory allocation, especially during the first
        synchronization. This should help power users with very big
        replicas.
      * Reimplementation of low-level remote procedure call stuff, in
        preparation for adding rsync-like smart file transfer in a later
        release.
      * Miscellaneous bug fixes.

    Changes since 1.180:
      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
        synchronize your replicas before upgrading, to avoid spurious
        conflicts. The first sync after upgrading will be slow.
      * Fixed some small bugs in the interpretation of ignore patterns.
      * Fixed some problems that were preventing the Windows version from
        working correctly when click-started.
      * Fixes to treatment of file permissions under Windows, which were
        causing spurious reports of different permissions when
        synchronizing between windows and unix systems.
      * Fixed one more non-tail-recursive list processing function, which
        was causing stack overflows when synchronizing very large
        replicas.

    Changes since 1.169:
      * The text user interface now provides commands for ignoring files.
      * We found and fixed some more non-tail-recursive list processing
        functions. Some power users have reported success with very large
        replicas.
      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
        automatically. If you want to ignore such files, put an
        appropriate ignore pattern in your profile.
      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
        changed. Instead of putting a line of the form

                  ignore = <regexp>
        in your profile (.unison/default.prf), you should put:

                  ignore = Regexp <regexp>
        Moreover, two other styles of pattern are also recognized:

                  ignore = Name <name>
        matches any path in which one component matches <name>, while

                  ignore = Path <path>
        matches exactly the path <path>.
        Standard ``globbing'' conventions can be used in <name> and
        <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
           + {a,bb,ccc} matches any one of a, bb, or ccc.
        See the user manual for some examples.

    Changes since 1.146:
      * Some users were reporting stack overflows when synchronizing huge
        directories. We found and fixed some non-tail-recursive list
        processing functions, which we hope will solve the problem. Please
        give it a try and let us know.
      * Major additions to the documentation.

    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
      * Unison can now be started with no arguments -- it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.139:
      * The precompiled windows binary in the last release was compiled
        with an old OCaml compiler, causing propagation of permissions not
        to work (and perhaps leading to some other strange behaviors we've
        heard reports about). This has been corrected. If you're using
        precompiled binaries on Windows, please upgrade.
      * Added a -debug command line flag, which controls debugging of
        various modules. Say -debug XXX to enable debug tracing for module
        XXX, or -debug all to turn on absolutely everything.
      * Fixed a small bug where the text UI on NT was raising a 'no such
        signal' exception.

    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
           + the file ``prefs'' should be renamed to default.prf
           + the contents of the file ``ignore'' should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
        manual for details.
      * You can now have different preference files in your .unison
        directory. If you start unison like this

              unison profilename
        (i.e. with just one ``anonymous'' command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface
      * Added a switch -killServer that terminates the remote server
        process when the unison client is shutting down, even when using
        sockets for communication. (By default, a remote server created
        using ssh/rsh is terminated automatically, while a socket server
        is left running.)
      * When started in 'socket server' mode, unison prints 'server
        started' on stderr when it is ready to accept connections. (This
        may be useful for scripts that want to tell when a socket-mode
        server has finished initalization.)
      * We now make a nightly mirror of our current internal development
        tree, in case anyone wants an up-to-the-minute version to hack
        around with.
      * Added a file CONTRIB with some suggestions for how to help us make
        Unison better.


Documentation topic news not recognized:
Type "unison -doc topics" for a list

Messages 1 - 31 of 52   Newest  |  < Newer  |  Older >  |  Oldest
Advanced
Add to My Yahoo!      XML What's This?

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help