unison

Fork of Unison, a bi-directional file synchronization tool
git clone git://git.laack.co/unison.git
Log | Files | Refs | README | LICENSE

NEWS.md (112066B)


      1 # UNISON NEWS
      2 
      3 This file contains a summary of user-visible or important changes, in
      4 the style of the GNU coding standards.  By user-visible, we include
      5 changes relevant for those building unison from source.  We omit most
      6 bugfixes, minor improvements, and cleanups, but of course every
      7 release contains some.  Refer to the documentation for details; this
      8 file is a terse notice of changes rather than a tutorial about new
      9 features.
     10 
     11 As of 2022, this file (NEWS.md at top level) is used for news.
     12 
     13 Some software has a "changelog" file that records all changes, but
     14 unison uses git history for that, and thus there is no changelog file.
     15 
     16 ## Changes in 2.53.7
     17 
     18 Released 2024-11-04
     19 
     20   * Fix for parallel builds of the gui.  (If 2.53.6 built for you,
     21     because you didn't build the GUI, you didn't use -j, or you got
     22     lucky, there is no need to update to 2.53.7.)
     23 
     24 ## Changes in 2.53.6
     25 
     26 Released 2024-11-04
     27 
     28   * Remove workaround for Windows DST: Time differences of one hour
     29     are no longer treated as not different.
     30   * Time remaining, when over 24h, shown as days and HMS instead of
     31     just HMS.
     32   * Stop using deprecated [GdkPixbuf.from_xpm_data] (avoids problems
     33     with some versions of gdkpixbuf).  Attempt to avoid soundness
     34     issues with lablgtk while doing so.
     35 
     36   Deprecation warning: support for external rsync will be removed,
     37   likely in 2.54.0.
     38 
     39   DEPRECATION MAY HAPPEN WITH LESS THAN TYPICAL NOTICE:
     40   lablgtk is difficult to use safely, and future maintenance is
     41   unclear.  Implementing the GUI without lablgtk requires more effort
     42   than seems likely to happen.  Thus, it is possible that support for
     43   the unison GUI may end suddenly, on a particular platform, or on all
     44   platforms -- even in a micro release.  See
     45     https://github.com/bcpierce00/unison/issues/1075  
     46 
     47 ## Changes in 2.53.5
     48 
     49 Released 2024-05-06
     50 
     51   * Various minor bugfixes.
     52   * Recovery from errors during repeat mode (enabled in 2.53.1) is disabled
     53     for time being.
     54 
     55 ## Changes in 2.53.4
     56 
     57 Released 2024-02-19
     58 
     59   * Improved and simplified makefiles. Please review your build scripts
     60     for changed build goals, input variables and build artifact names.
     61     See INSTALL.md for details.
     62   * opam build uses the makefile build system.
     63   * Various fixes in Windows and Cygwin builds.
     64   * Preferences "force", "prefer" and related "partial" preferences now
     65     work slightly differently with values "newer" and "older". Previously,
     66     if mtimes in both replicas were equal then always the second root
     67     propagated to the first root (possibly reverting user changes). It
     68     is now made explicit that "newer" and "older" only work when mtimes
     69     are different.
     70   * Cleanups in documentation.
     71   * Bugfixes, minor improvements, cleanups.
     72 
     73 ## Changes in 2.53.3
     74 
     75 Released 2023-04-28
     76 
     77   * On Linux, allow syncing the xattrs where POSIX draft ACLS are
     78     stored, which enables syncing the ACL info.  (Note that this does
     79     not enable syncing ACLs with the `-acl` switch, and does not
     80     enable syncing ACLs between other systems and Linux.  See the
     81     manual.)
     82   * Improved ETA calculation and sync speed display in text UI.
     83   * Fix CI Windows builds (again).
     84   * Drop unmaintained "make install" target.
     85   * Bugfixes, minor improvements, cleanups.
     86 
     87 ## Changes in 2.53.2
     88 
     89 Released 2023-03-20
     90 
     91   * Change version string to 2.53.2 (2.53.1 identified as 2.53.0).
     92 
     93 ## Changes in 2.53.1
     94 
     95 Released 2023-03-19
     96 
     97   * Repeat mode is more fault tolerant, recovering after temporary
     98     errors.
     99   * Preferences "force", "prefer" and related no longer require
    100     specifying the full root.
    101   * Improve stopping of update propagation.
    102   * Enable VT input escape codes in Windows.
    103   * Respect user-provided CFLAGS, CPPFLAGS, LDFLAGS, LDLIBS.
    104   * Add build instructions in INSTALL.md (and drop from manual).
    105   * Add graceful stop in repeat mode - SIGUSR2.
    106   * Add watch+seconds to 'repeat' preference.
    107 
    108 ## Changes in 2.53.0
    109 
    110 Released 2022-11-07
    111 
    112   * OCaml >= 4.08 is required to build unison.
    113   * unison can be built with (unreleased) OCaml 5.
    114   * Change GUI to use GTK3 (via lablgtk3) instead of GTK2 (via lablgtk2)
    115   * Add support for syncing extended attributes.
    116   * Add support for syncing ACLs.
    117   * On Windows, add the ability to build unison as a hybrid
    118     application (GUI application attached to a text console) by
    119     defining UI_WINOS=hybrid (see src/Makefile).  Add this to CI.
    120     (Doing this for non-Windows is unnecessary as all applications,
    121     both GUI and non-GUI, are always executed with a connection to
    122     stdout/stderr. GUI-only applications (ie, no stdout/stderr) is a
    123     Windows-only concept.)
    124   * Notable bugfixes
    125     - Merge results are stored in archive more accurately.
    126     - Windows `\\?\` paths now work correctly (including `\\?\Volume{GUID}\` paths).
    127   * CI changes
    128     - The macOS binaries are properly signed.
    129     - Add workaround for bugs in the github CI Windows builds, one of
    130       which resulted in the 2.52.1 GUI version failing, in the Windows
    131       CI build artifacts.  (This does not affect platforms other than
    132       Windows, and may not affect other Windows builds.)
    133   * Changes that should not affect behavior
    134     - Clean up a variety of unmaintained and unused bits, mainly
    135       build-related.
    136     - OCaml's Unix library is now extensively used also on
    137       Windows. This allowed removal of large amount of
    138       Windows-specific OCaml and mainly C code.
    139 
    140 ## Changes in 2.52.1
    141 
    142 Released 2022-05-08
    143 
    144    * Deprecate ocaml < 4.08: 2.53.0 will require 4.08 or higher
    145    * Add man page
    146    * Remove rsh:// URI scheme (ssh:// of course remains).
    147    * Significant bugfixes and minor improvements
    148    * Deprecate "backups" preference (see manual for alternatives)
    149    * Deprecate "stream" and "halfduplex" preferences
    150 
    151 ## Changes in 2.52.0
    152 
    153 Released 2022-03-12
    154 
    155    * Feature negotiation, compatible with 2.51.
    156    * New archive format (independent of ocaml version, based on umarshal)
    157      Upgrade is automatic.
    158    * New wire protocol (independent of ocaml version, based on umarshal)
    159      New protocol is used if both sides are >= 2.52.0.
    160    * Compatibility with 2.48
    161    * Support for unix-domain sockets
    162    * Many bugfixes and minor improvements
    163    * ocaml compatibility is now >= 4.01
    164    * NEWS is now in NEWS.md and not in the manual
    165 
    166 ## Changes in 2.51.5
    167 
    168 Released 2021-12-18
    169 
    170      * Restore OCaml compat to before 4.02
    171      * dune/opam improvements/fixes
    172      * Improve GTK UI by using GtkTreeView
    173      * Add support for syncing symlinks on Windows (NTFS)
    174      * Improve ssh support on Windows (hide Windows console in GUI mode)
    175      * Many bugfixes and minor improvements
    176 
    177 ## Changes in 2.51.4
    178 
    179 Released 2021-06-24
    180 
    181      * OCaml 4.12 support
    182      * fsmonitor improvements and Solaris support
    183      * Color support in text UI, with a new preference, disabled by
    184        NO_COLOR.
    185      * Interactive profile selection in text UI, enabled by a new
    186        preference.
    187      * Working files are stored in the unison directory (typically
    188        /.unison) rather than $HOME.
    189      * Build cleanups, CI improvements, housekeeping
    190      * Many bugfixes and minor improvements
    191 
    192 ## Changes in 2.51.3
    193 
    194 Released 2020-10-21
    195 
    196      * Some nontrivial changes to profile parsing (G.raud Meyer)
    197           + '=' has been considered whitespace until now: several
    198             following chars are considered as only one; trailing chars are
    199             discarded; any non empty sequence of char is splitting. This
    200             is non standard and leads to confusion, for example -ignore==
    201             'Name .*=*' is valid when -ignore='Name .*=*' is not, and
    202             worse -ignore='Name *=' is the same as -ignore='Name *'. The
    203             parser now takes just a single '=' as delimiter after the
    204             option name. Other = characters are considered as part of the
    205             value being assigned to the option.
    206      * Numerous improvements to the text user-interface (G.raud Meyer)
    207           + New key-commands that restrict the display to a set of
    208             "matching" items: ones that are offering to propagate changes
    209             in a particular direction, conflicts, files to be merged,
    210             etc., plus several more useful key-commands. Type "?" to
    211             Unison to see all available commands.
    212 
    213 ## Changes in 2.51.0 through 2.51.2
    214 
    215      * Repository transplanted from SVN to Git and moved to GitHub ()
    216        (https://github.com/bcpierce00/unison).
    217      * Add a new preference, 'atomic', for specifying directories that
    218        should be treated atomically: if there are changes within such a
    219        directory in both replicase, the whole directory is marked as a
    220        conflict instead of propagating any of the changes. Thanks to
    221        Julian Squires for submitting this patch!
    222      * OSX / macOS
    223           + Ported to 10.13, High Sierra, and Apple's new APFS (earlier
    224             versions of Unison break because of new behavior of
    225             AppleDouble files)
    226           + Replaced Growl with OS X native notification center.
    227      * Miscellaneous:
    228           + The OCaml compiler version is now included in the "connection
    229             header -- the string that's printed when connecting to a
    230             remote server -- to facilitate debugging version mismatch
    231             issues.
    232           + Compatible with OCaml 4.06.
    233           + Added a DockerFile for the convenience of Docker users.
    234           + Many small bugfixes and UI improvements.
    235 
    236 ## Changes in 2.48
    237 
    238      * Incorporated a patch from Christopher Zimmermann to replace the
    239        Uprintf module (which doesn't work with OCaml 4.02, causing Unison
    240        to crash) with equivalent functionality from the standard library.
    241      * Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
    242      * Added a maxsizethreshold option, which prevents the transfer of
    243        files larger than the size specified (in Kb).
    244      * Added a "copyonconflict" preference, to make a copy of files that
    245        would otherwise be overwritten or deleted in case of conflicting
    246        changes. (This makes it possible to automatically resolve conflicts
    247        in a fairly safe way when synchronizing continuously, in
    248        combination with the "repeat = watch" and "prefer = newer"
    249        preferences.
    250      * File system monitoring:
    251           + The file watcher now fails when unable to watch a directory,
    252             rather than silently ignoring the issue.
    253           + File system monitoring: more robust communication with the
    254             helper program (in socket mode, the unison server will still
    255             work properly despite unexpected unison client
    256             disconnections).
    257           + A bytecode version of unison-fsmonitor is now produced by
    258             "make NATIVE=false"
    259           + Improved search for unison-fsmonitor
    260           + Detect when the helper process exits.
    261           + More robust file watching helper programs for Windows and
    262             Linux. They communicate with Unison through pipes (Unison
    263             redirects stdin and stdout), using a race-free protocol.
    264           + Retries paths with failures using an exponential backoff
    265             algorithm.
    266           + The information returned by the file watchers are used
    267             independently for each replica; thus, when only one replica
    268             has changes, Unison will only rescan this replica.
    269           + When available, used by the graphical UIs to speed up
    270             rescanning (can be disabled by setting the new watch
    271             preference to
    272           + Small fix to the way fsmonitor.py gets invoked when using the
    273             file watching functionality, suggested by Josh Berdine. Unison
    274             will now look for fsmonitor.py in the same directory where the
    275             Unison executable itself lives.
    276      * Minor:
    277           + Fixed a bug in export procedure that was messing up
    278             documentation strings.
    279           + Incorporated a patch from Irányossy Knoblauch Artúr to make
    280             temp file names fit within 143 characters (to make eCryptFS
    281             happy).
    282           + Added a string to the Conflict direction to document the
    283             reason of the conflict.
    284           + Log conflicts and problems in the text UI even if nothing is
    285             propagated.
    286           + Use hash function from OCaml 3.x for comparing archives, even
    287             when compiled with OCaml 4.x.
    288           + Do not restart Unison in case of uncaught exception when the
    289             repeat preference is set. This seems safer. And it does not
    290             work, for instance, in case of lost connection.
    291           + Fix Unix.readlink invalid argument error under Windows
    292           + Fix a crash when the output of the diff program is too large.
    293           + Fixed Makefile for cross-compiling towards Windows (updated to
    294             MinGW-w64)
    295 
    296 ## Changes in very old versions
    297 
    298 (Note that these are written 'Changes since' and thus the content
    299 applies to the release after that.)
    300 
    301    Changes since 2.40.63:
    302      * New preference fastercheckUNSAFE, which can be used (with care!) to
    303        achieve much faster update detection when all the common files in
    304        the two replicas are known to be identical. See the manual for more
    305        information.
    306        This feature should still be considered experimental, but it's
    307        ready for other people to try out.
    308      * Added option clientHostName. If specified, it will be used to as
    309        the client host name, overriding UNISONLOCALHOSTNAME and the actual
    310        host name.
    311      * OS X GUI:
    312           + fix crash under Lion, because of problems with the toolbar,
    313             using the fix suggested in
    314             http://blitzbasic.com/Community/posts.php?topic=95778.
    315           + uimacnew09 is now the standard graphical interface on OSX
    316           + A small improvement to the uimacnew09 interface from Alan
    317             Schmitt and Steve Kalkwarf: when Unison is run with the -batch
    318             flag, the interface will now automatically propagate changes
    319             and terminate, without waiting for user interaction.
    320           + Show a modal warning window if there is no archive for the
    321             hosts. The user can then choose to exit or proceed (proceed is
    322             the default). The window is not shown if the batch preference
    323             is true.
    324           + file details panel selectable
    325      * GTK GUI:
    326           + New version of uigtk2.ml from Matt Zagrabelny that reorganizes
    327             the icons in a slightly more intuitive way.
    328      * Minor fixes:
    329           + Setting the prefer preference to older or newer now propagates
    330             deletions when there is no conflict.
    331           + Correctly quote the path when running merge commands.
    332           + Add quotes to paths when calling external file watcher
    333             utility.
    334           + Incorporate a patch to fsmonitor.py (the external filewatcher
    335             utility) from Tomasz Zernicki to make it work better under
    336             Windows.
    337           + Incorporated new version of fsmonitor.py from Christophe Gohle
    338           + Fixed incompatibility with OpenSSH 5.6.
    339           + Fixed fingerprint cache: do not cache file properties
    340           + Some spelling corrections in documentation and comments from
    341             Stephane Glondu
    342           + Fixed O_APPEND mode for open under Windows
    343           + Fixed String.sub invalid argument error when an AppleDouble
    344             file does not contain a finder information field
    345           + Trim duplicate paths when using "-repeat watch"
    346           + Unison now passes path arguments and -follow directives to
    347             fsmonitor.py. This seems to work except for one small issue
    348             with how fsmonitor.py treats -follow directives for
    349             directories that don't exist (or maybe this is an issue with
    350             how it treats any kind of monitoring when the thing being
    351             monitored doesn't exist?). If we create a symlink to a
    352             nonexistent directory, give Unison (hence fsmonitor.py) a
    353             'follow' directive for the symlink, start unison, and then
    354             create the directory, fsmonitor.py misses the change.
    355           + Lines added in profile files by unison always start at a new
    356             line
    357 
    358    Changes since 2.40.1:
    359      * Added "BelowPath" patterns, that match a path as well as all paths
    360        below (convenient to use with nodeletion,update,creationpartial
    361        preferences)
    362      * Added a "fat" preference that makes Unison use the right options
    363        when one of the replica is on a FAT filesystem.
    364      * Allow "prefer/force=newer" even when not synchronizing modification
    365        times. (The reconciler will not be aware of the modification time
    366        of unchanged files, so the synchronization choices of Unison can be
    367        different from when "times=true", but the behavior remains sane:
    368        changed files with the most recent modification time will be
    369        propagated.)
    370      * Minor fixes and improvements:
    371           + Compare filenames up to decomposition in case sensitive mode
    372             when one host is running MacOSX and the unicode preference is
    373             set to true.
    374           + Rsync: somewhat faster compressor
    375           + Make Unicode the default on all architectures (it was only the
    376             default when a Mac OS X or Windows machine was involved).
    377 
    378    Changes since 2.32:
    379      * Major enhancement: Unicode support.
    380           + Unison should now handle unicode filenames correctly on all
    381             platforms.
    382           + This functionality is controlled by a new preference unicode.
    383           + Unicode mode is now the default when one of the hosts is under
    384             Windows or MacOS. This may make upgrades a bit more painful
    385             (the archives cannot be reused), but this is a much saner
    386             default.
    387      * Partial transfer of directories. If an error occurs while
    388        transferring a directory, the part transferred so far is copied
    389        into place (and the archives are updated accordingly). The
    390        "maxerrors" preference controls how many transfer error Unison will
    391        accept before stopping the transfer of a directory (by default,
    392        only one). This makes it possible to transfer most of a directory
    393        even if there are some errors. Currently, only the first error is
    394        reported by the GUIs.
    395        Also, allow partial transfer of a directory when there was an error
    396        deep inside this directory during update detection. At the moment,
    397        this is only activated with the text and GTK UIs, which have been
    398        modified so that they show that the transfer is going to be partial
    399        and so that they can display all errors.
    400      * Improvement to the code for resuming directory transfers:
    401           + if a file was not correctly transferred (or the source has
    402             been modified since, with unchanged size), Unison performs a
    403             new transfer rather than failing
    404           + spurious files are deleted (this can happen if a file is
    405             deleted on the source replica before resuming the transfer;
    406             not deleting the file would result in it reappearing on the
    407             target replica)
    408      * Experimental streaming protocol for transferring file contents (can
    409        be disabled by setting the directive "stream" to false): file
    410        contents is transferred asynchronously (without waiting for a
    411        response from the destination after each chunk sent) rather than
    412        using the synchronous RPC mechanism. As a consequence:
    413           + Unison now transfers the contents of a single file at a time
    414             (Unison used to transfer several contents simultaneously in
    415             order to hide the connection latency.)
    416           + the transfer of large files uses the full available bandwidth
    417             and is not slowed done due to the connection latency anymore
    418           + we get performance improvement for small files as well by
    419             scheduling many files simultaneously (as scheduling a file for
    420             transfer consume little resource: it does not mean allocating
    421             a large buffer anymore)
    422      * Changes to the internal implementation of the rsync algorithm:
    423           + use longer blocks for large files (the size of a block is the
    424             square root of the size of the file for large files);
    425           + transmit less checksum information per block (we still have
    426             less than one chance in a hundred million of transferring a
    427             file incorrectly, and Unison will catch any transfer error
    428             when fingerprinting the whole file)
    429           + avoid transfer overhead (which was 4 bytes per block)
    430        For a 1G file, the first optimization saves a factor 50 on the
    431        amount of data transferred from the target to the source (blocks
    432        are 32768 bytes rather than just 700 bytes). The two other
    433        optimizations save another factor of 2 (from 24 bytes per block
    434        down to 10).
    435      * Implemented an on-disk file fingerprint cache to speed-up update
    436        detection after a crash: this way, Unison does not have do
    437        recompute all the file fingerprints from scratch.
    438           + When Unison detects that the archive case-sensitivity mode
    439             does not match the current settings, it populates the
    440             fingerprint cache using the archive contents. This way,
    441             changing the case-sensitivity mode should be reasonably fast.
    442      * New preferences "noupdate=root", "nodeletion=root",
    443        "nocreation=root" that prevent Unison from performing files
    444        updates, deletions or creations on the given root. Also 'partial'
    445        versions of 'noupdate', 'nodeletion' and 'nocreation'
    446      * Limit the number of simultaneous external copy program ("copymax"
    447        preference)
    448      * New "links" preference. When set to false, Unison will report an
    449        error on symlinks during update detection. (This is the default
    450        when one host is running Windows but not Cygwin.) This is better
    451        than failing during propagation.
    452      * Added a preference "halfduplex" to force half-duplex communication
    453        with the server. This may be useful on unreliable links (as a more
    454        efficient alternative to "maxthreads = 1").
    455      * Renamed preference "pretendwin" to "ignoreinodenumbers" (an alias
    456        is kept for backwards compatibility).
    457      * Ignore one-second differences when synchronizing modification time.
    458        (Technically, this is an incompatible archive format change, but it
    459        is backward compatible. To trigger a problem, a user would have to
    460        synchronize modification times on a filesystem with a two-second
    461        granularity and then downgrade to a previous version of Unison,
    462        which does not work well in such a case. Thus, it does not seem
    463        worthwhile to increment the archive format number, which would
    464        impact all users.)
    465      * Do not keep many files simultaneously opened anymore when the rsync
    466        algorithm is in use.
    467      * Add "ignorearchives" preference to ignore existing archives (to
    468        avoid forcing users to delete them manually, in situations where
    469        one archive has gotten deleted or corrupted).
    470      * Mac OS
    471           + fixed rsync bug which could result in an "index out of bounds"
    472             error when transferring resource forks.
    473           + Fixed bug which made Unison ignore finder information and
    474             resource fork when compiled to 64bit on Mac OSX.
    475           + should now be 64 bit clean (the Growl framework is not up to
    476             date, though)
    477           + Made the bridge between Objective C and Ocaml code GC friendly
    478             (it was allocating ML values and putting them in an array
    479             which was not registered with the GC)
    480           + use darker grey arrows (patch contributed by Eric Y. Kow)
    481      * GTK user interface
    482           + assistant for creating profiles
    483           + profile editor
    484           + pop up a summary window when the replicas are not fully
    485             synchronized after transport
    486           + display estimated remaining time and transfer rate on the
    487             progress bar
    488           + allow simultaneous selection of several items
    489           + Do not reload the preference file before a new update
    490             detection if it is unchanged
    491           + disabled scrolling to the first unfinished item during
    492             transport. It goes way too fast when lot of small files are
    493             synchronized, and it makes it impossible to browse the file
    494             list during transport.
    495           + take into account the "height" preference again
    496           + the internal list of selected reconciler item was not always
    497             in sync with what was displayed (GTK bug?); workaround
    498             implemented
    499           + Do not display "Looking for change" messages during
    500             propagation (when checking the targe is unchanged) but only
    501             during update detection
    502           + Apply patch to fix some crashes in the OSX GUI, thanks to Onne
    503             Gorter.
    504      * Text UI
    505           + During update detection, display status by updating a single
    506             line rather than generating a new line of output every so
    507             often. Should be less confusing.
    508      * Windows
    509           + Fastcheck is now the default under Windows. People mostly use
    510             NTFS nowadays and the Unicode API provides an equivalent to
    511             inode numbers for this filesystem.
    512           + Only use long UNC path for accessing replicas (as '..' is not
    513             handled with this format of paths, but can be useful)
    514           + Windows text UI: now put the console into UTF-8 output mode.
    515             This is the right thing to do when in Unicode mode, and is no
    516             worse than what we had previously otherwise (the console use
    517             some esoteric encoding by default). This only works when using
    518             a Unicode font instead of the default raster font.
    519           + Don't get the home directory from environment variable HOME
    520             under Windows (except for Cygwin binaries): we don't want the
    521             behavior of Unison to depends on whether it is run from a
    522             Cygwin shell (where HOME is set) or in any other way (where
    523             HOME is usually not set).
    524      * Miscellaneous fixes and improvements
    525           + Made a server waiting on a socket more resilient to unexpected
    526             lost connections from the client.
    527           + Small patch to property setting code suggested by Ulrich
    528             Gernkow.
    529           + Several fixes to the change transfer functions (both the
    530             internal ones and external transfers using rsync). In
    531             particular, limit the number of simultaneous transfer using an
    532             rsync (as the rsync algorithm can use a large amount of memory
    533             when processing huge files)
    534           + Keep track of which file contents are being transferred, and
    535             delay the transfer of a file when another file with the same
    536             contents is currently being transferred. This way, the second
    537             transfer can be skipped and replaced by a local copy.
    538           + Experimental update detection optimization: do not read the
    539             contents of unchanged directories
    540           + When a file transfer fails, turn off fastcheck for this file
    541             on the next sync.
    542           + Fixed bug with case insensitive mode on a case sensitive
    543             filesystem:
    544                o if file "a/a" is created on one replica and directory "A"
    545                  is created on the other, the file failed to be
    546                  synchronized the first time Unison is run afterwards, as
    547                  Unison uses the wrong path "a/a" (if Unison is run again,
    548                  the directories are in the archive, so the right path is
    549                  used);
    550                o if file "a" appears on one replica and file "A" appears
    551                  on the other with different contents, Unison was unable
    552                  to synchronize them.
    553           + Improved error reporting when the destination is updated
    554             during synchronization: Unison now tells which file has been
    555             updated, and how.
    556           + Limit the length of temporary file names
    557           + Case sensitivity information put in the archive (in a backward
    558             compatible way) and checked when the archive is loaded
    559           + Got rid of the 16mb marshalling limit by marshalling to a
    560             bigarray.
    561           + Resume copy of partially transferred files.
    562 
    563    Changes since 2.31:
    564      * Small user interface changes
    565           + Small change to text UI "scanning..." messages, to print just
    566             directories (hopefully making it clearer that individual files
    567             are not necessarily being fingerprinted).
    568      * Minor fixes and improvements:
    569           + Ignore one hour differences when deciding whether a file may
    570             have been updated. This avoids slow update detection after
    571             daylight saving time changes under Windows. This makes Unison
    572             slightly more likely to miss an update, but it should be safe
    573             enough.
    574           + Fix a small bug that was affecting mainly windows users. We
    575             need to commit the archives at the end of the sync even if
    576             there are no updates to propagate because some files (in fact,
    577             if we've just switched to DST on windows, a LOT of files)
    578             might have new modtimes in the archive. (Changed the text UI
    579             only. It's less clear where to change the GUI.)
    580           + Don't delete the temp file when a transfer fails due to a
    581             fingerprint mismatch (so that we can have a look and see why!)
    582             We've also added more debugging code togive more informative
    583             error messages when we encounter the dreaded and longstanding
    584             "assert failed during file transfer" bug
    585           + Incorrect paths ("path" directive) now result in an error
    586             update item rather than a fatal error.
    587           + Create parent directories (with correct permissions) during
    588             transport for paths which point to non-existent locations in
    589             the destination replica.
    590 
    591    Changes since 2.27:
    592      * If Unison is interrupted during a directory transfer, it will now
    593        leave the partially transferred directory intact in a temporary
    594        location. (This maintains the invariant that new files/directories
    595        are transferred either completely or not at all.) The next time
    596        Unison is run, it will continue filling in this temporary
    597        directory, skipping transferring files that it finds are already
    598        there.
    599      * We've added experimental support for invoking an external file
    600        transfer tool for whole-file copies instead of Unison's built-in
    601        transfer protocol. Three new preferences have been added:
    602           + copyprog is a string giving the name (and command-line
    603             switches, if needed) of an external program that can be used
    604             to copy large files efficiently. By default, rsync is invoked,
    605             but other tools such as scp can be used instead by changing
    606             the value of this preference. (Although this is not its
    607             primary purpose, rsync is actually a pretty fast way of
    608             copying files that don't already exist on the receiving host.)
    609             For files that do already exist on (but that have been changed
    610             in one replica), Unison will always use its built-in
    611             implementation of the rsync algorithm.
    612           + Added a "copyprogrest" preference, so that we can give
    613             different command lines for invoking the external copy utility
    614             depending on whether a partially transferred file already
    615             exists or not. (Rsync doesn't seem to care about this, but
    616             other utilities may.)
    617           + copythreshold is an integer (-1 by default), indicating above
    618             what filesize (in megabytes) Unison should use the external
    619             copying utility specified by copyprog. Specifying 0 will cause
    620             ALL copies to use the external program; a negative number will
    621             prevent any files from using it. (Default is -1.)
    622        Thanks to Alan Schmitt for a huge amount of hacking and to an
    623        anonymous sponsor for suggesting and underwriting this extension.
    624      * Small improvements:
    625           + Added a new preference, dontchmod. By default, Unison uses the
    626             chmod system call to set the permission bits of files after it
    627             has copied them. But in some circumstances (and under some
    628             operating systems), the chmod call always fails. Setting this
    629             preference completely prevents Unison from ever calling chmod.
    630           + Don't ignore files that look like backup files if the
    631             backuplocation preference is set to central
    632           + Shortened the names of several preferences. The old names are
    633             also still supported, for backwards compatibility, but they do
    634             not appear in the documentation.
    635           + Lots of little documentation tidying. (In particular,
    636             preferences are separated into Basic and Advanced! This should
    637             hopefully make Unison a little more approachable for new
    638             users.
    639           + Unison can sometimes fail to transfer a file, giving the
    640             unhelpful message "Destination updated during synchronization"
    641             even though the file has not been changed. This can be caused
    642             by programs that change either the file's contents or the
    643             file's extended attributes without changing its modification
    644             time. It's not clear what is the best fix for this - it is not
    645             Unison's fault, but it makes Unison's behavior puzzling - but
    646             at least Unison can be more helpful about suggesting a
    647             workaround (running once with fastcheck set to false). The
    648             failure message has been changed to give this advice.
    649           + Further improvements to the OS X GUI (thanks to Alan Schmitt
    650             and Craig Federighi).
    651      * Very preliminary support for triggering Unison from an external
    652        filesystem-watching utility. The current implementation is very
    653        simple, not efficient, and almost completely untested--not ready
    654        for real users. But if someone wants to help improve it (e.g., by
    655        writing a filesystem watcher for your favorite OS), please make
    656        yourself known!
    657        On the Unison side, the new behavior is very simple:
    658           + use the text UI
    659           + start Unison with the command-line flag "-repeat FOO", where
    660             FOO is name of a file where Unison should look for
    661             notifications of changes
    662           + when it starts up, Unison will read the whole contents of this
    663             file (on both hosts), which should be a newline-separated list
    664             of paths (relative to the root of the synchronization) and
    665             synchronize just these paths, as if it had been started with
    666             the "-path=xxx" option for each one of them
    667           + when it finishes, it will sleep for a few seconds and then
    668             examine the watchfile again; if anything has been added, it
    669             will read the new paths, synchronize them, and go back to
    670             sleep
    671           + that's it!
    672        To use this to drive Unison "incrementally," just start it in this
    673        mode and start up a tool (on each host) to watch for new changes to
    674        the filesystem and append the appropriate paths to the watchfile.
    675        Hopefully such tools should not be too hard to write.
    676      * Bug fixes:
    677           + Fixed a bug that was causing new files to be created with
    678             permissions 0x600 instead of using a reasonable default (like
    679             0x644), if the 'perms' flag was set to 0. (Bug reported by Ben
    680             Crowell.)
    681           + Follow maxthreads preference when transferring directories.
    682 
    683    Changes since 2.17:
    684      * Major rewrite and cleanup of the whole Mac OS X graphical user
    685        interface by Craig Federighi. Thanks, Craig!!!
    686      * Small fix to ctime (non-)handling in update detection under windows
    687        with fastcheck.
    688      * Several small fixes to the GTK2 UI to make it work better under
    689        Windows [thanks to Karl M for these].
    690      * The backup functionality has been completely rewritten. The
    691        external interface has not changed, but numerous bugs, irregular
    692        behaviors, and cross-platform inconsistencies have been corrected.
    693      * The Unison project now accepts donations via PayPal. If you'd like
    694        to donate, you can find a link to the donation page on the Unison
    695        home page (http://www.cis.upenn.edu/ bcpierce/unison/lists.html).
    696      * Some important safety improvements:
    697           + Added a new mountpoint preference, which can be used to
    698             specify a path that must exist in both replicas at the end of
    699             update detection (otherwise Unison aborts). This can be used
    700             to avoid potentially dangerous situations when Unison is used
    701             with removable media such as external hard drives and compact
    702             flash cards.
    703           + The confirmation of "big deletes" is now controlled by a
    704             boolean preference confirmbigdeletes. Default is true, which
    705             gives the same behavior as previously. (This functionality is
    706             at least partly superseded by the mountpoint preference, but
    707             it has been left in place in case it is useful to some
    708             people.)
    709           + If Unison is asked to "follow" a symbolic link but there is
    710             nothing at the other end of the link, it will now flag this
    711             path as an error, rather than treating the symlink itself as
    712             missing or deleted. This avoids a potentially dangerous
    713             situation where a followed symlink points to an external
    714             filesystem that might be offline when Unison is run (whereupon
    715             Unison would cheerfully delete the corresponding files in the
    716             other replica!).
    717      * Smaller changes:
    718           + Added forcepartial and preferpartial preferences, which behave
    719             like force and prefer but can be specified on a per-path
    720             basis. [Thanks to Alan Schmitt for this.]
    721           + A bare-bones self test feature was added, which runs unison
    722             through some of its paces and checks that the results are as
    723             expected. The coverage of the tests is still very limited, but
    724             the facility has already been very useful in debugging the new
    725             backup functionality (especially in exposing some subtle
    726             cross-platform issues).
    727           + Refined debugging code so that the verbosity of individual
    728             modules can be controlled separately. Instead of just putting
    729             '-debug verbose' on the command line, you can put '-debug
    730             update+', which causes all the extra messages in the Update
    731             module, but not other modules, to be printed. Putting '-debug
    732             verbose' causes all modules to print with maximum verbosity.
    733           + Removed mergebatch preference. (It never seemed very useful,
    734             and its semantics were confusing.)
    735           + Rewrote some of the merging functionality, for better
    736             cooperation with external Harmony instances.
    737           + Changed the temp file prefix from .# to .unison.
    738           + Compressed the output from the text user interface
    739             (particularly when run with the -terse flag) to make it easier
    740             to interpret the results when Unison is run several times in
    741             succession from a script.
    742           + Diff and merge functions now work under Windows.
    743           + Changed the order of arguments to the default diff command (so
    744             that the + and - annotations in diff's output are reversed).
    745           + Added .mpp files to the "never fastcheck" list (like .xls
    746             files).
    747      * Many small bugfixes, including:
    748           + Fixed a longstanding bug regarding fastcheck and daylight
    749             saving time under Windows when Unison is set up to synchronize
    750             modification times. (Modification times cannot be updated in
    751             the archive in this case, so we have to ignore one hour
    752             differences.)
    753           + Fixed a bug that would occasionally cause the archives to be
    754             left in non-identical states on the two hosts after
    755             synchronization.
    756           + Fixed a bug that prevented Unison from communicating correctly
    757             between 32- and 64-bit architectures.
    758           + On windows, file creation times are no longer used as a proxy
    759             for inode numbers. (This is unfortunate, as it makes fastcheck
    760             a little less safe. But it turns out that file creation times
    761             are not reliable under Windows: if a file is removed and a new
    762             file is created in its place, the new one will sometimes be
    763             given the same creation date as the old one!)
    764           + Set read-only file to R/W on OSX before attempting to change
    765             other attributes.
    766           + Fixed bug resulting in spurious "Aborted" errors during
    767             transport (thanks to Jerome Vouillon)
    768           + Enable diff if file contents have changed in one replica, but
    769             only properties in the other.
    770           + Removed misleading documentation for 'repeat' preference.
    771           + Fixed a bug in merging code where Unison could sometimes
    772             deadlock with the external merge program, if the latter
    773             produced large amounts of output.
    774           + Workaround for a bug compiling gtk2 user interface against
    775             current versions of gtk2+ libraries.
    776           + Added a better error message for "ambiguous paths".
    777           + Squashed a longstanding bug that would cause file transfer to
    778             fail with the message "Failed: Error in readWrite: Is a
    779             directory."
    780           + Replaced symlinks with copies of their targets in the Growl
    781             framework in src/uimac. This should make the sources easier to
    782             check out from the svn repository on WinXP systems.
    783           + Added a workaround (suggested by Karl M.) for the problem
    784             discussed on the unison users mailing list where, on the
    785             Windows platform, the server would hang when transferring
    786             files. I conjecture that the problem has to do with the RPC
    787             mechanism, which was used to make a call back from the server
    788             to the client (inside the Trace.log function) so that the log
    789             message would be appended to the log file on the client. The
    790             workaround is to dump these messages (about when xferbycopying
    791             shortcuts are applied and whether they succeed) just to the
    792             standard output of the Unison process, not to the log file.
    793 
    794    Changes since 2.13.0:
    795      * The features for performing backups and for invoking external merge
    796        programs have been completely rewritten by Stephane Lescuyer
    797        (thanks, Stephane!). The user-visible functionality should not
    798        change, but the internals have been rationalized and there are a
    799        number of new features. See the manual (in particular, the
    800        description of the backupXXX preferences) for details.
    801      * Incorporated patches for ipv6 support, contributed by Samuel
    802        Thibault. (Note that, due to a bug in the released OCaml 3.08.3
    803        compiler, this code will not actually work with ipv6 unless
    804        compiled with the CVS version of the OCaml compiler, where the bug
    805        has been fixed; however, ipv4 should continue to work normally.)
    806      * OSX interface:
    807           + Incorporated Ben Willmore's cool new icon for the Mac UI.
    808      * Small fixes:
    809           + Fixed off by one error in month numbers (in printed dates)
    810             reported by Bob Burger
    811 
    812    Changes since 2.12.0:
    813      * New convention for release numbering: Releases will continue to be
    814        given numbers of the form X.Y.Z, but, from now on, just the major
    815        version number (X.Y) will be considered significant when checking
    816        compatibility between client and server versions. The third
    817        component of the version number will be used only to identify
    818        "patch levels" of releases.
    819        This change goes hand in hand with a change to the procedure for
    820        making new releases. Candidate releases will initially be given
    821        "beta release" status when they are announced for public
    822        consumption. Any bugs that are discovered will be fixed in a
    823        separate branch of the source repository (without changing the
    824        major version number) and new tarballs re-released as needed. When
    825        this process converges, the patched beta version will be dubbed
    826        stable.
    827      * Warning (failure in batch mode) when one path is completely
    828        emptied. This prevents Unison from deleting everything on one
    829        replica when the other disappear.
    830      * Fix diff bug (where no difference is shown the first time the diff
    831        command is given).
    832      * User interface changes:
    833           + Improved workaround for button focus problem (GTK2 UI)
    834           + Put leading zeroes in date fields
    835           + More robust handling of character encodings in GTK2 UI
    836           + Changed format of modification time displays, from modified at
    837             hh:mm:ss on dd MMM, yyyy to modified on yyyy-mm-dd hh:mm:ss
    838           + Changed time display to include seconds (so that people on FAT
    839             filesystems will not be confused when Unison tries to update a
    840             file time to an odd number of seconds and the filesystem
    841             truncates it to an even number!)
    842           + Use the diff "-u" option by default when showing differences
    843             between files (the output is more readable)
    844           + In text mode, pipe the diff output to a pager if the
    845             environment variable PAGER is set
    846           + Bug fixes and cleanups in ssh password prompting. Now works
    847             with the GTK2 UI under Linux. (Hopefully the Mac OS X one is
    848             not broken!)
    849           + Include profile name in the GTK2 window name
    850           + Added bindings ',' (same as '<') and '.' (same as '>') in the
    851             GTK2 UI
    852      * Mac GUI:
    853           + actions like < and > scroll to the next item as necessary.
    854           + Restart has a menu item and keyboard shortcut (command-R).
    855           + Added a command-line tool for Mac OS X. It can be installed
    856             from the Unison menu.
    857           + New icon.
    858           + Handle the "help" command-line argument properly.
    859           + Handle profiles given on the command line properly.
    860           + When a profile has been selected, the profile dialog is
    861             replaced by a "connecting" message while the connection is
    862             being made. This gives better feedback.
    863           + Size of left and right columns is now large enough so that
    864             "PropsChanged" is not cut off.
    865      * Minor changes:
    866           + Disable multi-threading when both roots are local
    867           + Improved error handling code. In particular, make sure all
    868             files are closed in case of a transient failure
    869           + Under Windows, use $UNISON for home directory as a last resort
    870             (it was wrongly moved before $HOME and $USERPROFILE in Unison
    871             2.12.0)
    872           + Reopen the logfile if its name changes (profile change)
    873           + Double-check that permissions and modification times have been
    874             properly set: there are some combination of OS and filesystem
    875             on which setting them can fail in a silent way.
    876           + Check for bad Windows filenames for pure Windows
    877             synchronization also (not just cross architecture
    878             synchronization). This way, filenames containing backslashes,
    879             which are not correctly handled by unison, are rejected right
    880             away.
    881           + Attempt to resolve issues with synchronizing modification
    882             times of read-only files under Windows
    883           + Ignore chmod failures when deleting files
    884           + Ignore trailing dots in filenames in case insensitive mode
    885           + Proper quoting of paths, files and extensions ignored using
    886             the UI
    887           + The strings CURRENT1 and CURRENT2 are now correctly substituted
    888             when they occur in the diff preference
    889           + Improvements to syncing resource forks between Macs via a
    890             non-Mac system.
    891 
    892    Changes since 2.10.2:
    893      * INCOMPATIBLE CHANGE: Archive format has changed.
    894      * Source code availability: The Unison sources are now managed using
    895        Subversion. One nice side-effect is that anonymous checkout is now
    896        possible, like this:
    897         svn co https://cvs.cis.upenn.edu:3690/svnroot/unison/
    898 
    899        We will also continue to export a "developer tarball" of the
    900        current (modulo one day) sources in the web export directory. To
    901        receive commit logs for changes to the sources, subscribe to the
    902        unison-hackers list (http://www.cis.upenn.edu/
    903        bcpierce/unison/lists.html).
    904      * Text user interface:
    905           + Substantial reworking of the internal logic of the text UI to
    906             make it a bit easier to modify.
    907           + The dumbtty flag in the text UI is automatically set to true
    908             if the client is running on a Unix system and the EMACS
    909             environment variable is set to anything other than the empty
    910             string.
    911      * Native OS X gui:
    912           + Added a synchronize menu item with keyboard shortcut
    913           + Added a merge menu item, still needs to be debugged
    914           + Fixes to compile for Panther
    915           + Miscellaneous improvements and bugfixes
    916      * Small changes:
    917           + Changed the filename checking code to apply to Windows only,
    918             instead of OS X as well.
    919           + Finder flags now synchronized
    920           + Fallback in copy.ml for filesystem that do not support O_EXCL
    921           + Changed buffer size for local file copy (was highly
    922             inefficient with synchronous writes)
    923           + Ignore chmod failure when deleting a directory
    924           + Fixed assertion failure when resolving a conflict content
    925             change / permission changes in favor of the content change.
    926           + Workaround for transferring large files using rsync.
    927           + Use buffered I/O for files (this is the only way to open files
    928             in binary mode under Cygwin).
    929           + On non-Cygwin Windows systems, the UNISON environment variable
    930             is now checked first to determine where to look for Unison's
    931             archive and preference files, followed by HOME and USERPROFILE
    932             in that order. On Unix and Cygwin systems, HOME is used.
    933           + Generalized diff preference so that it can be given either as
    934             just the command name to be used for calculating diffs or else
    935             a whole command line, containing the strings CURRENT1 and
    936             CURRENT2, which will be replaced by the names of the files to
    937             be diff'ed before the command is called.
    938           + Recognize password prompts in some newer versions of ssh.
    939 
    940    Changes since 2.9.20:
    941      * INCOMPATIBLE CHANGE: Archive format has changed.
    942      * Major functionality changes:
    943           + Major tidying and enhancement of 'merge' functionality. The
    944             main user-visible change is that the external merge program
    945             may either write the merged output to a single new file, as
    946             before, or it may modify one or both of its input files, or it
    947             may write two new files. In the latter cases, its
    948             modifications will be copied back into place on both the local
    949             and the remote host, and (if the two files are now equal) the
    950             archive will be updated appropriately. More information can be
    951             found in the user manual. Thanks to Malo Denielou and Alan
    952             Schmitt for these improvements.
    953             Warning: the new merging functionality is not completely
    954             compatible with old versions! Check the manual for details.
    955           + Files larger than 2Gb are now supported.
    956           + Added preliminary (and still somewhat experimental) support
    957             for the Apple OS X operating system.
    958                o Resource forks should be transferred correctly. (See the
    959                  manual for details of how this works when synchronizing
    960                  HFS with non-HFS volumes.) Synchronization of file type
    961                  and creator information is also supported.
    962                o On OSX systems, the name of the directory for storing
    963                  Unison's archives, preference files, etc., is now
    964                  determined as follows:
    965                     # if ~/.unison exists, use it
    966                     # otherwise, use ~/Library/Application Support/Unison,
    967                       creating it if necessary.
    968                o A preliminary native-Cocoa user interface is under
    969                  construction. This still needs some work, and some users
    970                  experience unpredictable crashes, so it is only for
    971                  hackers for now. Run make with UISTYLE=mac to build this
    972                  interface.
    973      * Minor functionality changes:
    974           + Added an ignorelocks preference, which forces Unison to
    975             override left-over archive locks. (Setting this preference is
    976             dangerous! Use it only if you are positive you know what you
    977             are doing.)
    978           + Added a new preference assumeContentsAreImmutable. If a
    979             directory matches one of the patterns set in this preference,
    980             then update detection is skipped for files in this directory.
    981             (The purpose is to speed update detection for cases like Mail
    982             folders, which contain lots and lots of immutable files.) Also
    983             a preference assumeContentsAreImmutableNot, which overrides
    984             the first, similarly to ignorenot. (Later amendment: these
    985             preferences are now called immutable and immutablenot.)
    986           + The ignorecase flag has been changed from a boolean to a
    987             three-valued preference. The default setting, called default,
    988             checks the operating systems running on the client and server
    989             and ignores filename case if either of them is OSX or Windows.
    990             Setting ignorecase to true or false overrides this behavior.
    991             If you have been setting ignorecase on the command line using
    992             -ignorecase=true or -ignorecase=false, you will need to change
    993             to -ignorecase true or -ignorecase false.
    994           + a new preference, 'repeat', for the text user interface
    995             (only). If 'repeat' is set to a number, then, after it
    996             finishes synchronizing, Unison will wait for that many seconds
    997             and then start over, continuing this way until it is killed
    998             from outside. Setting repeat to true will automatically set
    999             the batch preference to true.
   1000           + Excel files are now handled specially, so that the fastcheck
   1001             optimization is skipped even if the fastcheck flag is set.
   1002             (Excel does some naughty things with modtimes, making this
   1003             optimization unreliable and leading to failures during change
   1004             propagation.)
   1005           + The ignorecase flag has been changed from a boolean to a
   1006             three-valued preference. The default setting, called
   1007             'default', checks the operating systems running on the client
   1008             and server and ignores filename case if either of them is OSX
   1009             or Windows. Setting ignorecase to 'true' or 'false' overrides
   1010             this behavior.
   1011           + Added a new preference, 'repeat', for the text user interface
   1012             (only, at the moment). If 'repeat' is set to a number, then,
   1013             after it finishes synchronizing, Unison will wait for that
   1014             many seconds and then start over, continuing this way until it
   1015             is killed from outside. Setting repeat to true will
   1016             automatically set the batch preference to true.
   1017           + The 'rshargs' preference has been split into 'rshargs' and
   1018             'sshargs' (mainly to make the documentation clearer). In fact,
   1019             'rshargs' is no longer mentioned in the documentation at all,
   1020             since pretty much everybody uses ssh now anyway.
   1021      * Documentation
   1022           + The web pages have been completely redesigned and reorganized.
   1023             (Thanks to Alan Schmitt for help with this.)
   1024      * User interface improvements
   1025           + Added a GTK2 user interface, capable (among other things) of
   1026             displaying filenames in any locale encoding. Kudos to Stephen
   1027             Tse for contributing this code!
   1028           + The text UI now prints a list of failed and skipped transfers
   1029             at the end of synchronization.
   1030           + Restarting update detection from the graphical UI will reload
   1031             the current profile (which in particular will reset the -path
   1032             preference, in case it has been narrowed by using the "Recheck
   1033             unsynchronized items" command).
   1034           + Several small improvements to the text user interface,
   1035             including a progress display.
   1036      * Bug fixes (too numerous to count, actually, but here are some):
   1037           + The maxthreads preference works now.
   1038           + Fixed bug where warning message about uname returning an
   1039             unrecognized result was preventing connection to server. (The
   1040             warning is no longer printed, and all systems where 'uname'
   1041             returns anything other than 'Darwin' are assumed not to be
   1042             running OS X.)
   1043           + Fixed a problem on OS X that caused some valid file names
   1044             (e.g., those including colons) to be considered invalid.
   1045           + Patched Path.followLink to follow links under cygwin in
   1046             addition to Unix (suggested by Matt Swift).
   1047           + Small change to the storeRootsName function, suggested by
   1048             bliviero at ichips.intel.com, to fix a problem in unison with
   1049             the `rootalias' option, which allows you to tell unison that
   1050             two roots contain the same files. Rootalias was being applied
   1051             after the hosts were sorted, so it wouldn't work properly in
   1052             all cases.
   1053           + Incorporated a fix by Dmitry Bely for setting utimes of
   1054             read-only files on Win32 systems.
   1055      * Installation / portability:
   1056           + Unison now compiles with OCaml version 3.07 and later out of
   1057             the box.
   1058           + Makefile.OCaml fixed to compile out of the box under OpenBSD.
   1059           + a few additional ports (e.g. OpenBSD, Zaurus/IPAQ) are now
   1060             mentioned in the documentation
   1061           + Unison can now be installed easily on OSX systems using the
   1062             Fink package manager
   1063 
   1064    Changes since 2.9.1:
   1065      * Added a preference maxthreads that can be used to limit the number
   1066        of simultaneous file transfers.
   1067      * Added a backupdir preference, which controls where backup files are
   1068        stored.
   1069      * Basic support added for OSX. In particular, Unison now recognizes
   1070        when one of the hosts being synchronized is running OSX and
   1071        switches to a case-insensitive treatment of filenames (i.e., 'foo'
   1072        and 'FOO' are considered to be the same file). (OSX is not yet
   1073        fully working, however: in particular, files with resource forks
   1074        will not be synchronized correctly.)
   1075      * The same hash used to form the archive name is now also added to
   1076        the names of the temp files created during file transfer. The
   1077        reason for this is that, during update detection, we are going to
   1078        silently delete any old temp files that we find along the way, and
   1079        we want to prevent ourselves from deleting temp files belonging to
   1080        other instances of Unison that may be running in parallel, e.g.
   1081        synchronizing with a different host. Thanks to Ruslan Ermilov for
   1082        this suggestion.
   1083      * Several small user interface improvements
   1084      * Documentation
   1085           + FAQ and bug reporting instructions have been split out as
   1086             separate HTML pages, accessible directly from the unison web
   1087             page.
   1088           + Additions to FAQ, in particular suggestions about performance
   1089             tuning.
   1090      * Makefile
   1091           + Makefile.OCaml now sets UISTYLE=text or UISTYLE=gtk
   1092             automatically, depending on whether it finds lablgtk installed
   1093           + Unison should now compile "out of the box" under OSX
   1094 
   1095    Changes since 2.8.1:
   1096      * Changing profile works again under Windows
   1097      * File movement optimization: Unison now tries to use local copy
   1098        instead of transfer for moved or copied files. It is controlled by
   1099        a boolean option "xferbycopying".
   1100      * Network statistics window (transfer rate, amount of data
   1101        transferred). [NB: not available in Windows-Cygwin version.]
   1102      * symlinks work under the cygwin version (which is dynamically
   1103        linked).
   1104      * Fixed potential deadlock when synchronizing between Windows and
   1105        Unix
   1106      * Small improvements:
   1107           + If neither the USERPROFILE nor the HOME environment variables
   1108             are set, then Unison will put its temporary commit log (called
   1109             DANGER.README) into the directory named by the UNISON
   1110             environment variable, if any; otherwise it will use C:.
   1111           + alternative set of values for fastcheck: yes = true; no =
   1112             false; default = auto.
   1113           + -silent implies -contactquietly
   1114      * Source code:
   1115           + Code reorganization and tidying. (Started breaking up some of
   1116             the basic utility modules so that the non-unison-specific
   1117             stuff can be made available for other projects.)
   1118           + several Makefile and docs changes (for release);
   1119           + further comments in "update.ml";
   1120           + connection information is not stored in global variables
   1121             anymore.
   1122 
   1123    Changes since 2.7.78:
   1124      * Small bugfix to textual user interface under Unix (to avoid leaving
   1125        the terminal in a bad state where it would not echo inputs after
   1126        Unison exited).
   1127 
   1128    Changes since 2.7.39:
   1129      * Improvements to the main web page (stable and beta version docs are
   1130        now both accessible).
   1131      * User manual revised.
   1132      * Added some new preferences:
   1133           + "sshcmd" and "rshcmd" for specifying paths to ssh and rsh
   1134             programs.
   1135           + "contactquietly" for suppressing the "contacting server"
   1136             message during Unison startup (under the graphical UI).
   1137      * Bug fixes:
   1138           + Fixed small bug in UI that neglected to change the displayed
   1139             column headers if loading a new profile caused the roots to
   1140             change.
   1141           + Fixed a bug that would put the text UI into an infinite loop
   1142             if it encountered a conflict when run in batch mode.
   1143           + Added some code to try to fix the display of non-Ascii
   1144             characters in filenames on Windows systems in the GTK UI.
   1145             (This code is currently untested--if you're one of the people
   1146             that had reported problems with display of non-ascii
   1147             filenames, we'd appreciate knowing if this actually fixes
   1148             things.)
   1149           + `-prefer/-force newer' works properly now. (The bug was
   1150             reported by Sebastian Urbaniak and Sean Fulton.)
   1151      * User interface and Unison behavior:
   1152           + Renamed `Proceed' to `Go' in the graphical UI.
   1153           + Added exit status for the textual user interface.
   1154           + Paths that are not synchronized because of conflicts or errors
   1155             during update detection are now noted in the log file.
   1156           + [END] messages in log now use a briefer format
   1157           + Changed the text UI startup sequence so that ./unison -ui text
   1158             will use the default profile instead of failing.
   1159           + Made some improvements to the error messages.
   1160           + Added some debugging messages to remote.ml.
   1161 
   1162    Changes since 2.7.7:
   1163      * Incorporated, once again, a multi-threaded transport sub-system. It
   1164        transfers several files at the same time, thereby making much more
   1165        effective use of available network bandwidth. Unlike the earlier
   1166        attempt, this time we do not rely on the native thread library of
   1167        OCaml. Instead, we implement a light-weight, non-preemptive
   1168        multi-thread library in OCaml directly. This version appears
   1169        stable.
   1170        Some adjustments to unison are made to accommodate the
   1171        multi-threaded version. These include, in particular, changes to
   1172        the user interface and logging, for example:
   1173           + Two log entries for each transferring task, one for the
   1174             beginning, one for the end.
   1175           + Suppressed warning messages against removing temp files left
   1176             by a previous unison run, because warning does not work nicely
   1177             under multi-threading. The temp file names are made less
   1178             likely to coincide with the name of a file created by the
   1179             user. They take the form
   1180             .#<filename>.<serial>.unison.tmp. [N.b. This was later changed
   1181             to .unison.<filename>.<serial>.unison.tmp.]
   1182      * Added a new command to the GTK user interface: pressing 'f' causes
   1183        Unison to start a new update detection phase, using as paths just
   1184        those paths that have been detected as changed and not yet marked
   1185        as successfully completed. Use this command to quickly restart
   1186        Unison on just the set of paths still needing attention after a
   1187        previous run.
   1188      * Made the ignorecase preference user-visible, and changed the
   1189        initialization code so that it can be manually set to true, even if
   1190        neither host is running Windows. (This may be useful, e.g., when
   1191        using Unison running on a Unix system with a FAT volume mounted.)
   1192      * Small improvements and bug fixes:
   1193           + Errors in preference files now generate fatal errors rather
   1194             than warnings at startup time. (I.e., you can't go on from
   1195             them.) Also, we fixed a bug that was preventing these warnings
   1196             from appearing in the text UI, so some users who have been
   1197             running (unsuspectingly) with garbage in their prefs files may
   1198             now get error reports.
   1199           + Error reporting for preference files now provides file name
   1200             and line number.
   1201           + More intelligible message in the case of identical change to
   1202             the same files: "Nothing to do: replicas have been changed
   1203             only in identical ways since last sync."
   1204           + Files with prefix '.#' excluded when scanning for preference
   1205             files.
   1206           + Rsync instructions are send directly instead of first
   1207             marshaled.
   1208           + Won't try forever to get the fingerprint of a continuously
   1209             changing file: unison will give up after certain number of
   1210             retries.
   1211           + Other bug fixes, including the one reported by Peter Selinger
   1212             (force=older preference not working).
   1213      * Compilation:
   1214           + Upgraded to the new OCaml 3.04 compiler, with the LablGtk
   1215             1.2.3 library (patched version used for compiling under
   1216             Windows).
   1217           + Added the option to compile unison on the Windows platform
   1218             with Cygwin GNU C compiler. This option only supports building
   1219             dynamically linked unison executables.
   1220 
   1221    Changes since 2.7.4:
   1222      * Fixed a silly (but debilitating) bug in the client startup
   1223        sequence.
   1224 
   1225    Changes since 2.7.1:
   1226      * Added addprefsto preference, which (when set) controls which
   1227        preference file new preferences (e.g. new ignore patterns) are
   1228        added to.
   1229      * Bug fix: read the initial connection header one byte at a time, so
   1230        that we don't block if the header is shorter than expected. (This
   1231        bug did not affect normal operation -- it just made it hard to tell
   1232        when you were trying to use Unison incorrectly with an old version
   1233        of the server, since it would hang instead of giving an error
   1234        message.)
   1235 
   1236    Changes since 2.6.59:
   1237      * Changed fastcheck from a boolean to a string preference. Its legal
   1238        values are yes (for a fast check), no (for a safe check), or
   1239        default (for a fast check--which also happens to be safe--when
   1240        running on Unix and a safe check when on Windows). The default is
   1241        default.
   1242      * Several preferences have been renamed for consistency. All
   1243        preference names are now spelled out in lowercase. For backward
   1244        compatibility, the old names still work, but they are not mentioned
   1245        in the manual any more.
   1246      * The temp files created by the 'diff' and 'merge' commands are now
   1247        named by prepending a new prefix to the file name, rather than
   1248        appending a suffix. This should avoid confusing diff/merge programs
   1249        that depend on the suffix to guess the type of the file contents.
   1250      * We now set the keepalive option on the server socket, to make sure
   1251        that the server times out if the communication link is unexpectedly
   1252        broken.
   1253      * Bug fixes:
   1254           + When updating small files, Unison now closes the destination
   1255             file.
   1256           + File permissions are properly updated when the file is behind
   1257             a followed link.
   1258           + Several other small fixes.
   1259 
   1260    Changes since 2.6.38:
   1261      * Major Windows performance improvement!
   1262        We've added a preference fastcheck that makes Unison look only at a
   1263        file's creation time and last-modified time to check whether it has
   1264        changed. This should result in a huge speedup when checking for
   1265        updates in large replicas.
   1266        When this switch is set, Unison will use file creation times as
   1267        'pseudo inode numbers' when scanning Windows replicas for updates,
   1268        instead of reading the full contents of every file. This may cause
   1269        Unison to miss propagating an update if the create time,
   1270        modification time, and length of the file are all unchanged by the
   1271        update (this is not easy to achieve, but it can be done). However,
   1272        Unison will never overwrite such an update with a change from the
   1273        other replica, since it always does a safe check for updates just
   1274        before propagating a change. Thus, it is reasonable to use this
   1275        switch most of the time and occasionally run Unison once with
   1276        fastcheck set to false, if you are worried that Unison may have
   1277        overlooked an update.
   1278        Warning: This change is has not yet been thoroughly field-tested.
   1279        If you set the fastcheck preference, pay careful attention to what
   1280        Unison is doing.
   1281      * New functionality: centralized backups and merging
   1282           + This version incorporates two pieces of major new
   1283             functionality, implemented by Sylvain Roy during a summer
   1284             internship at Penn: a centralized backup facility that keeps a
   1285             full backup of (selected files in) each replica, and a merging
   1286             feature that allows Unison to invoke an external file-merging
   1287             tool to resolve conflicting changes to individual files.
   1288           + Centralized backups:
   1289                o Unison now maintains full backups of the
   1290                  last-synchronized versions of (some of) the files in each
   1291                  replica; these function both as backups in the usual
   1292                  sense and as the "common version" when invoking external
   1293                  merge programs.
   1294                o The backed up files are stored in a directory
   1295                  /.unison/backup on each host. (The name of this directory
   1296                  can be changed by setting the environment variable
   1297                  UNISONBACKUPDIR.)
   1298                o The predicate backup controls which files are actually
   1299                  backed up: giving the preference 'backup = Path *' causes
   1300                  backing up of all files.
   1301                o Files are added to the backup directory whenever unison
   1302                  updates its archive. This means that
   1303                     # When unison reconstructs its archive from scratch
   1304                       (e.g., because of an upgrade, or because the archive
   1305                       files have been manually deleted), all files will be
   1306                       backed up.
   1307                     # Otherwise, each file will be backed up the first
   1308                       time unison propagates an update for it.
   1309                o The preference backupversions controls how many previous
   1310                  versions of each file are kept. The default is 2 (i.e.,
   1311                  the last synchronized version plus one backup).
   1312                o For backward compatibility, the backups preference is
   1313                  also still supported, but backup is now preferred.
   1314                o It is OK to manually delete files from the backup
   1315                  directory (or to throw away the directory itself). Before
   1316                  unison uses any of these files for anything important, it
   1317                  checks that its fingerprint matches the one that it
   1318                  expects.
   1319           + Merging:
   1320                o Both user interfaces offer a new 'merge' command, invoked
   1321                  by pressing 'm' (with a changed file selected).
   1322                o The actual merging is performed by an external program.
   1323                  The preferences merge and merge2 control how this program
   1324                  is invoked. If a backup exists for this file (see the
   1325                  backup preference), then the merge preference is used for
   1326                  this purpose; otherwise merge2 is used. In both cases,
   1327                  the value of the preference should be a string
   1328                  representing the command that should be passed to a shell
   1329                  to invoke the merge program. Within this string, the
   1330                  special substrings CURRENT1, CURRENT2, NEW, and OLD may
   1331                  appear at any point. Unison will substitute these as
   1332                  follows before invoking the command:
   1333                     # CURRENT1 is replaced by the name of the local copy
   1334                       of the file;
   1335                     # CURRENT2 is replaced by the name of a temporary
   1336                       file, into which the contents of the remote copy of
   1337                       the file have been transferred by Unison prior to
   1338                       performing the merge;
   1339                     # NEW is replaced by the name of a temporary file that
   1340                       Unison expects to be written by the merge program
   1341                       when it finishes, giving the desired new contents of
   1342                       the file; and
   1343                     # OLD is replaced by the name of the backed up copy of
   1344                       the original version of the file (i.e., its state at
   1345                       the end of the last successful run of Unison), if
   1346                       one exists (applies only to merge, not merge2).
   1347                  For example, on Unix systems setting the merge preference
   1348                  to
   1349    merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
   1350 
   1351                  will tell Unison to use the external diff3 program for
   1352                  merging.
   1353                  A large number of external merging programs are
   1354                  available. For example, emacs users may find the
   1355                  following convenient:
   1356     merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2"
   1357                nil "NEW")'
   1358     merge = emacs -q --eval '(ediff-merge-files-with-ancestor
   1359                "CURRENT1" "CURRENT2" "OLD" nil "NEW")'
   1360 
   1361                  (These commands are displayed here on two lines to avoid
   1362                  running off the edge of the page. In your preference
   1363                  file, each should be written on a single line.)
   1364                o If the external program exits without leaving any file at
   1365                  the path NEW, Unison considers the merge to have failed.
   1366                  If the merge program writes a file called NEW but exits
   1367                  with a non-zero status code, then Unison considers the
   1368                  merge to have succeeded but to have generated conflicts.
   1369                  In this case, it attempts to invoke an external editor so
   1370                  that the user can resolve the conflicts. The value of the
   1371                  editor preference controls what editor is invoked by
   1372                  Unison. The default is emacs.
   1373                o Please send us suggestions for other useful values of the
   1374                  merge2 and merge preferences - we'd like to give several
   1375                  examples in the manual.
   1376      * Smaller changes:
   1377           + When one preference file includes another, unison no longer
   1378             adds the suffix '.prf' to the included file by default. If a
   1379             file with precisely the given name exists in the .unison
   1380             directory, it will be used; otherwise Unison will add .prf, as
   1381             it did before. (This change means that included preference
   1382             files can be named blah.include instead of blah.prf, so that
   1383             unison will not offer them in its 'choose a preference file'
   1384             dialog.)
   1385           + For Linux systems, we now offer both a statically linked and a
   1386             dynamically linked executable. The static one is larger, but
   1387             will probably run on more systems, since it doesn't depend on
   1388             the same versions of dynamically linked library modules being
   1389             available.
   1390           + Fixed the force and prefer preferences, which were getting the
   1391             propagation direction exactly backwards.
   1392           + Fixed a bug in the startup code that would cause unison to
   1393             crash when the default profile (~/.unison/default.prf) does
   1394             not exist.
   1395           + Fixed a bug where, on the run when a profile is first created,
   1396             Unison would confusingly display the roots in reverse order in
   1397             the user interface.
   1398      * For developers:
   1399           + We've added a module dependency diagram to the source
   1400             distribution, in src/DEPENDENCIES.ps, to help new prospective
   1401             developers with navigating the code.
   1402 
   1403    Changes since 2.6.11:
   1404      * INCOMPATIBLE CHANGE: Archive format has changed.
   1405      * INCOMPATIBLE CHANGE: The startup sequence has been completely
   1406        rewritten and greatly simplified. The main user-visible change is
   1407        that the defaultpath preference has been removed. Its effect can be
   1408        approximated by using multiple profiles, with include directives to
   1409        incorporate common settings. All uses of defaultpath in existing
   1410        profiles should be changed to path.
   1411        Another change in startup behavior that will affect some users is
   1412        that it is no longer possible to specify roots both in the profile
   1413        and on the command line.
   1414        You can achieve a similar effect, though, by breaking your profile
   1415        into two:
   1416   default.prf =
   1417       root = blah
   1418       root = foo
   1419       include common
   1420 
   1421   common.prf =
   1422       <everything else>
   1423 
   1424        Now do
   1425   unison common root1 root2
   1426 
   1427        when you want to specify roots explicitly.
   1428      * The -prefer and -force options have been extended to allow users to
   1429        specify that files with more recent modtimes should be propagated,
   1430        writing either -prefer newer or -force newer. (For symmetry, Unison
   1431        will also accept -prefer older or -force older.) The -force
   1432        older/newer options can only be used when -times is also set.
   1433        The graphical user interface provides access to these facilities on
   1434        a one-off basis via the Actions menu.
   1435      * Names of roots can now be "aliased" to allow replicas to be
   1436        relocated without changing the name of the archive file where
   1437        Unison stores information between runs. (This feature is for
   1438        experts only. See the "Archive Files" section of the manual for
   1439        more information.)
   1440      * Graphical user-interface:
   1441           + A new command is provided in the Synchronization menu for
   1442             switching to a new profile without restarting Unison from
   1443             scratch.
   1444           + The GUI also supports one-key shortcuts for commonly used
   1445             profiles. If a profile contains a preference of the form 'key
   1446             = n', where n is a single digit, then pressing this key will
   1447             cause Unison to immediately switch to this profile and begin
   1448             synchronization again from scratch. (Any actions that may have
   1449             been selected for a set of changes currently being displayed
   1450             will be discarded.)
   1451           + Each profile may include a preference 'label = <string>'
   1452             giving a descriptive string that described the options
   1453             selected in this profile. The string is listed along with the
   1454             profile name in the profile selection dialog, and displayed in
   1455             the top-right corner of the main Unison window.
   1456      * Minor:
   1457           + Fixed a bug that would sometimes cause the 'diff' display to
   1458             order the files backwards relative to the main user interface.
   1459             (Thanks to Pascal Brisset for this fix.)
   1460           + On Unix systems, the graphical version of Unison will check
   1461             the DISPLAY variable and, if it is not set, automatically fall
   1462             back to the textual user interface.
   1463           + Synchronization paths (path preferences) are now matched
   1464             against the ignore preferences. So if a path is both specified
   1465             in a path preference and ignored, it will be skipped.
   1466           + Numerous other bugfixes and small improvements.
   1467 
   1468    Changes since 2.6.1:
   1469      * The synchronization of modification times has been disabled for
   1470        directories.
   1471      * Preference files may now include lines of the form include <name>,
   1472        which will cause name.prf to be read at that point.
   1473      * The synchronization of permission between Windows and Unix now
   1474        works properly.
   1475      * A binding CYGWIN=binmode in now added to the environment so that
   1476        the Cygwin port of OpenSSH works properly in a non-Cygwin context.
   1477      * The servercmd and addversionno preferences can now be used
   1478        together: -addversionno appends an appropriate -NNN to the server
   1479        command, which is found by using the value of the -servercmd
   1480        preference if there is one, or else just unison.
   1481      * Both '-pref=val' and '-pref val' are now allowed for boolean
   1482        values. (The former can be used to set a preference to false.)
   1483      * Lot of small bugs fixed.
   1484 
   1485    Changes since 2.5.31:
   1486      * The log preference is now set to true by default, since the log
   1487        file seems useful for most users.
   1488      * Several miscellaneous bugfixes (most involving symlinks).
   1489 
   1490    Changes since 2.5.25:
   1491      * INCOMPATIBLE CHANGE: Archive format has changed (again).
   1492      * Several significant bugs introduced in 2.5.25 have been fixed.
   1493 
   1494    Changes since 2.5.1:
   1495      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1496        synchronize your replicas before upgrading, to avoid spurious
   1497        conflicts. The first sync after upgrading will be slow.
   1498      * New functionality:
   1499           + Unison now synchronizes file modtimes, user-ids, and
   1500             group-ids.
   1501             These new features are controlled by a set of new preferences,
   1502             all of which are currently false by default.
   1503                o When the times preference is set to true, file
   1504                  modification times are propaged. (Because the
   1505                  representations of time may not have the same granularity
   1506                  on both replicas, Unison may not always be able to make
   1507                  the modtimes precisely equal, but it will get them as
   1508                  close as the operating systems involved allow.)
   1509                o When the owner preference is set to true, file ownership
   1510                  information is synchronized.
   1511                o When the group preference is set to true, group
   1512                  information is synchronized.
   1513                o When the numericIds preference is set to true, owner and
   1514                  group information is synchronized numerically. By
   1515                  default, owner and group numbers are converted to names
   1516                  on each replica and these names are synchronized. (The
   1517                  special user id 0 and the special group 0 are never
   1518                  mapped via user/group names even if this preference is
   1519                  not set.)
   1520           + Added an integer-valued preference perms that can be used to
   1521             control the propagation of permission bits. The value of this
   1522             preference is a mask indicating which permission bits should
   1523             be synchronized. It is set by default to 0o1777: all bits but
   1524             the set-uid and set-gid bits are synchronised (synchronizing
   1525             these latter bits can be a security hazard). If you want to
   1526             synchronize all bits, you can set the value of this preference
   1527             to -1.
   1528           + Added a log preference (default false), which makes Unison
   1529             keep a complete record of the changes it makes to the
   1530             replicas. By default, this record is written to a file called
   1531             unison.log in the user's home directory (the value of the HOME
   1532             environment variable). If you want it someplace else, set the
   1533             logfile preference to the full pathname you want Unison to
   1534             use.
   1535           + Added an ignorenot preference that maintains a set of patterns
   1536             for paths that should definitely not be ignored, whether or
   1537             not they match an ignore pattern. (That is, a path will now be
   1538             ignored iff it matches an ignore pattern and does not match
   1539             any ignorenot patterns.)
   1540      * User-interface improvements:
   1541           + Roots are now displayed in the user interface in the same
   1542             order as they were given on the command line or in the
   1543             preferences file.
   1544           + When the batch preference is set, the graphical user interface
   1545             no longer waits for user confirmation when it displays a
   1546             warning message: it simply pops up an advisory window with a
   1547             Dismiss button at the bottom and keeps on going.
   1548           + Added a new preference for controlling how many status
   1549             messages are printed during update detection: statusdepth
   1550             controls the maximum depth for paths on the local machine
   1551             (longer paths are not displayed, nor are non-directory paths).
   1552             The value should be an integer; default is 1.
   1553           + Removed the trace and silent preferences. They did not seem
   1554             very useful, and there were too many preferences for
   1555             controlling output in various ways.
   1556           + The text UI now displays just the default command (the one
   1557             that will be used if the user just types <return>) instead of
   1558             all available commands. Typing ? will print the full list of
   1559             possibilities.
   1560           + The function that finds the canonical hostname of the local
   1561             host (which is used, for example, in calculating the name of
   1562             the archive file used to remember which files have been
   1563             synchronized) normally uses the gethostname operating system
   1564             call. However, if the environment variable UNISONLOCALHOSTNAME
   1565             is set, its value will now be used instead. This makes it
   1566             easier to use Unison in situations where a machine's name
   1567             changes frequently (e.g., because it is a laptop and gets
   1568             moved around a lot).
   1569           + File owner and group are now displayed in the "detail window"
   1570             at the bottom of the screen, when unison is configured to
   1571             synchronize them.
   1572      * For hackers:
   1573           + Updated to Jacques Garrigue's new version of lablgtk, which
   1574             means we can throw away our local patched version.
   1575             If you're compiling the GTK version of unison from sources,
   1576             you'll need to update your copy of lablgtk to the developers
   1577             release. (Warning: installing lablgtk under Windows is
   1578             currently a bit challenging.)
   1579           + The TODO.txt file (in the source distribution) has been
   1580             cleaned up and reorganized. The list of pending tasks should
   1581             be much easier to make sense of, for people that may want to
   1582             contribute their programming energies. There is also a
   1583             separate file BUGS.txt for open bugs.
   1584           + The Tk user interface has been removed (it was not being
   1585             maintained and no longer compiles).
   1586           + The debug preference now prints quite a bit of additional
   1587             information that should be useful for identifying sources of
   1588             problems.
   1589           + The version number of the remote server is now checked right
   1590             away during the connection setup handshake, rather than later.
   1591             (Somebody sent a bug report of a server crash that turned out
   1592             to come from using inconsistent versions: better to check this
   1593             earlier and in a way that can't crash either client or
   1594             server.)
   1595           + Unison now runs correctly on 64-bit architectures (e.g. Alpha
   1596             linux). We will not be distributing binaries for these
   1597             architectures ourselves (at least for a while) but if someone
   1598             would like to make them available, we'll be glad to provide a
   1599             link to them.
   1600      * Bug fixes:
   1601           + Pattern matching (e.g. for ignore) is now case-insensitive
   1602             when Unison is in case-insensitive mode (i.e., when one of the
   1603             replicas is on a windows machine).
   1604           + Some people had trouble with mysterious failures during
   1605             propagation of updates, where files would be falsely reported
   1606             as having changed during synchronization. This should be
   1607             fixed.
   1608           + Numerous smaller fixes.
   1609 
   1610    Changes since 2.4.1:
   1611      * Added a number of 'sorting modes' for the user interface. By
   1612        default, conflicting changes are displayed at the top, and the rest
   1613        of the entries are sorted in alphabetical order. This behavior can
   1614        be changed in the following ways:
   1615           + Setting the sortnewfirst preference to true causes newly
   1616             created files to be displayed before changed files.
   1617           + Setting sortbysize causes files to be displayed in increasing
   1618             order of size.
   1619           + Giving the preference sortfirst=<pattern> (where <pattern> is
   1620             a path descriptor in the same format as 'ignore' and 'follow'
   1621             patterns, causes paths matching this pattern to be displayed
   1622             first.
   1623           + Similarly, giving the preference sortlast=<pattern> causes
   1624             paths matching this pattern to be displayed last.
   1625        The sorting preferences are described in more detail in the user
   1626        manual. The sortnewfirst and sortbysize flags can also be accessed
   1627        from the 'Sort' menu in the graphical user interface.
   1628      * Added two new preferences that can be used to change unison's
   1629        fundamental behavior to make it more like a mirroring tool instead
   1630        of a synchronizer.
   1631           + Giving the preference prefer with argument <root> (by adding
   1632             -prefer <root> to the command line or prefer=<root>) to your
   1633             profile) means that, if there is a conflict, the contents of
   1634             <root> should be propagated to the other replica (with no
   1635             questions asked). Non-conflicting changes are treated as
   1636             usual.
   1637           + Giving the preference force with argument <root> will make
   1638             unison resolve all differences in favor of the given root,
   1639             even if it was the other replica that was changed.
   1640        These options should be used with care! (More information is
   1641        available in the manual.)
   1642      * Small changes:
   1643           + Changed default answer to 'Yes' in all two-button dialogs in
   1644             the graphical interface (this seems more intuitive).
   1645           + The rsync preference has been removed (it was used to activate
   1646             rsync compression for file transfers, but rsync compression is
   1647             now enabled by default).
   1648           + In the text user interface, the arrows indicating which
   1649             direction changes are being propagated are printed differently
   1650             when the user has overridden Unison's default recommendation
   1651             (====> instead of ---->). This matches the behavior of the
   1652             graphical interface, which displays such arrows in a different
   1653             color.
   1654           + Carriage returns (Control-M's) are ignored at the ends of
   1655             lines in profiles, for Windows compatibility.
   1656           + All preferences are now fully documented in the user manual.
   1657 
   1658    Changes since 2.3.12:
   1659      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1660        synchronize your replicas before upgrading, to avoid spurious
   1661        conflicts. The first sync after upgrading will be slow.
   1662      * New/improved functionality:
   1663           + A new preference -sortbysize controls the order in which
   1664             changes are displayed to the user: when it is set to true, the
   1665             smallest changed files are displayed first. (The default
   1666             setting is false.)
   1667           + A new preference -sortnewfirst causes newly created files to
   1668             be listed before other updates in the user interface.
   1669           + We now allow the ssh protocol to specify a port.
   1670           + Incompatible change: The unison: protocol is deprecated, and
   1671             we added file: and socket:. You may have to modify your
   1672             profiles in the .unison directory. If a replica is specified
   1673             without an explicit protocol, we now assume it refers to a
   1674             file. (Previously "//saul/foo" meant to use SSH to connect to
   1675             saul, then access the foo directory. Now it means to access
   1676             saul via a remote file mechanism such as samba; the old effect
   1677             is now achieved by writing ssh://saul/foo.)
   1678           + Changed the startup sequence for the case where roots are
   1679             given but no profile is given on the command line. The new
   1680             behavior is to use the default profile (creating it if it does
   1681             not exist), and temporarily override its roots. The manual
   1682             claimed that this case would work by reading no profile at
   1683             all, but AFAIK this was never true.
   1684           + In all user interfaces, files with conflicts are always listed
   1685             first
   1686           + A new preference 'sshversion' can be used to control which
   1687             version of ssh should be used to connect to the server. Legal
   1688             values are 1 and 2. (Default is empty, which will make unison
   1689             use whatever version of ssh is installed as the default 'ssh'
   1690             command.)
   1691           + The situation when the permissions of a file was updated the
   1692             same on both side is now handled correctly (we used to report
   1693             a spurious conflict)
   1694      * Improvements for the Windows version:
   1695           + The fact that filenames are treated case-insensitively under
   1696             Windows should now be handled correctly. The exact behavior is
   1697             described in the cross-platform section of the manual.
   1698           + It should be possible to synchronize with Windows shares,
   1699             e.g., //host/drive/path.
   1700           + Workarounds to the bug in syncing root directories in Windows.
   1701             The most difficult thing to fix is an ocaml bug: Unix.opendir
   1702             fails on c: in some versions of Windows.
   1703      * Improvements to the GTK user interface (the Tk interface is no
   1704        longer being maintained):
   1705           + The UI now displays actions differently (in blue) when they
   1706             have been explicitly changed by the user from Unison's default
   1707             recommendation.
   1708           + More colorful appearance.
   1709           + The initial profile selection window works better.
   1710           + If any transfers failed, a message to this effect is displayed
   1711             along with 'Synchronization complete' at the end of the
   1712             transfer phase (in case they may have scrolled off the top).
   1713           + Added a global progress meter, displaying the percentage of
   1714             total bytes that have been transferred so far.
   1715      * Improvements to the text user interface:
   1716           + The file details will be displayed automatically when a
   1717             conflict is been detected.
   1718           + when a warning is generated (e.g. for a temporary file left
   1719             over from a previous run of unison) Unison will no longer wait
   1720             for a response if it is running in -batch mode.
   1721           + The UI now displays a short list of possible inputs each time
   1722             it waits for user interaction.
   1723           + The UI now quits immediately (rather than looping back and
   1724             starting the interaction again) if the user presses 'q' when
   1725             asked whether to propagate changes.
   1726           + Pressing 'g' in the text user interface will proceed
   1727             immediately with propagating updates, without asking any more
   1728             questions.
   1729      * Documentation and installation changes:
   1730           + The manual now includes a FAQ, plus sections on common
   1731             problems and on tricks contributed by users.
   1732           + Both the download page and the download directory explicitly
   1733             say what are the current stable and beta-test version numbers.
   1734           + The OCaml sources for the up-to-the-minute developers' version
   1735             (not guaranteed to be stable, or even to compile, at any given
   1736             time!) are now available from the download page.
   1737           + Added a subsection to the manual describing cross-platform
   1738             issues (case conflicts, illegal filenames)
   1739      * Many small bug fixes and random improvements.
   1740 
   1741    Changes since 2.3.1:
   1742      * Several bug fixes. The most important is a bug in the rsync module
   1743        that would occasionally cause change propagation to fail with a
   1744        'rename' error.
   1745 
   1746    Changes since 2.2:
   1747      * The multi-threaded transport system is now disabled by default. (It
   1748        is not stable enough yet.)
   1749      * Various bug fixes.
   1750      * A new experimental feature:
   1751        The final component of a -path argument may now be the wildcard
   1752        specifier *. When Unison sees such a path, it expands this path on
   1753        the client into into the corresponding list of paths by listing the
   1754        contents of that directory.
   1755        Note that if you use wildcard paths from the command line, you will
   1756        probably need to use quotes or a backslash to prevent the * from
   1757        being interpreted by your shell.
   1758        If both roots are local, the contents of the first one will be used
   1759        for expanding wildcard paths. (Nb: this is the first one after the
   1760        canonization step - i.e., the one that is listed first in the user
   1761        interface - not the one listed first on the command line or in the
   1762        preferences file.)
   1763 
   1764    Changes since 2.1:
   1765      * The transport subsystem now includes an implementation by Sylvain
   1766        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
   1767        protocol. This protocol achieves much faster transfers when only a
   1768        small part of a large file has been changed by sending just diffs.
   1769        This feature is mainly helpful for transfers over slow links--on
   1770        fast local area networks it can actually degrade performance--so we
   1771        have left it off by default. Start unison with the -rsync option
   1772        (or put rsync=true in your preferences file) to turn it on.
   1773      * "Progress bars" are now displayed during remote file transfers,
   1774        showing what percentage of each file has been transferred so far.
   1775      * The version numbering scheme has changed. New releases will now be
   1776        have numbers like 2.2.30, where the second component is incremented
   1777        on every significant public release and the third component is the
   1778        "patch level."
   1779      * Miscellaneous improvements to the GTK-based user interface.
   1780      * The manual is now available in PDF format.
   1781      * We are experimenting with using a multi-threaded transport
   1782        subsystem to transfer several files at the same time, making much
   1783        more effective use of available network bandwidth. This feature is
   1784        not completely stable yet, so by default it is disabled in the
   1785        release version of Unison.
   1786        If you want to play with the multi-threaded version, you'll need to
   1787        recompile Unison from sources (as described in the documentation),
   1788        setting the THREADS flag in Makefile.OCaml to true. Make sure that
   1789        your OCaml compiler has been installed with the -with-pthreads
   1790        configuration option. (You can verify this by checking whether the
   1791        file threads/threads.cma in the OCaml standard library directory
   1792        contains the string -lpthread near the end.)
   1793 
   1794    Changes since 1.292:
   1795      * Reduced memory footprint (this is especially important during the
   1796        first run of unison, where it has to gather information about all
   1797        the files in both repositories).
   1798      * Fixed a bug that would cause the socket server under NT to fail
   1799        after the client exits.
   1800      * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK
   1801        interface (to avoid hitting them accidentally).
   1802 
   1803    Changes since 1.231:
   1804      * Tunneling over ssh is now supported in the Windows version. See the
   1805        installation section of the manual for detailed instructions.
   1806      * The transport subsystem now includes an implementation of the rsync
   1807        protocol, built by Sylvain Gommier and Norman Ramsey. This protocol
   1808        achieves much faster transfers when only a small part of a large
   1809        file has been changed by sending just diffs. The rsync feature is
   1810        off by default in the current version. Use the -rsync switch to
   1811        turn it on. (Nb. We still have a lot of tuning to do: you may not
   1812        notice much speedup yet.)
   1813      * We're experimenting with a multi-threaded transport subsystem,
   1814        written by Jerome Vouillon. The downloadable binaries are still
   1815        single-threaded: if you want to try the multi-threaded version,
   1816        you'll need to recompile from sources. (Say make THREADS=true.)
   1817        Native thread support from the compiler is required. Use the option
   1818        -threads N to select the maximal number of concurrent threads
   1819        (default is 5). Multi-threaded and single-threaded clients/servers
   1820        can interoperate.
   1821      * A new GTK-based user interface is now available, thanks to Jacques
   1822        Garrigue. The Tk user interface still works, but we'll be shifting
   1823        development effort to the GTK interface from now on.
   1824      * OCaml 3.00 is now required for compiling Unison from sources. The
   1825        modules uitk and myfileselect have been changed to use labltk
   1826        instead of camltk. To compile the Tk interface in Windows, you must
   1827        have ocaml-3.00 and tk8.3. When installing tk8.3, put it in c:\Tcl
   1828        rather than the suggested c:\Program Files\Tcl, and be sure to
   1829        install the headers and libraries (which are not installed by
   1830        default).
   1831      * Added a new -addversionno switch, which causes unison to use
   1832        unison-<currentversionnumber> instead of just unison as the remote
   1833        server command. This allows multiple versions of unison to coexist
   1834        conveniently on the same server: whichever version is run on the
   1835        client, the same version will be selected on the server.
   1836 
   1837    Changes since 1.219:
   1838      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1839        synchronize your replicas before upgrading, to avoid spurious
   1840        conflicts. The first sync after upgrading will be slow.
   1841      * This version fixes several annoying bugs, including:
   1842           + Some cases where propagation of file permissions was not
   1843             working.
   1844           + umask is now ignored when creating directories
   1845           + directories are create writable, so that a read-only directory
   1846             and its contents can be propagated.
   1847           + Handling of warnings generated by the server.
   1848           + Synchronizing a path whose parent is not a directory on both
   1849             sides is now flagged as erroneous.
   1850           + Fixed some bugs related to symnbolic links and nonexistent
   1851             roots.
   1852                o When a change (deletion or new contents) is propagated
   1853                  onto a 'follow'ed symlink, the file pointed to by the
   1854                  link is now changed. (We used to change the link itself,
   1855                  which doesn't fit our assertion that 'follow' means the
   1856                  link is completely invisible)
   1857                o When one root did not exist, propagating the other root
   1858                  on top of it used to fail, because unison could not
   1859                  calculate the working directory into which to write
   1860                  changes. This should be fixed.
   1861      * A human-readable timestamp has been added to Unison's archive
   1862        files.
   1863      * The semantics of Path and Name regular expressions now correspond
   1864        better.
   1865      * Some minor improvements to the text UI (e.g. a command for going
   1866        back to previous items)
   1867      * The organization of the export directory has changed -- should be
   1868        easier to find / download things now.
   1869 
   1870    Changes since 1.200:
   1871      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1872        synchronize your replicas before upgrading, to avoid spurious
   1873        conflicts. The first sync after upgrading will be slow.
   1874      * This version has not been tested extensively on Windows.
   1875      * Major internal changes designed to make unison safer to run at the
   1876        same time as the replicas are being changed by the user.
   1877      * Internal performance improvements.
   1878 
   1879    Changes since 1.190:
   1880      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1881        synchronize your replicas before upgrading, to avoid spurious
   1882        conflicts. The first sync after upgrading will be slow.
   1883      * A number of internal functions have been changed to reduce the
   1884        amount of memory allocation, especially during the first
   1885        synchronization. This should help power users with very big
   1886        replicas.
   1887      * Reimplementation of low-level remote procedure call stuff, in
   1888        preparation for adding rsync-like smart file transfer in a later
   1889        release.
   1890      * Miscellaneous bug fixes.
   1891 
   1892    Changes since 1.180:
   1893      * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you
   1894        synchronize your replicas before upgrading, to avoid spurious
   1895        conflicts. The first sync after upgrading will be slow.
   1896      * Fixed some small bugs in the interpretation of ignore patterns.
   1897      * Fixed some problems that were preventing the Windows version from
   1898        working correctly when click-started.
   1899      * Fixes to treatment of file permissions under Windows, which were
   1900        causing spurious reports of different permissions when
   1901        synchronizing between windows and unix systems.
   1902      * Fixed one more non-tail-recursive list processing function, which
   1903        was causing stack overflows when synchronizing very large replicas.
   1904 
   1905    Changes since 1.169:
   1906      * The text user interface now provides commands for ignoring files.
   1907      * We found and fixed some more non-tail-recursive list processing
   1908        functions. Some power users have reported success with very large
   1909        replicas.
   1910      * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored
   1911        automatically. If you want to ignore such files, put an appropriate
   1912        ignore pattern in your profile.
   1913      * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has
   1914        changed. Instead of putting a line of the form
   1915                  ignore = <regexp>
   1916 
   1917        in your profile (.unison/default.prf), you should put:
   1918                  ignore = Regex <regexp>
   1919 
   1920        Moreover, two other styles of pattern are also recognized:
   1921                  ignore = Name <name>
   1922 
   1923        matches any path in which one component matches <name>, while
   1924                  ignore = Path <path>
   1925 
   1926        matches exactly the path <path>.
   1927        Standard "globbing" conventions can be used in <name> and <path>:
   1928           + a ? matches any single character except /
   1929           + a * matches any sequence of characters not including /
   1930           + [xyz] matches any character from the set {x, y, z }
   1931           + {a,bb,ccc} matches any one of a, bb, or ccc.
   1932        See the user manual for some examples.
   1933 
   1934    Changes since 1.146:
   1935      * Some users were reporting stack overflows when synchronizing huge
   1936        directories. We found and fixed some non-tail-recursive list
   1937        processing functions, which we hope will solve the problem. Please
   1938        give it a try and let us know.
   1939      * Major additions to the documentation.
   1940 
   1941    Changes since 1.142:
   1942      * Major internal tidying and many small bugfixes.
   1943      * Major additions to the user manual.
   1944      * Unison can now be started with no arguments - it will prompt
   1945        automatically for the name of a profile file containing the roots
   1946        to be synchronized. This makes it possible to start the graphical
   1947        UI from a desktop icon.
   1948      * Fixed a small bug where the text UI on NT was raising a 'no such
   1949        signal' exception.
   1950 
   1951    Changes since 1.139:
   1952      * The precompiled windows binary in the last release was compiled
   1953        with an old OCaml compiler, causing propagation of permissions not
   1954        to work (and perhaps leading to some other strange behaviors we've
   1955        heard reports about). This has been corrected. If you're using
   1956        precompiled binaries on Windows, please upgrade.
   1957      * Added a -debug command line flag, which controls debugging of
   1958        various modules. Say -debug XXX to enable debug tracing for module
   1959        XXX, or -debug all to turn on absolutely everything.
   1960      * Fixed a small bug where the text UI on NT was raising a 'no such
   1961        signal' exception.
   1962 
   1963    Changes since 1.111:
   1964      * INCOMPATIBLE CHANGE: The names and formats of the preference files
   1965        in the .unison directory have changed. In particular:
   1966           + the file "prefs" should be renamed to default.prf
   1967           + the contents of the file "ignore" should be merged into
   1968             default.prf. Each line of the form REGEXP in ignore should
   1969             become a line of the form ignore = REGEXP in default.prf.
   1970      * Unison now handles permission bits and symbolic links. See the
   1971        manual for details.
   1972      * You can now have different preference files in your .unison
   1973        directory. If you start unison like this
   1974              unison profilename
   1975 
   1976        (i.e. with just one "anonymous" command-line argument), then the
   1977        file ~/.unison/profilename.prf will be loaded instead of
   1978        default.prf.
   1979      * Some improvements to terminal handling in the text user interface
   1980      * Added a switch -killServer that terminates the remote server
   1981        process when the unison client is shutting down, even when using
   1982        sockets for communication. (By default, a remote server created
   1983        using ssh/rsh is terminated automatically, while a socket server is
   1984        left running.)
   1985      * When started in 'socket server' mode, unison prints 'server
   1986        started' on stderr when it is ready to accept connections. (This
   1987        may be useful for scripts that want to tell when a socket-mode
   1988        server has finished initialization.)
   1989      * We now make a nightly mirror of our current internal development
   1990        tree, in case anyone wants an up-to-the-minute version to hack
   1991        around with.
   1992      * Added a file CONTRIB with some suggestions for how to help us make
   1993        Unison better.