Sophie

Sophie

distrib > Fedora > 16 > x86_64 > media > updates-src > by-pkgid > c153d5a35faad43991b254773ba500be > files > 4

unison240-2.40.102-1.fc16.src.rpm

diff -up unison-2.40.63/strings.ml.orig unison-2.40.63/strings.ml
--- unison-2.40.63/strings.ml.orig	2012-01-22 12:05:03.953273614 +0100
+++ unison-2.40.63/strings.ml	2012-01-22 12:05:39.599904881 +0100
@@ -1,2 +1,4468 @@
-(* Dummy strings.ml *)
-let docs = []
+(* DO NOT MODIFY.
+   This file has been automatically generated, see docs.ml. *)
+
+let docs =
+    ("about", ("About Unison", 
+     "Unison File Synchronizer\n\
+      Version 2.40.69\n\
+      \n\
+      "))
+::
+    ("", ("Overview", 
+     "\n\
+      \032  Unison is a file-synchronization tool for Unix and Windows. It allows\n\
+      \032  two replicas of a collection of files and directories to be stored on\n\
+      \032  different hosts (or different disks on the same host), modified\n\
+      \032  separately, and then brought up to date by propagating the changes in\n\
+      \032  each replica to the other.\n\
+      \n\
+      \032  Unison shares a number of features with tools such as configuration\n\
+      \032  management packages (CVS (http://www.cyclic.com/), PRCS\n\
+      \032  (http://www.XCF.Berkeley.EDU/~jmacd/prcs.html), etc.), distributed\n\
+      \032  filesystems (Coda (http://www.coda.cs.cmu.edu/), etc.), uni-directional\n\
+      \032  mirroring utilities (rsync (http://samba.anu.edu.au/rsync/), etc.), and\n\
+      \032  other synchronizers (Intellisync (http://www.pumatech.com), Reconcile\n\
+      \032  (http://www.merl.com/reports/TR99-14/), etc). However, there are\n\
+      \032  several points where it differs:\n\
+      \032    * Unison runs on both Windows (95, 98, NT, 2k, and XP) and Unix (OSX,\n\
+      \032      Solaris, Linux, etc.) systems. Moreover, Unison works across\n\
+      \032      platforms, allowing you to synchronize a Windows laptop with a Unix\n\
+      \032      server, for example.\n\
+      \032    * Unlike a distributed filesystem, Unison is a user-level program:\n\
+      \032      there is no need to modify the kernel or to have superuser\n\
+      \032      privileges on either host.\n\
+      \032    * Unlike simple mirroring or backup utilities, Unison can deal with\n\
+      \032      updates to both replicas of a distributed directory structure.\n\
+      \032      Updates that do not conflict are propagated automatically.\n\
+      \032      Conflicting updates are detected and displayed.\n\
+      \032    * Unison works between any pair of machines connected to the\n\
+      \032      internet, communicating over either a direct socket link or\n\
+      \032      tunneling over an encrypted ssh connection. It is careful with\n\
+      \032      network bandwidth, and runs well over slow links such as PPP\n\
+      \032      connections. Transfers of small updates to large files are\n\
+      \032      optimized using a compression protocol similar to rsync.\n\
+      \032    * Unison has a clear and precise specification, described below.\n\
+      \032    * Unison is resilient to failure. It is careful to leave the replicas\n\
+      \032      and its own private structures in a sensible state at all times,\n\
+      \032      even in case of abnormal termination or communication failures.\n\
+      \032    * Unison is free; full source code is available under the GNU Public\n\
+      \032      License.\n\
+      \n\
+      "))
+::
+    ("", ("Preface", 
+     "\n\
+      "))
+::
+    ("people", ("People", 
+     "People\n\
+      \n\
+      \032  Benjamin Pierce (http://www.cis.upenn.edu/~bcpierce/) leads the Unison\n\
+      \032  project. The current version of Unison was designed and implemented by\n\
+      \032  Trevor Jim (http://www.research.att.com/~trevor/), Benjamin Pierce\n\
+      \032  (http://www.cis.upenn.edu/~bcpierce/), and Jerome Vouillon\n\
+      \032  (http://www.pps.jussieu.fr/~vouillon/), with Alan Schmitt\n\
+      \032  (http://alan.petitepomme.net/), Malo Denielou, Zhe Yang\n\
+      \032  (http://www.brics.dk/~zheyang/), Sylvain Gommier, and Matthieu Goulay.\n\
+      \032  The Mac user interface was started by Trevor Jim and enormously\n\
+      \032  improved by Ben Willmore. Our implementation of the rsync\n\
+      \032  (http://samba.org/rsync/) protocol was built by Norman Ramsey\n\
+      \032  (http://www.eecs.harvard.edu/~nr/) and Sylvain Gommier. It is based on\n\
+      \032  Andrew Tridgell (http://samba.anu.edu.au/~tridge/)'s thesis work\n\
+      \032  (http://samba.anu.edu.au/~tridge/phd_thesis.pdf) and inspired by his\n\
+      \032  rsync (http://samba.org/rsync/) utility. The mirroring and merging\n\
+      \032  functionality was implemented by Sylvain Roy, improved by Malo\n\
+      \032  Denielou, and improved yet further by Stephane Lescuyer. Jacques\n\
+      \032  Garrigue (http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/) contributed\n\
+      \032  the original Gtk version of the user interface; the Gtk2 version was\n\
+      \032  built by Stephen Tse. Sundar Balasubramaniam helped build a prototype\n\
+      \032  implementation of an earlier synchronizer in Java. Insik Shin\n\
+      \032  (http://www.cis.upenn.edu/~ishin/) and Insup Lee\n\
+      \032  (http://www.cis.upenn.edu/~lee/) contributed design ideas to this\n\
+      \032  implementation. Cedric Fournet\n\
+      \032  (http://research.microsoft.com/~fournet/) contributed to an even\n\
+      \032  earlier prototype.\n\
+      \n\
+      "))
+::
+    ("lists", ("Mailing Lists and Bug Reporting", 
+     "Mailing Lists and Bug Reporting\n\
+      \n\
+      Mailing Lists:\n\
+      \n\
+      \032  Moderated mailing lists are available for bug reporting, announcements\n\
+      \032  of new versions, discussions among users, and discussions among\n\
+      \032  developers. See\n\
+      \n\
+      \032    http://www.cis.upenn.edu/~bcpierce/unison/lists.html\n\
+      \n\
+      \032  for more information.\n\
+      \n\
+      "))
+::
+    ("status", ("Development Status", 
+     "Development Status\n\
+      \n\
+      \032  Unison is no longer under active development as a research project.\n\
+      \032  (Our research efforts are now focused on a follow-on project called\n\
+      \032  Harmony, described at http://www.cis.upenn.edu/~bcpierce/harmony.) At\n\
+      \032  this point, there is no one whose job it is to maintain Unison, fix\n\
+      \032  bugs, or answer questions.\n\
+      \n\
+      \032  However, the original developers are all still using Unison daily. It\n\
+      \032  will continue to be maintained and supported for the foreseeable\n\
+      \032  future, and we will occasionally release new versions with bug fixes,\n\
+      \032  small improvements, and contributed patches.\n\
+      \n\
+      \032  Reports of bugs affecting correctness or safety are of interest to many\n\
+      \032  people and will generally get high priority. Other bug reports will be\n\
+      \032  looked at as time permits. Bugs should be reported to the users list at\n\
+      \032  unison-users@yahoogroups.com (mailto:unison-users@yahoogroups.com).\n\
+      \n\
+      \032  Feature requests are welcome, but will probably just be added to the\n\
+      \032  ever-growing todo list. They should also be sent to\n\
+      \032  unison-users@yahoogroups.com (mailto:unison-users@yahoogroups.com).\n\
+      \n\
+      \032  Patches are even more welcome. They should be sent to\n\
+      \032  unison-hackers@lists.seas.upenn.edu\n\
+      \032  (mailto:unison-hackers@lists.seas.upenn.edu). (Since safety and\n\
+      \032  robustness are Unison's most important properties, patches will be held\n\
+      \032  to high standards of clear design and clean coding.) If you want to\n\
+      \032  contribute to Unison, start by downloading the developer tarball from\n\
+      \032  the download page. For some details on how the code is organized, etc.,\n\
+      \032  see the file CONTRIB.\n\
+      \n\
+      "))
+::
+    ("copying", ("Copying", 
+     "Copying\n\
+      \n\
+      \032  This file is part of Unison.\n\
+      \n\
+      \032  Unison is free software: you can redistribute it and/or modify it under\n\
+      \032  the terms of the GNU General Public License as published by the Free\n\
+      \032  Software Foundation, either version 3 of the License, or (at your\n\
+      \032  option) any later version.\n\
+      \n\
+      \032  Unison is distributed in the hope that it will be useful, but WITHOUT\n\
+      \032  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\
+      \032  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n\
+      \032  for more details.\n\
+      \n\
+      \032  The GNU Public License can be found at http://www.gnu.org/licenses. A\n\
+      \032  copy is also included in the Unison source distribution in the file\n\
+      \032  COPYING.\n\
+      \n\
+      "))
+::
+    ("ack", ("Acknowledgements", 
+     "Acknowledgements\n\
+      \n\
+      \032  Work on Unison has been supported by the National Science Foundation\n\
+      \032  under grants CCR-9701826 and ITR-0113226, Principles and Practice of\n\
+      \032  Synchronization, and by University of Pennsylvania's Institute for\n\
+      \032  Research in Cognitive Science (IRCS).\n\
+      \n\
+      "))
+::
+    ("install", ("Installation", 
+     "Installation\n\
+      \n\
+      \032  Unison is designed to be easy to install. The following sequence of\n\
+      \032  steps should get you a fully working installation in a few minutes. If\n\
+      \032  you run into trouble, you may find the suggestions on the Frequently\n\
+      \032  Asked Questions page\n\
+      \032  (http://www.cis.upenn.edu/~bcpierce/unison/faq.html) helpful. Pre-built\n\
+      \032  binaries are available for a variety of platforms.\n\
+      \n\
+      \032  Unison can be used with either of two user interfaces:\n\
+      \032   1. a simple textual interface, suitable for dumb terminals (and\n\
+      \032      running from scripts), and\n\
+      \032   2. a more sophisticated grapical interface, based on Gtk2 (on\n\
+      \032      Linux/Windows) or the native UI framework (on OSX).\n\
+      \n\
+      \032  You will need to install a copy of Unison on every machine that you\n\
+      \032  want to synchronize. However, you only need the version with a\n\
+      \032  graphical user interface (if you want a GUI at all) on the machine\n\
+      \032  where you're actually going to display the interface (the CLIENT\n\
+      \032  machine). Other machines that you synchronize with can get along just\n\
+      \032  fine with the textual version.\n\
+      \n\
+      Downloading Unison\n\
+      \n\
+      \032  The Unison download site lives under\n\
+      \032  http://www.cis.upenn.edu/~bcpierce/unison.\n\
+      \n\
+      \032  If a pre-built binary of Unison is available for the client machine's\n\
+      \032  architecture, just download it and put it somewhere in your search path\n\
+      \032  (if you're going to invoke it from the command line) or on your desktop\n\
+      \032  (if you'll be click-starting it).\n\
+      \n\
+      \032  The executable file for the graphical version (with a name including\n\
+      \032  gtkui) actually provides both interfaces: the graphical one appears by\n\
+      \032  default, while the textual interface can be selected by including -ui\n\
+      \032  text on the command line. The textui executable provides just the\n\
+      \032  textual interface.\n\
+      \n\
+      \032  If you don't see a pre-built executable for your architecture, you'll\n\
+      \032  need to build it yourself. See the section \"Building Unison\" . There\n\
+      \032  are also a small number of contributed ports to other architectures\n\
+      \032  that are not maintained by us. See the Contributed Ports page\n\
+      \032  (http://www.cis.upenn.edu/~bcpierce/unison/download.html) to check\n\
+      \032  what's available.\n\
+      \n\
+      \032  Check to make sure that what you have downloaded is really executable.\n\
+      \032  Either click-start it, or type \"unison -version\" at the command line.\n\
+      \n\
+      \032  Unison can be used in three different modes: with different directories\n\
+      \032  on a single machine, with a remote machine over a direct socket\n\
+      \032  connection, or with a remote machine using ssh for authentication and\n\
+      \032  secure transfer. If you intend to use the last option, you may need to\n\
+      \032  install ssh; see the section \"Installing Ssh\" .\n\
+      \n\
+      Running Unison\n\
+      \n\
+      \032  Once you've got Unison installed on at least one system, read the\n\
+      \032  section \"Tutorial\" of the user manual (or type \"unison -doc tutorial\")\n\
+      \032  for instructions on how to get started.\n\
+      \n\
+      Upgrading\n\
+      \n\
+      \032  Upgrading to a new version of Unison is as simple as throwing away the\n\
+      \032  old binary and installing the new one.\n\
+      \n\
+      \032  Before upgrading, it is a good idea to run the old version one last\n\
+      \032  time, to make sure all your replicas are completely synchronized. A new\n\
+      \032  version of Unison will sometimes introduce a different format for the\n\
+      \032  archive files used to remember information about the previous state of\n\
+      \032  the replicas. In this case, the old archive will be ignored (not\n\
+      \032  deleted -- if you roll back to the previous version of Unison, you will\n\
+      \032  find the old archives intact), which means that any differences between\n\
+      \032  the replicas will show up as conflicts that need to be resolved\n\
+      \032  manually.\n\
+      \n\
+      Building Unison from Scratch\n\
+      \n\
+      \032  If a pre-built image is not available, you will need to compile it from\n\
+      \032  scratch; the sources are available from the same place as the binaries.\n\
+      \n\
+      \032  In principle, Unison should work on any platform to which OCaml has\n\
+      \032  been ported and on which the Unix module is fully implemented. It has\n\
+      \032  been tested on many flavors of Windows (98, NT, 2000, XP) and Unix (OS\n\
+      \032  X, Solaris, Linux, FreeBSD), and on both 32- and 64-bit architectures.\n\
+      \n\
+      Unix\n\
+      \n\
+      \032  You'll need the Objective Caml compiler (version 3.11.2 or later),\n\
+      \032  which is available from http://caml.inria.fr. Building and installing\n\
+      \032  OCaml on Unix systems is very straightforward; just follow the\n\
+      \032  instructions in the distribution. You'll probably want to build the\n\
+      \032  native-code compiler in addition to the bytecode compiler, as Unison\n\
+      \032  runs much faster when compiled to native code, but this is not\n\
+      \032  absolutely necessary. (Quick start: on many systems, the following\n\
+      \032  sequence of commands will get you a working and installed compiler:\n\
+      \032  first do make world opt, then su to root and do make install.)\n\
+      \n\
+      \032  You'll also need the GNU make utility, standard on many Unix systems.\n\
+      \032  (Type \"make -version\" to check that you've got the GNU version.)\n\
+      \n\
+      \032  Once you've got OCaml installed, grab a copy of the Unison sources,\n\
+      \032  unzip and untar them, change to the new \"unison\" directory, and type\n\
+      \032  \"make UISTYLE=text.\" The result should be an executable file called\n\
+      \032  \"unison\". Type \"./unison\" to make sure the program is executable. You\n\
+      \032  should get back a usage message.\n\
+      \n\
+      \032  If you want to build the graphical user interface, you will need to\n\
+      \032  install two additional things:\n\
+      \032    * The Gtk2 libraries. These areavailable from http://www.gtk.org and\n\
+      \032      are standard on many Unix installations.\n\
+      \032    * The lablgtk2 OCaml library. Grab the developers' tarball from\n\
+      \n\
+      \032    http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html,\n\
+      \032      untar it, and follow the instructions to build and install it.\n\
+      \032      (Quick start: make configure, then make, then make opt, then su and\n\
+      \032      make install.)\n\
+      \n\
+      \032  Now build unison. If your search paths are set up correctly, simply\n\
+      \032  typing make again should build a unison executable with a Gtk2\n\
+      \032  graphical interface. (In previous releases of Unison, it was necessary\n\
+      \032  to add UISTYLE=gtk2 to the 'make' command above. This requirement has\n\
+      \032  been removed: the makefile should detect automatically when lablgtk2 is\n\
+      \032  present and set this flag automatically.)\n\
+      \n\
+      \032  Put the unison executable somewhere in your search path, either by\n\
+      \032  adding the Unison directory to your PATH variable or by copying the\n\
+      \032  executable to some standard directory where executables are stored.\n\
+      \n\
+      Mac OS X\n\
+      \n\
+      \032  To build the text-only user interface, follow the instructions above\n\
+      \032  for building on Unix systems. You should do this first, even if you are\n\
+      \032  also planning on building the GUI, just to make sure it works.\n\
+      \n\
+      \032  To build the basic GUI version, you'll first need to download and\n\
+      \032  install the XCode developer tools from Apple. Once this is done, just\n\
+      \032  type make UISTYLE=macnew in the src directory, and if things go well\n\
+      \032  you should get an application that you can move from\n\
+      \032  uimacnew/build/Default/Unison.app to wherever you want it.\n\
+      \n\
+      \032  There is also an experimental GUI with a somewhat smoother look and\n\
+      \032  feel. To compile this one (once you've got the basic one working),\n\
+      \032  proceed as follows:\n\
+      \032   1. Go to the uimacnew09 directory and double-click the file\n\
+      \032      BWToolkit.ibplugin.\n\
+      \032   2. Go back up to the src directory and type make UISTYLE=macnew09.\n\
+      \032   3. You should get an application built for you at\n\
+      \032      uimacnew09/build/Default/Unison.app.\n\
+      \n\
+      Windows\n\
+      \n\
+      \032  Although the binary distribution should work on any version of Windows,\n\
+      \032  some people may want to build Unison from scratch on those systems too.\n\
+      \n\
+      Bytecode version:\n\
+      \n\
+      \032  The simpler but slower compilation option to build a Unison executable\n\
+      \032  is to build a bytecode version. You need first install Windows version\n\
+      \032  of the OCaml compiler (version 3.07 or later, available from\n\
+      \032  http://caml.inria.fr). Then grab a copy of Unison sources and type\n\
+      \032      make NATIVE=false\n\
+      \n\
+      \032  to compile the bytecode. The result should be an executable file called\n\
+      \032  unison.exe.\n\
+      \n\
+      Native version:\n\
+      \n\
+      \032  Building a more efficient, native version of Unison on Windows requires\n\
+      \032  a little more work. See the file INSTALL.win32 in the source code\n\
+      \032  distribution.\n\
+      \n\
+      Installation Options\n\
+      \n\
+      \032  The Makefile in the distribution includes several switches that can be\n\
+      \032  used to control how Unison is built. Here are the most useful ones:\n\
+      \032    * Building with NATIVE=true uses the native-code OCaml compiler,\n\
+      \032      yielding an executable that will run quite a bit faster. We use\n\
+      \032      this for building distribution versions.\n\
+      \032    * Building with make DEBUGGING=true generates debugging symbols.\n\
+      \032    * Building with make STATIC=true generates a (mostly) statically\n\
+      \032      linked executable. We use this for building distribution versions,\n\
+      \032      for portability.\n\
+      \n\
+      "))
+::
+    ("tutorial", ("Tutorial", 
+     "Tutorial\n\
+      \n\
+      Preliminaries\n\
+      \n\
+      \032  Unison can be used with either of two user interfaces:\n\
+      \032   1. a straightforward textual interface and\n\
+      \032   2. a more sophisticated graphical interface\n\
+      \n\
+      \032  The textual interface is more convenient for running from scripts and\n\
+      \032  works on dumb terminals; the graphical interface is better for most\n\
+      \032  interactive use. For this tutorial, you can use either. If you are\n\
+      \032  running Unison from the command line, just typing unison will select\n\
+      \032  either the text or the graphical interface, depending on which has been\n\
+      \032  selected as default when the executable you are running was built. You\n\
+      \032  can force the text interface even if graphical is the default by adding\n\
+      \032  -ui text. The other command-line arguments to both versions are\n\
+      \032  identical.\n\
+      \n\
+      \032  The graphical version can also be run directly by clicking on its icon,\n\
+      \032  but this may require a little set-up (see the section \"Click-starting\n\
+      \032  Unison\" ). For this tutorial, we assume that you're starting it from\n\
+      \032  the command line.\n\
+      \n\
+      \032  Unison can synchronize files and directories on a single machine, or\n\
+      \032  between two machines on a network. (The same program runs on both\n\
+      \032  machines; the only difference is which one is responsible for\n\
+      \032  displaying the user interface.) If you're only interested in a\n\
+      \032  single-machine setup, then let's call that machine the CLIENT . If\n\
+      \032  you're synchronizing two machines, let's call them CLIENT and SERVER .\n\
+      \n\
+      Local Usage\n\
+      \n\
+      \032  Let's get the client machine set up first and see how to synchronize\n\
+      \032  two directories on a single machine.\n\
+      \n\
+      \032  Follow the instructions in the section \"Installation\" to either\n\
+      \032  download or build an executable version of Unison, and install it\n\
+      \032  somewhere on your search path. (If you just want to use the textual\n\
+      \032  user interface, download the appropriate textui binary. If you just\n\
+      \032  want to the graphical interface--or if you will use both interfaces\n\
+      \032  [the gtkui binary actually has both compiled in]--then download the\n\
+      \032  gtkui binary.)\n\
+      \n\
+      \032  Create a small test directory a.tmp containing a couple of files and/or\n\
+      \032  subdirectories, e.g.,\n\
+      \032      mkdir a.tmp\n\
+      \032      touch a.tmp/a a.tmp/b\n\
+      \032      mkdir a.tmp/d\n\
+      \032      touch a.tmp/d/f\n\
+      \n\
+      \032  Copy this directory to b.tmp:\n\
+      \032      cp -r a.tmp b.tmp\n\
+      \n\
+      \032  Now try synchronizing a.tmp and b.tmp. (Since they are identical,\n\
+      \032  synchronizing them won't propagate any changes, but Unison will\n\
+      \032  remember the current state of both directories so that it will be able\n\
+      \032  to tell next time what has changed.) Type:\n\
+      \032      unison a.tmp b.tmp\n\
+      \n\
+      \032  (You may need to add -ui text, depending how your unison binary was\n\
+      \032  built.)\n\
+      \n\
+      \032  Textual Interface:\n\
+      \032    * You should see a message notifying you that all the files are\n\
+      \032      actually equal and then get returned to the command line.\n\
+      \n\
+      \032  Graphical Interface:\n\
+      \032    * You should get a big empty window with a message at the bottom\n\
+      \032      notifying you that all files are identical. Choose the Exit item\n\
+      \032      from the File menu to get back to the command line.\n\
+      \n\
+      \032  Next, make some changes in a.tmp and/or b.tmp. For example:\n\
+      \032       rm a.tmp/a\n\
+      \032       echo \"Hello\" > a.tmp/b\n\
+      \032       echo \"Hello\" > b.tmp/b\n\
+      \032       date > b.tmp/c\n\
+      \032       echo \"Hi there\" > a.tmp/d/h\n\
+      \032       echo \"Hello there\" > b.tmp/d/h\n\
+      \n\
+      \032  Run Unison again:\n\
+      \032      unison a.tmp b.tmp\n\
+      \n\
+      \032  This time, the user interface will display only the files that have\n\
+      \032  changed. If a file has been modified in just one replica, then it will\n\
+      \032  be displayed with an arrow indicating the direction that the change\n\
+      \032  needs to be propagated. For example,\n\
+      \032                <---  new file   c  [f]\n\
+      \n\
+      \032  indicates that the file c has been modified only in the second replica,\n\
+      \032  and that the default action is therefore to propagate the new version\n\
+      \032  to the first replica. To follow Unison's recommendation, press the \"f\"\n\
+      \032  at the prompt.\n\
+      \n\
+      \032  If both replicas are modified and their contents are different, then\n\
+      \032  the changes are in conflict: <-?-> is displayed to indicate that Unison\n\
+      \032  needs guidance on which replica should override the other.\n\
+      \032    new file  <-?->  new file   d/h  []\n\
+      \n\
+      \032  By default, neither version will be propagated and both replicas will\n\
+      \032  remain as they are.\n\
+      \n\
+      \032  If both replicas have been modified but their new contents are the same\n\
+      \032  (as with the file b), then no propagation is necessary and nothing is\n\
+      \032  shown. Unison simply notes that the file is up to date.\n\
+      \n\
+      \032  These display conventions are used by both versions of the user\n\
+      \032  interface. The only difference lies in the way in which Unison's\n\
+      \032  default actions are either accepted or overridden by the user.\n\
+      \n\
+      \032  Textual Interface:\n\
+      \032    * The status of each modified file is displayed, in turn. When the\n\
+      \032      copies of a file in the two replicas are not identical, the user\n\
+      \032      interface will ask for instructions as to how to propagate the\n\
+      \032      change. If some default action is indicated (by an arrow), you can\n\
+      \032      simply press Return to go on to the next changed file. If you want\n\
+      \032      to do something different with this file, press \"<\" or \">\" to force\n\
+      \032      the change to be propagated from right to left or from left to\n\
+      \032      right, or else press \"/\" to skip this file and leave both replicas\n\
+      \032      alone. When it reaches the end of the list of modified files,\n\
+      \032      Unison will ask you one more time whether it should proceed with\n\
+      \032      the updates that have been selected.\n\
+      \032      When Unison stops to wait for input from the user, pressing \"?\"\n\
+      \032      will always give a list of possible responses and their meanings.\n\
+      \n\
+      \032  Graphical Interface:\n\
+      \032    * The main window shows all the files that have been modified in\n\
+      \032      either a.tmp or b.tmp. To override a default action (or to select\n\
+      \032      an action in the case when there is no default), first select the\n\
+      \032      file, either by clicking on its name or by using the up- and\n\
+      \032      down-arrow keys. Then press either the left-arrow or \"<\" key (to\n\
+      \032      cause the version in b.tmp to propagate to a.tmp) or the\n\
+      \032      right-arrow or \">\" key (which makes the a.tmp version override\n\
+      \032      b.tmp).\n\
+      \032      Every keyboard command can also be invoked from the menus at the\n\
+      \032      top of the user interface. (Conversely, each menu item is annotated\n\
+      \032      with its keyboard equivalent, if it has one.)\n\
+      \032      When you are satisfied with the directions for the propagation of\n\
+      \032      changes as shown in the main window, click the \"Go\" button to set\n\
+      \032      them in motion. A check sign will be displayed next to each\n\
+      \032      filename when the file has been dealt with.\n\
+      \n\
+      Remote Usage\n\
+      \n\
+      \032  Next, we'll get Unison set up to synchronize replicas on two different\n\
+      \032  machines.\n\
+      \n\
+      \032  Follow the instructions in the Installation section to download or\n\
+      \032  build an executable version of Unison on the server machine, and\n\
+      \032  install it somewhere on your search path. (It doesn't matter whether\n\
+      \032  you install the textual or graphical version, since the copy of Unison\n\
+      \032  on the server doesn't need to display any user interface at all.)\n\
+      \n\
+      \032  It is important that the version of Unison installed on the server\n\
+      \032  machine is the same as the version of Unison on the client machine. But\n\
+      \032  some flexibility on the version of Unison at the client side can be\n\
+      \032  achieved by using the -addversionno option; see the section\n\
+      \032  \"Preferences\" .\n\
+      \n\
+      \032  Now there is a decision to be made. Unison provides two methods for\n\
+      \032  communicating between the client and the server:\n\
+      \032    * Remote shell method: To use this method, you must have some way of\n\
+      \032      invoking remote commands on the server from the client's command\n\
+      \032      line, using a facility such as ssh. This method is more convenient\n\
+      \032      (since there is no need to manually start a \"unison server\" process\n\
+      \032      on the server) and also more secure (especially if you use ssh).\n\
+      \032    * Socket method: This method requires only that you can get TCP\n\
+      \032      packets from the client to the server and back. A draconian\n\
+      \032      firewall can prevent this, but otherwise it should work anywhere.\n\
+      \n\
+      \032  Decide which of these you want to try, and continue with the section\n\
+      \032  \"Remote Shell Method\" or the section \"Socket Method\" , as appropriate.\n\
+      \n\
+      Remote Shell Method\n\
+      \n\
+      \032  The standard remote shell facility on Unix systems is ssh, which\n\
+      \032  provides the same functionality as the older rsh but much better\n\
+      \032  security. Ssh is available from http://www.openssh.org. See\n\
+      \032  section [1]A.2 for installation instructions for the Windows version.\n\
+      \n\
+      \032  Running ssh requires some coordination between the client and server\n\
+      \032  machines to establish that the client is allowed to invoke commands on\n\
+      \032  the server; please refer to the ssh documentation for information on\n\
+      \032  how to set this up. The examples in this section use ssh, but you can\n\
+      \032  substitute rsh for ssh if you wish.\n\
+      \n\
+      \032  First, test that we can invoke Unison on the server from the client.\n\
+      \032  Typing\n\
+      \032       ssh remotehostname unison -version\n\
+      \n\
+      \032  should print the same version information as running\n\
+      \032       unison -version\n\
+      \n\
+      \032  locally on the client. If remote execution fails, then either something\n\
+      \032  is wrong with your ssh setup (e.g., \"permission denied\") or else the\n\
+      \032  search path that's being used when executing commands on the server\n\
+      \032  doesn't contain the unison executable (e.g., \"command not found\").\n\
+      \n\
+      \032  Create a test directory a.tmp in your home directory on the client\n\
+      \032  machine.\n\
+      \n\
+      \032  Test that the local unison client can start and connect to the remote\n\
+      \032  server. Type\n\
+      \032         unison -testServer a.tmp ssh://remotehostname/a.tmp\n\
+      \n\
+      \032  Now cd to your home directory and type:\n\
+      \032         unison a.tmp ssh://remotehostname/a.tmp\n\
+      \n\
+      \032  The result should be that the entire directory a.tmp is propagated from\n\
+      \032  the client to your home directory on the server.\n\
+      \n\
+      \032  After finishing the first synchronization, change a few files and try\n\
+      \032  synchronizing again. You should see similar results as in the local\n\
+      \032  case.\n\
+      \n\
+      \032  If your user name on the server is not the same as on the client, you\n\
+      \032  need to specify it on the command line:\n\
+      \032         unison a.tmp ssh://username@remotehostname/a.tmp\n\
+      \n\
+      \032  Notes:\n\
+      \032    * If you want to put a.tmp some place other than your home directory\n\
+      \032      on the remote host, you can give an absolute path for it by adding\n\
+      \032      an extra slash between remotehostname and the beginning of the\n\
+      \032      path:\n\
+      \032         unison a.tmp ssh://remotehostname//absolute/path/to/a.tmp\n\
+      \n\
+      \032    * You can give an explicit path for the unison executable on the\n\
+      \032      server by using the command-line option \"-servercmd\n\
+      \032      /full/path/name/of/unison\" or adding\n\
+      \032      \"servercmd=/full/path/name/of/unison\" to your profile (see the\n\
+      \032      section \"Profile\" ). Similarly, you can specify a explicit path for\n\
+      \032      the ssh program using the \"-sshcmd\" option. Extra arguments can be\n\
+      \032      passed to ssh by setting the -sshargs preference.\n\
+      \n\
+      Socket Method\n\
+      \n\
+      \032    Warning: The socket method is insecure: not only are the texts of\n\
+      \032    your changes transmitted over the network in unprotected form, it is\n\
+      \032    also possible for anyone in the world to connect to the server\n\
+      \032    process and read out the contents of your filesystem! (Of course, to\n\
+      \032    do this they must understand the protocol that Unison uses to\n\
+      \032    communicate between client and server, but all they need for this is\n\
+      \032    a copy of the Unison sources.) The socket method is provided only\n\
+      \032    for expert users with specific needs; everyone else should use the\n\
+      \032    ssh method.\n\
+      \n\
+      \032  To run Unison over a socket connection, you must start a Unison daemon\n\
+      \032  process on the server. This process runs continuously, waiting for\n\
+      \032  connections over a given socket from client machines running Unison and\n\
+      \032  processing their requests in turn.\n\
+      \n\
+      \032  To start the daemon, type\n\
+      \032      unison -socket NNNN\n\
+      \n\
+      \032  on the server machine, where NNNN is the socket number that the daemon\n\
+      \032  should listen on for connections from clients. (NNNN can be any large\n\
+      \032  number that is not being used by some other program; if NNNN is already\n\
+      \032  in use, Unison will exit with an error message.) Note that paths\n\
+      \032  specified by the client will be interpreted relative to the directory\n\
+      \032  in which you start the server process; this behavior is different from\n\
+      \032  the ssh case, where the path is relative to your home directory on the\n\
+      \032  server.\n\
+      \n\
+      \032  Create a test directory a.tmp in your home directory on the client\n\
+      \032  machine. Now type:\n\
+      \032      unison a.tmp socket://remotehostname:NNNN/a.tmp\n\
+      \n\
+      \032  The result should be that the entire directory a.tmp is propagated from\n\
+      \032  the client to the server (a.tmp will be created on the server in the\n\
+      \032  directory that the server was started from). After finishing the first\n\
+      \032  synchronization, change a few files and try synchronizing again. You\n\
+      \032  should see similar results as in the local case.\n\
+      \n\
+      \032  Since the socket method is not used by many people, its functionality\n\
+      \032  is rather limited. For example, the server can only deal with one\n\
+      \032  client at a time.\n\
+      \n\
+      Using Unison for All Your Files\n\
+      \n\
+      \032  Once you are comfortable with the basic operation of Unison, you may\n\
+      \032  find yourself wanting to use it regularly to synchronize your commonly\n\
+      \032  used files. There are several possible ways of going about this:\n\
+      \032   1. Synchronize your whole home directory, using the Ignore facility\n\
+      \032      (see the section \"Ignore\" ) to avoid synchronizing temporary files\n\
+      \032      and things that only belong on one host.\n\
+      \032   2. Create a subdirectory called shared (or current, or whatever) in\n\
+      \032      your home directory on each host, and put all the files you want to\n\
+      \032      synchronize into this directory.\n\
+      \032   3. Create a subdirectory called shared (or current, or whatever) in\n\
+      \032      your home directory on each host, and put links to all the files\n\
+      \032      you want to synchronize into this directory. Use the follow\n\
+      \032      preference (see the section \"Symbolic Links\" ) to make Unison treat\n\
+      \032      these links as transparent.\n\
+      \032   4. Make your home directory the root of the synchronization, but tell\n\
+      \032      Unison to synchronize only some of the files and subdirectories\n\
+      \032      within it on any given run. This can be accomplished by using the\n\
+      \032      -path switch on the command line:\n\
+      \032      unison /home/username ssh://remotehost//home/username -path shared\n\
+      \n\
+      \032      The -path option can be used as many times as needed, to\n\
+      \032      synchronize several files or subdirectories:\n\
+      \032      unison /home/username ssh://remotehost//home/username \\\n\
+      \032         -path shared \\\n\
+      \032         -path pub \\\n\
+      \032         -path .netscape/bookmarks.html\n\
+      \n\
+      \032      These -path arguments can also be put in your preference file. See\n\
+      \032      the section \"Preferences\" for an example.\n\
+      \n\
+      \032  Most people find that they only need to maintain a profile (or\n\
+      \032  profiles) on one of the hosts that they synchronize, since Unison is\n\
+      \032  always initiated from this host. (For example, if you're synchronizing\n\
+      \032  a laptop with a fileserver, you'll probably always run Unison on the\n\
+      \032  laptop.) This is a bit different from the usual situation with\n\
+      \032  asymmetric mirroring programs like rdist, where the mirroring operation\n\
+      \032  typically needs to be initiated from the machine with the most recent\n\
+      \032  changes. the section \"Profile\" covers the syntax of Unison profiles,\n\
+      \032  together with some sample profiles.\n\
+      \n\
+      \032  Some tips on improving Unison's performance can be found on the\n\
+      \032  Frequently Asked Questions page\n\
+      \032  (http://www.cis.upenn.edu/~bcpierce/unison/faq.html).\n\
+      \n\
+      Using Unison to Synchronize More Than Two Machines\n\
+      \n\
+      \032  Unison is designed for synchronizing pairs of replicas. However, it is\n\
+      \032  possible to use it to keep larger groups of machines in sync by\n\
+      \032  performing multiple pairwise synchronizations.\n\
+      \n\
+      \032  If you need to do this, the most reliable way to set things up is to\n\
+      \032  organize the machines into a \"star topology,\" with one machine\n\
+      \032  designated as the \"hub\" and the rest as \"spokes,\" and with each spoke\n\
+      \032  machine synchronizing only with the hub. The big advantage of the star\n\
+      \032  topology is that it eliminates the possibility of confusing \"spurious\n\
+      \032  conflicts\" arising from the fact that a separate archive is maintained\n\
+      \032  by Unison for every pair of hosts that it synchronizes.\n\
+      \n\
+      Going Further\n\
+      \n\
+      \032  On-line documentation for the various features of Unison can be\n\
+      \032  obtained either by typing\n\
+      \032       unison -doc topics\n\
+      \n\
+      \032  at the command line, or by selecting the Help menu in the graphical\n\
+      \032  user interface. The same information is also available in a typeset\n\
+      \032  User's Manual (HTML or PostScript format) through\n\
+      \032  http://www.cis.upenn.edu/~bcpierce/unison.\n\
+      \n\
+      \032  If you use Unison regularly, you should subscribe to one of the mailing\n\
+      \032  lists, to receive announcements of new versions. See the section\n\
+      \032  \"Mailing Lists\" .\n\
+      \n\
+      "))
+::
+    ("basics", ("Basic Concepts", 
+     "Basic Concepts\n\
+      \n\
+      \032  To understand how Unison works, it is necessary to discuss a few\n\
+      \032  straightforward concepts. These concepts are developed more rigorously\n\
+      \032  and at more length in a number of papers, available at\n\
+      \032  http://www.cis.upenn.edu/~bcpierce/papers. But the informal\n\
+      \032  presentation here should be enough for most users.\n\
+      \n\
+      Roots\n\
+      \n\
+      \032  A replica's root tells Unison where to find a set of files to be\n\
+      \032  synchronized, either on the local machine or on a remote host. For\n\
+      \032  example,\n\
+      \032     relative/path/of/root\n\
+      \n\
+      \032  specifies a local root relative to the directory where Unison is\n\
+      \032  started, while\n\
+      \032     /absolute/path/of/root\n\
+      \n\
+      \032  specifies a root relative to the top of the local filesystem,\n\
+      \032  independent of where Unison is running. Remote roots can begin with\n\
+      \032  ssh://, rsh:// to indicate that the remote server should be started\n\
+      \032  with rsh or ssh:\n\
+      \032     ssh://remotehost//absolute/path/of/root\n\
+      \032     rsh://user@remotehost/relative/path/of/root\n\
+      \n\
+      \032  If the remote server is already running (in the socket mode), then the\n\
+      \032  syntax\n\
+      \032     socket://remotehost:portnum//absolute/path/of/root\n\
+      \032     socket://remotehost:portnum/relative/path/of/root\n\
+      \n\
+      \032  is used to specify the hostname and the port that the client Unison\n\
+      \032  should use to contact it.\n\
+      \n\
+      \032  The syntax for roots is based on that of URIs (described in RFC 2396).\n\
+      \032  The full grammar is:\n\
+      \032 replica ::= [protocol:]//[user@][host][:port][/path]\n\
+      \032          |  path\n\
+      \n\
+      \032 protocol ::= file\n\
+      \032           |  socket\n\
+      \032           |  ssh\n\
+      \032           |  rsh\n\
+      \n\
+      \032 user ::= [-_a-zA-Z0-9]+\n\
+      \n\
+      \032 host ::= [-_a-zA-Z0-9.]+\n\
+      \n\
+      \032 port ::= [0-9]+\n\
+      \n\
+      \032  When path is given without any protocol prefix, the protocol is assumed\n\
+      \032  to be file:. Under Windows, it is possible to synchronize with a remote\n\
+      \032  directory using the file: protocol over the Windows Network\n\
+      \032  Neighborhood. For example,\n\
+      \032      unison foo //host/drive/bar\n\
+      \n\
+      \032  synchronizes the local directory foo with the directory drive:\\bar on\n\
+      \032  the machine host, provided that host is accessible via Network\n\
+      \032  Neighborhood. When the file: protocol is used in this way, there is no\n\
+      \032  need for a Unison server to be running on the remote host. However,\n\
+      \032  running Unison this way is only a good idea if the remote host is\n\
+      \032  reached by a very fast network connection, since the full contents of\n\
+      \032  every file in the remote replica will have to be transferred to the\n\
+      \032  local machine to detect updates.\n\
+      \n\
+      \032  The names of roots are canonized by Unison before it uses them to\n\
+      \032  compute the names of the corresponding archive files, so\n\
+      \032  //saul//home/bcpierce/common and //saul.cis.upenn.edu/common will be\n\
+      \032  recognized as the same replica under different names.\n\
+      \n\
+      Paths\n\
+      \n\
+      \032  A path refers to a point within a set of files being synchronized; it\n\
+      \032  is specified relative to the root of the replica.\n\
+      \n\
+      \032  Formally, a path is just a sequence of names, separated by /. Note that\n\
+      \032  the path separator character is always a forward slash, no matter what\n\
+      \032  operating system Unison is running on. Forward slashes are converted to\n\
+      \032  backslashes as necessary when paths are converted to filenames in the\n\
+      \032  local filesystem on a particular host. (For example, suppose that we\n\
+      \032  run Unison on a Windows system, synchronizing the local root c:\\pierce\n\
+      \032  with the root ssh://saul.cis.upenn.edu/home/bcpierce on a Unix server.\n\
+      \032  Then the path current/todo.txt refers to the file\n\
+      \032  c:\\pierce\\current\\todo.txt on the client and\n\
+      \032  /home/bcpierce/current/todo.txt on the server.)\n\
+      \n\
+      \032  The empty path (i.e., the empty sequence of names) denotes the whole\n\
+      \032  replica. Unison displays the empty path as \"[root].\"\n\
+      \n\
+      \032  If p is a path and q is a path beginning with p, then q is said to be a\n\
+      \032  descendant of p. (Each path is also a descendant of itself.)\n\
+      \n\
+      What is an Update?\n\
+      \n\
+      \032  The contents of a path p in a particular replica could be a file, a\n\
+      \032  directory, a symbolic link, or absent (if p does not refer to anything\n\
+      \032  at all in that replica). More specifically:\n\
+      \032    * If p refers to an ordinary file, then the contents of p are the\n\
+      \032      actual contents of this file (a string of bytes) plus the current\n\
+      \032      permission bits of the file.\n\
+      \032    * If p refers to a symbolic link, then the contents of p are just the\n\
+      \032      string specifying where the link points.\n\
+      \032    * If p refers to a directory, then the contents of p are just the\n\
+      \032      token \"DIRECTORY\" plus the current permission bits of the\n\
+      \032      directory.\n\
+      \032    * If p does not refer to anything in this replica, then the contents\n\
+      \032      of p are the token \"ABSENT.\"\n\
+      \n\
+      \032  Unison keeps a record of the contents of each path after each\n\
+      \032  successful synchronization of that path (i.e., it remembers the\n\
+      \032  contents at the last moment when they were the same in the two\n\
+      \032  replicas).\n\
+      \n\
+      \032  We say that a path is updated (in some replica) if its current contents\n\
+      \032  are different from its contents the last time it was successfully\n\
+      \032  synchronized. Note that whether a path is updated has nothing to do\n\
+      \032  with its last modification time--Unison considers only the contents\n\
+      \032  when determining whether an update has occurred. This means that\n\
+      \032  touching a file without changing its contents will not be recognized as\n\
+      \032  an update. A file can even be changed several times and then changed\n\
+      \032  back to its original contents; as long as Unison is only run at the end\n\
+      \032  of this process, no update will be recognized.\n\
+      \n\
+      \032  What Unison actually calculates is a close approximation to this\n\
+      \032  definition; see the section \"Caveats and Shortcomings\" .\n\
+      \n\
+      What is a Conflict?\n\
+      \n\
+      \032  A path is said to be conflicting if the following conditions all hold:\n\
+      \032   1. it has been updated in one replica,\n\
+      \032   2. it or any of its descendants has been updated in the other replica,\n\
+      \032      and\n\
+      \032   3. its contents in the two replicas are not identical.\n\
+      \n\
+      Reconciliation\n\
+      \n\
+      \032  Unison operates in several distinct stages:\n\
+      \032   1. On each host, it compares its archive file (which records the state\n\
+      \032      of each path in the replica when it was last synchronized) with the\n\
+      \032      current contents of the replica, to determine which paths have been\n\
+      \032      updated.\n\
+      \032   2. It checks for \"false conflicts\" -- paths that have been updated on\n\
+      \032      both replicas, but whose current values are identical. These paths\n\
+      \032      are silently marked as synchronized in the archive files in both\n\
+      \032      replicas.\n\
+      \032   3. It displays all the updated paths to the user. For updates that do\n\
+      \032      not conflict, it suggests a default action (propagating the new\n\
+      \032      contents from the updated replica to the other). Conflicting\n\
+      \032      updates are just displayed. The user is given an opportunity to\n\
+      \032      examine the current state of affairs, change the default actions\n\
+      \032      for nonconflicting updates, and choose actions for conflicting\n\
+      \032      updates.\n\
+      \032   4. It performs the selected actions, one at a time. Each action is\n\
+      \032      performed by first transferring the new contents to a temporary\n\
+      \032      file on the receiving host, then atomically moving them into place.\n\
+      \032   5. It updates its archive files to reflect the new state of the\n\
+      \032      replicas.\n\
+      \n\
+      "))
+::
+    ("failures", ("Invariants", 
+     "Invariants\n\
+      \n\
+      \032  Given the importance and delicacy of the job that it performs, it is\n\
+      \032  important to understand both what a synchronizer does under normal\n\
+      \032  conditions and what can happen under unusual conditions such as system\n\
+      \032  crashes and communication failures.\n\
+      \n\
+      \032  Unison is careful to protect both its internal state and the state of\n\
+      \032  the replicas at every point in this process. Specifically, the\n\
+      \032  following guarantees are enforced:\n\
+      \032    * At every moment, each path in each replica has either (1) its\n\
+      \032      original contents (i.e., no change at all has been made to this\n\
+      \032      path), or (2) its correct final contents (i.e., the value that the\n\
+      \032      user expected to be propagated from the other replica).\n\
+      \032    * At every moment, the information stored on disk about Unison's\n\
+      \032      private state can be either (1) unchanged, or (2) updated to\n\
+      \032      reflect those paths that have been successfully synchronized.\n\
+      \n\
+      \032  The upshot is that it is safe to interrupt Unison at any time, either\n\
+      \032  manually or accidentally. [Caveat: the above is almost true there are\n\
+      \032  occasionally brief periods where it is not (and, because of shortcoming\n\
+      \032  of the Posix filesystem API, cannot be); in particular, when it is\n\
+      \032  copying a file onto a directory or vice versa, it must first move the\n\
+      \032  original contents out of the way. If Unison gets interrupted during one\n\
+      \032  of these periods, some manual cleanup may be required. In this case, a\n\
+      \032  file called DANGER.README will be left in your home directory,\n\
+      \032  containing information about the operation that was interrupted. The\n\
+      \032  next time you try to run Unison, it will notice this file and warn you\n\
+      \032  about it.]\n\
+      \n\
+      \032  If an interruption happens while it is propagating updates, then there\n\
+      \032  may be some paths for which an update has been propagated but which\n\
+      \032  have not been marked as synchronized in Unison's archives. This is no\n\
+      \032  problem: the next time Unison runs, it will detect changes to these\n\
+      \032  paths in both replicas, notice that the contents are now equal, and\n\
+      \032  mark the paths as successfully updated when it writes back its private\n\
+      \032  state at the end of this run.\n\
+      \n\
+      \032  If Unison is interrupted, it may sometimes leave temporary working\n\
+      \032  files (with suffix .tmp) in the replicas. It is safe to delete these\n\
+      \032  files. Also, if the backups flag is set, Unison will leave around old\n\
+      \032  versions of files that it overwrites, with names like\n\
+      \032  file.0.unison.bak. These can be deleted safely when they are no longer\n\
+      \032  wanted.\n\
+      \n\
+      \032  Unison is not bothered by clock skew between the different hosts on\n\
+      \032  which it is running. It only performs comparisons between timestamps\n\
+      \032  obtained from the same host, and the only assumption it makes about\n\
+      \032  them is that the clock on each system always runs forward.\n\
+      \n\
+      \032  If Unison finds that its archive files have been deleted (or that the\n\
+      \032  archive format has changed and they cannot be read, or that they don't\n\
+      \032  exist because this is the first run of Unison on these particular\n\
+      \032  roots), it takes a conservative approach: it behaves as though the\n\
+      \032  replicas had both been completely empty at the point of the last\n\
+      \032  synchronization. The effect of this is that, on the first run, files\n\
+      \032  that exist in only one replica will be propagated to the other, while\n\
+      \032  files that exist in both replicas but are unequal will be marked as\n\
+      \032  conflicting.\n\
+      \n\
+      \032  Touching a file without changing its contents should never affect\n\
+      \032  whether or not Unison does an update. (When running with the fastcheck\n\
+      \032  preference set to true--the default on Unix systems--Unison uses file\n\
+      \032  modtimes for a quick first pass to tell which files have definitely not\n\
+      \032  changed; then, for each file that might have changed, it computes a\n\
+      \032  fingerprint of the file's contents and compares it against the\n\
+      \032  last-synchronized contents. Also, the -times option allows you to\n\
+      \032  synchronize file times, but it does not cause identical files to be\n\
+      \032  changed; Unison will only modify the file times.)\n\
+      \n\
+      \032  It is safe to \"brainwash\" Unison by deleting its archive files on both\n\
+      \032  replicas. The next time it runs, it will assume that all the files it\n\
+      \032  sees in the replicas are new.\n\
+      \n\
+      \032  It is safe to modify files while Unison is working. If Unison discovers\n\
+      \032  that it has propagated an out-of-date change, or that the file it is\n\
+      \032  updating has changed on the target replica, it will signal a failure\n\
+      \032  for that file. Run Unison again to propagate the latest change.\n\
+      \n\
+      \032  Changes to the ignore patterns from the user interface (e.g., using the\n\
+      \032  `i' key) are immediately reflected in the current profile.\n\
+      \n\
+      Caveats and Shortcomings\n\
+      \n\
+      \032  Here are some things to be careful of when using Unison.\n\
+      \032    * In the interests of speed, the update detection algorithm may\n\
+      \032      (depending on which OS architecture that you run Unison on)\n\
+      \032      actually use an approximation to the definition given in the\n\
+      \032      section \"What is an Update?\" .\n\
+      \032      In particular, the Unix implementation does not compare the actual\n\
+      \032      contents of files to their previous contents, but simply looks at\n\
+      \032      each file's inode number and modtime; if neither of these have\n\
+      \032      changed, then it concludes that the file has not been changed.\n\
+      \032      Under normal circumstances, this approximation is safe, in the\n\
+      \032      sense that it may sometimes detect \"false updates\" but will never\n\
+      \032      miss a real one. However, it is possible to fool it, for example by\n\
+      \032      using retouch to change a file's modtime back to a time in the\n\
+      \032      past.\n\
+      \032    * If you synchronize between a single-user filesystem and a shared\n\
+      \032      Unix server, you should pay attention to your permission bits: by\n\
+      \032      default, Unison will synchronize permissions verbatim, which may\n\
+      \032      leave group-writable files on the server that could be written over\n\
+      \032      by a lot of people.\n\
+      \032      You can control this by setting your umask on both computers to\n\
+      \032      something like 022, masking out the \"world write\" and \"group write\"\n\
+      \032      permission bits.\n\
+      \032      Unison does not synchronize the setuid and setgid bits, for\n\
+      \032      security.\n\
+      \032    * The graphical user interface is single-threaded. This means that if\n\
+      \032      Unison is performing some long-running operation, the display will\n\
+      \032      not be repainted until it finishes. We recommend not trying to do\n\
+      \032      anything with the user interface while Unison is in the middle of\n\
+      \032      detecting changes or propagating files.\n\
+      \032    * Unison does not understand hard links.\n\
+      \032    * It is important to be a little careful when renaming directories\n\
+      \032      containing ignored files.\n\
+      \032      For example, suppose Unison is synchronizing directory A between\n\
+      \032      the two machines called the \"local\" and the \"remote\" machine;\n\
+      \032      suppose directory A contains a subdirectory D; and suppose D on the\n\
+      \032      local machine contains a file or subdirectory P that matches an\n\
+      \032      ignore directive in the profile used to synchronize. Thus path\n\
+      \032      A/D/P exists on the local machine but not on the remote machine.\n\
+      \032      If D is renamed to D' on the remote machine, and this change is\n\
+      \032      propagated to the local machine, all such files or subdirectories P\n\
+      \032      will be deleted. This is because Unison sees the rename as a delete\n\
+      \032      and a separate create: it deletes the old directory (including the\n\
+      \032      ignored files) and creates a new one (not including the ignored\n\
+      \032      files, since they are completely invisible to it).\n\
+      \n\
+      "))
+::
+    ("", ("Reference Guide", 
+     "\n\
+      \032  This section covers the features of Unison in detail.\n\
+      \n\
+      "))
+::
+    ("running", ("Running Unison", 
+     "Running Unison\n\
+      \n\
+      \032  There are several ways to start Unison.\n\
+      \032    * Typing \"unison profile\" on the command line. Unison will look for a\n\
+      \032      file profile.prf in the .unison directory. If this file does not\n\
+      \032      specify a pair of roots, Unison will prompt for them and add them\n\
+      \032      to the information specified by the profile.\n\
+      \032    * Typing \"unison profile root1 root2\" on the command line. In this\n\
+      \032      case, Unison will use profile, which should not contain any root\n\
+      \032      directives.\n\
+      \032    * Typing \"unison root1 root2\" on the command line. This has the same\n\
+      \032      effect as typing \"unison default root1 root2.\"\n\
+      \032    * Typing just \"unison\" (or invoking Unison by clicking on a desktop\n\
+      \032      icon). In this case, Unison will ask for the profile to use for\n\
+      \032      synchronization (or create a new one, if necessary).\n\
+      \n\
+      The .unison Directory\n\
+      \n\
+      \032  Unison stores a variety of information in a private directory on each\n\
+      \032  host. If the environment variable UNISON is defined, then its value\n\
+      \032  will be used as the name of this directory. If UNISON is not defined,\n\
+      \032  then the name of the directory depends on which operating system you\n\
+      \032  are using. In Unix, the default is to use $HOME/.unison. In Windows, if\n\
+      \032  the environment variable USERPROFILE is defined, then the directory\n\
+      \032  will be $USERPROFILE\\.unison; otherwise if HOME is defined, it will be\n\
+      \032  $HOME\\.unison; otherwise, it will be c:\\.unison.\n\
+      \n\
+      \032  The archive file for each replica is found in the .unison directory on\n\
+      \032  that replica's host. Profiles (described below) are always taken from\n\
+      \032  the .unison directory on the client host.\n\
+      \n\
+      \032  Note that Unison maintains a completely different set of archive files\n\
+      \032  for each pair of roots.\n\
+      \n\
+      \032  We do not recommend synchronizing the whole .unison directory, as this\n\
+      \032  will involve frequent propagation of large archive files. It should be\n\
+      \032  safe to do it, though, if you really want to. Synchronizing just the\n\
+      \032  profile files in the .unison directory is definitely OK.\n\
+      \n\
+      Archive Files\n\
+      \n\
+      \032  The name of the archive file on each replica is calculated from\n\
+      \032    * the canonical names of all the hosts (short names like saul are\n\
+      \032      converted into full addresses like saul.cis.upenn.edu),\n\
+      \032    * the paths to the replicas on all the hosts (again, relative\n\
+      \032      pathnames, symbolic links, etc. are converted into full, absolute\n\
+      \032      paths), and\n\
+      \032    * an internal version number that is changed whenever a new Unison\n\
+      \032      release changes the format of the information stored in the\n\
+      \032      archive.\n\
+      \n\
+      \032  This method should work well for most users. However, it is\n\
+      \032  occasionally useful to change the way archive names are generated.\n\
+      \032  Unison provides two ways of doing this.\n\
+      \n\
+      \032  The function that finds the canonical hostname of the local host (which\n\
+      \032  is used, for example, in calculating the name of the archive file used\n\
+      \032  to remember which files have been synchronized) normally uses the\n\
+      \032  gethostname operating system call. However, if the environment variable\n\
+      \032  UNISONLOCALHOSTNAME is set, its value will be used instead. This makes\n\
+      \032  it easier to use Unison in situations where a machine's name changes\n\
+      \032  frequently (e.g., because it is a laptop and gets moved around a lot).\n\
+      \n\
+      \032  A more powerful way of changing archive names is provided by the\n\
+      \032  rootalias preference. The preference file may contain any number of\n\
+      \032  lines of the form:\n\
+      \032   rootalias = //hostnameA//path-to-replicaA -> //hostnameB/path-to-replicaB\n\
+      \n\
+      \032  When calculating the name of the archive files for a given pair of\n\
+      \032  roots, Unison replaces any root that matches the left-hand side of any\n\
+      \032  rootalias rule by the corresponding right-hand side.\n\
+      \n\
+      \032  So, if you need to relocate a root on one of the hosts, you can add a\n\
+      \032  rule of the form:\n\
+      \032   rootalias = //new-hostname//new-path -> //old-hostname/old-path\n\
+      \n\
+      \032  Note that root aliases are case-sensitive, even on case-insensitive\n\
+      \032  file systems.\n\
+      \n\
+      \032  Warning: The rootalias option is dangerous and should only be used if\n\
+      \032  you are sure you know what you're doing. In particular, it should only\n\
+      \032  be used if you are positive that either (1) both the original root and\n\
+      \032  the new alias refer to the same set of files, or (2) the files have\n\
+      \032  been relocated so that the original name is now invalid and will never\n\
+      \032  be used again. (If the original root and the alias refer to different\n\
+      \032  sets of files, Unison's update detector could get confused.) After\n\
+      \032  introducing a new rootalias, it is a good idea to run Unison a few\n\
+      \032  times interactively (with the batch flag off, etc.) and carefully check\n\
+      \032  that things look reasonable--in particular, that update detection is\n\
+      \032  working as expected.\n\
+      \n\
+      Preferences\n\
+      \n\
+      \032  Many details of Unison's behavior are configurable by user-settable\n\
+      \032  \"preferences.\"\n\
+      \n\
+      \032  Some preferences are boolean-valued; these are often called flags.\n\
+      \032  Others take numeric or string arguments, indicated in the preferences\n\
+      \032  list by n or xxx. Most of the string preferences can be given several\n\
+      \032  times; the arguments are accumulated into a list internally.\n\
+      \n\
+      \032  There are two ways to set the values of preferences: temporarily, by\n\
+      \032  providing command-line arguments to a particular run of Unison, or\n\
+      \032  permanently, by adding commands to a profile in the .unison directory\n\
+      \032  on the client host. The order of preferences (either on the command\n\
+      \032  line or in preference files) is not significant. On the command line,\n\
+      \032  preferences and other arguments (the profile name and roots) can be\n\
+      \032  intermixed in any order.\n\
+      \n\
+      \032  To set the value of a preference p from the command line, add an\n\
+      \032  argument -p (for a boolean flag) or -p n or -p xxx (for a numeric or\n\
+      \032  string preference) anywhere on the command line. To set a boolean flag\n\
+      \032  to false on the command line, use -p=false.\n\
+      \n\
+      \032  Here are all the preferences supported by Unison. This list can be\n\
+      \032  obtained by typing unison -help.\n\
+      \n\
+      Usage: unison [options]\n\
+      \032   or unison root1 root2 [options]\n\
+      \032   or unison profilename [options]\n\
+      \n\
+      Basic options:\n\
+      \032-auto              automatically accept default (nonconflicting) actions\n\
+      \032-batch             batch mode: ask no questions at all\n\
+      \032-doc xxx           show documentation ('-doc topics' lists topics)\n\
+      \032-fat               use appropriate options for FAT filesystems\n\
+      \032-group             synchronize group attributes\n\
+      \032-ignore xxx        add a pattern to the ignore list\n\
+      \032-ignorenot xxx     add a pattern to the ignorenot list\n\
+      \032-nocreation xxx    prevent file creations on one replica\n\
+      \032-nodeletion xxx    prevent file deletions on one replica\n\
+      \032-noupdate xxx      prevent file updates and deletions on one replica\n\
+      \032-owner             synchronize owner\n\
+      \032-path xxx          path to synchronize\n\
+      \032-perms n           part of the permissions which is synchronized\n\
+      \032-root xxx          root of a replica (should be used exactly twice)\n\
+      \032-silent            print nothing except error messages\n\
+      \032-terse             suppress status messages\n\
+      \032-testserver        exit immediately after the connection to the server\n\
+      \032-times             synchronize modification times\n\
+      \032-version           print version and exit\n\
+      \n\
+      Advanced options:\n\
+      \032-addprefsto xxx    file to add new prefs to\n\
+      \032-addversionno      add version number to name of unison on server\n\
+      \032-backup xxx        add a pattern to the backup list\n\
+      \032-backupcurr xxx    add a pattern to the backupcurr list\n\
+      \032-backupcurrnot xxx add a pattern to the backupcurrnot list\n\
+      \032-backupdir xxx     directory for storing centralized backups\n\
+      \032-backuploc xxx     where backups are stored ('local' or 'central')\n\
+      \032-backupnot xxx     add a pattern to the backupnot list\n\
+      \032-backupprefix xxx  prefix for the names of backup files\n\
+      \032-backups           keep backup copies of all files (see also 'backup')\n\
+      \032-backupsuffix xxx  a suffix to be added to names of backup files\n\
+      \032-confirmbigdel     ask about whole-replica (or path) deletes (default true)\n\
+      \032-confirmmerge      ask for confirmation before commiting results of a merge\n\
+      \032-contactquietly    suppress the 'contacting server' message during startup\n\
+      \032-copymax n         maximum number of simultaneous copyprog transfers\n\
+      \032-copyprog xxx      external program for copying large files\n\
+      \032-copyprogrest xxx  variant of copyprog for resuming partial transfers\n\
+      \032-copyquoterem xxx  add quotes to remote file name for copyprog (true/false/defa\n\
+      ult)\n\
+      \032-copythreshold n   use copyprog on files bigger than this (if >=0, in Kb)\n\
+      \032-debug xxx         debug module xxx ('all' -> everything, 'verbose' -> more)\n\
+      \032-diff xxx          set command for showing differences between files\n\
+      \032-dontchmod         when set, never use the chmod system call\n\
+      \032-dumbtty           do not change terminal settings in text UI\n\
+      \032-fastcheck xxx     do fast update detection (true/false/default)\n\
+      \032-follow xxx        add a pattern to the follow list\n\
+      \032-force xxx         force changes from this replica to the other\n\
+      \032-forcepartial xxx  add a pattern to the forcepartial list\n\
+      \032-halfduplex        force half-duplex communication with the server\n\
+      \032-height n          height (in lines) of main window in graphical interface\n\
+      \032-host xxx          bind the socket to this host name in server socket mode\n\
+      \032-ignorearchives    ignore existing archive files\n\
+      \032-ignorecase xxx    identify upper/lowercase filenames (true/false/default)\n\
+      \032-ignoreinodenumbers ignore inode number changes when detecting updates\n\
+      \032-ignorelocks       ignore locks left over from previous run (dangerous!)\n\
+      \032-immutable xxx     add a pattern to the immutable list\n\
+      \032-immutablenot xxx  add a pattern to the immutablenot list\n\
+      \032-key xxx           define a keyboard shortcut for this profile (in some UIs)\n\
+      \032-killserver        kill server when done (even when using sockets)\n\
+      \032-label xxx         provide a descriptive string label for this profile\n\
+      \032-links xxx         allow the synchronization of symbolic links (true/false/defa\n\
+      ult)\n\
+      \032-log               record actions in logfile (default true)\n\
+      \032-logfile xxx       logfile name\n\
+      \032-maxbackups n      number of backed up versions of a file\n\
+      \032-maxerrors n       maximum number of errors before a directory transfer is abor\n\
+      ted\n\
+      \032-maxthreads n      maximum number of simultaneous file transfers\n\
+      \032-merge xxx         add a pattern to the merge list\n\
+      \032-mountpoint xxx    abort if this path does not exist\n\
+      \032-nocreationpartial xxx add a pattern to the nocreationpartial list\n\
+      \032-nodeletionpartial xxx add a pattern to the nodeletionpartial list\n\
+      \032-noupdatepartial xxx add a pattern to the noupdatepartial list\n\
+      \032-numericids        don't map uid/gid values by user/group names\n\
+      \032-prefer xxx        choose this replica's version for conflicting changes\n\
+      \032-preferpartial xxx add a pattern to the preferpartial list\n\
+      \032-repeat xxx        synchronize repeatedly (text interface only)\n\
+      \032-retry n           re-try failed synchronizations N times (text ui only)\n\
+      \032-rootalias xxx     register alias for canonical root names\n\
+      \032-rsrc xxx          synchronize resource forks (true/false/default)\n\
+      \032-rsync             activate the rsync transfer mode (default true)\n\
+      \032-selftest          run internal tests and exit\n\
+      \032-servercmd xxx     name of unison executable on remote server\n\
+      \032-showarchive       show 'true names' (for rootalias) of roots and archive\n\
+      \032-socket xxx        act as a server on a socket\n\
+      \032-sortbysize        list changed files by size, not name\n\
+      \032-sortfirst xxx     add a pattern to the sortfirst list\n\
+      \032-sortlast xxx      add a pattern to the sortlast list\n\
+      \032-sortnewfirst      list new before changed files\n\
+      \032-sshargs xxx       other arguments (if any) for remote shell command\n\
+      \032-sshcmd xxx        path to the ssh executable\n\
+      \032-stream            use a streaming protocol for transferring file contents (def\n\
+      ault true)\n\
+      \032-ui xxx            select UI ('text' or 'graphic'); command-line only\n\
+      \032-unicode xxx       assume Unicode encoding in case insensitive mode\n\
+      \032-xferbycopying     optimize transfers using local copies (default true)\n\
+      \n\
+      \n\
+      \032  Here, in more detail, is what they do. Many are discussed in greater\n\
+      \032  detail in other sections of the manual.\n\
+      \n\
+      \032  addprefsto xxx\n\
+      \032         By default, new preferences added by Unison (e.g., new ignore\n\
+      \032         clauses) will be appended to whatever preference file Unison was\n\
+      \032         told to load at the beginning of the run. Setting the preference\n\
+      \032         addprefsto filename makes Unison add new preferences to the file\n\
+      \032         named filename instead.\n\
+      \n\
+      \032  addversionno\n\
+      \032         When this flag is set to true, Unison will use\n\
+      \032         unison-currentversionnumber instead of just unison as the remote\n\
+      \032         server command. This allows multiple binaries for different\n\
+      \032         versions of unison to coexist conveniently on the same server:\n\
+      \032         whichever version is run on the client, the same version will be\n\
+      \032         selected on the server.\n\
+      \n\
+      \032  auto\n\
+      \032         When set to true, this flag causes the user interface to skip\n\
+      \032         asking for confirmations on non-conflicting changes. (More\n\
+      \032         precisely, when the user interface is done setting the\n\
+      \032         propagation direction for one entry and is about to move to the\n\
+      \032         next, it will skip over all non-conflicting entries and go\n\
+      \032         directly to the next conflict.)\n\
+      \n\
+      \032  backup xxx\n\
+      \032         Including the preference -backup pathspec causes Unison to keep\n\
+      \032         backup files for each path that matches pathspec. These backup\n\
+      \032         files are kept in the directory specified by the backuplocation\n\
+      \032         preference. The backups are named according to the backupprefix\n\
+      \032         and backupsuffix preferences. The number of versions that are\n\
+      \032         kept is determined by the maxbackups preference.\n\
+      \n\
+      \032         The syntax of pathspec is described in the section \"Path\n\
+      \032         Specification\" .\n\
+      \n\
+      \032  backupcurr xxx\n\
+      \032         Including the preference -backupcurr pathspec causes Unison to\n\
+      \032         keep a backup of the current version of every file matching\n\
+      \032         pathspec. This file will be saved as a backup with version\n\
+      \032         number 000. Such backups can be used as inputs to external\n\
+      \032         merging programs, for instance. See the documentatation for the\n\
+      \032         merge preference. For more details, see the section \"Merging\n\
+      \032         Conflicting Versions\" .\n\
+      \n\
+      \032         The syntax of pathspec is described in the section \"Path\n\
+      \032         Specification\" .\n\
+      \n\
+      \032  backupcurrnot xxx\n\
+      \032         Exceptions to backupcurr, like the ignorenot preference.\n\
+      \n\
+      \032  backupdir xxx\n\
+      \032         If this preference is set, Unison will use it as the name of the\n\
+      \032         directory used to store backup files specified by the backup\n\
+      \032         preference, when backuplocation is set to central. It is checked\n\
+      \032         after the UNISONBACKUPDIR environment variable.\n\
+      \n\
+      \032  backuploc xxx\n\
+      \032         This preference determines whether backups should be kept\n\
+      \032         locally, near the original files, or in a central directory\n\
+      \032         specified by the backupdir preference. If set to local, backups\n\
+      \032         will be kept in the same directory as the original files, and if\n\
+      \032         set to central, backupdir will be used instead.\n\
+      \n\
+      \032  backupnot xxx\n\
+      \032         The values of this preference specify paths or individual files\n\
+      \032         or regular expressions that should not be backed up, even if the\n\
+      \032         backup preference selects them--i.e., it selectively overrides\n\
+      \032         backup. The same caveats apply here as with ignore and\n\
+      \032         ignorenot.\n\
+      \n\
+      \032  backupprefix xxx\n\
+      \032         When a backup for a file NAME is created, it is stored in a\n\
+      \032         directory specified by backuplocation, in a file called\n\
+      \032         backupprefixNAMEbackupsuffix. backupprefix can include a\n\
+      \032         directory name (causing Unison to keep all backup files for a\n\
+      \032         given directory in a subdirectory with this name), and both\n\
+      \032         backupprefix and backupsuffix can contain the string$VERSION,\n\
+      \032         which will be replaced by the age of the backup (1 for the most\n\
+      \032         recent, 2 for the second most recent, and so on...). This\n\
+      \032         keyword is ignored if it appears in a directory name in the\n\
+      \032         prefix; if it does not appear anywhere in the prefix or the\n\
+      \032         suffix, it will be automatically placed at the beginning of the\n\
+      \032         suffix.\n\
+      \n\
+      \032         One thing to be careful of: If the backuploc preference is set\n\
+      \032         to local, Unison will automatically ignore all files whose\n\
+      \032         prefix and suffix match backupprefix and backupsuffix. So be\n\
+      \032         careful to choose values for these preferences that are\n\
+      \032         sufficiently different from the names of your real files.\n\
+      \n\
+      \032  backups\n\
+      \032         Setting this flag to true is equivalent to setting\n\
+      \032         backuplocation to local and backup to Name *.\n\
+      \n\
+      \032  backupsuffix xxx\n\
+      \032         See backupprefix for full documentation.\n\
+      \n\
+      \032  batch\n\
+      \032         When this is set to true, the user interface will ask no\n\
+      \032         questions at all. Non-conflicting changes will be propagated;\n\
+      \032         conflicts will be skipped.\n\
+      \n\
+      \032  confirmbigdel\n\
+      \032         When this is set to true, Unison will request an extra\n\
+      \032         confirmation if it appears that the entire replica has been\n\
+      \032         deleted, before propagating the change. If the batch flag is\n\
+      \032         also set, synchronization will be aborted. When the path\n\
+      \032         preference is used, the same confirmation will be requested for\n\
+      \032         top-level paths. (At the moment, this flag only affects the text\n\
+      \032         user interface.) See also the mountpoint preference.\n\
+      \n\
+      \032  confirmmerge\n\
+      \032         Setting this preference causes both the text and graphical\n\
+      \032         interfaces to ask the user if the results of a merge command may\n\
+      \032         be commited to the replica or not. Since the merge command works\n\
+      \032         on temporary files, the user can then cancel all the effects of\n\
+      \032         applying the merge if it turns out that the result is not\n\
+      \032         satisfactory. In batch-mode, this preference has no effect.\n\
+      \032         Default is false.\n\
+      \n\
+      \032  contactquietly\n\
+      \032         If this flag is set, Unison will skip displaying the `Contacting\n\
+      \032         server' message (which some users find annoying) during startup.\n\
+      \n\
+      \032  copymax n\n\
+      \032         A number indicating how many instances of the external copying\n\
+      \032         utility Unison is allowed to run simultaneously (default to 1).\n\
+      \n\
+      \032  copyprog xxx\n\
+      \032         A string giving the name of an external program that can be used\n\
+      \032         to copy large files efficiently (plus command-line switches\n\
+      \032         telling it to copy files in-place). The default setting invokes\n\
+      \032         rsync with appropriate options--most users should not need to\n\
+      \032         change it.\n\
+      \n\
+      \032  copyprogrest xxx\n\
+      \032         A variant of copyprog that names an external program that should\n\
+      \032         be used to continue the transfer of a large file that has\n\
+      \032         already been partially transferred. Typically, copyprogrest will\n\
+      \032         just be copyprog with one extra option (e.g., --partial, for\n\
+      \032         rsync). The default setting invokes rsync with appropriate\n\
+      \032         options--most users should not need to change it.\n\
+      \n\
+      \032  copyquoterem xxx\n\
+      \032         When set to true, this flag causes Unison to add an extra layer\n\
+      \032         of quotes to the remote path passed to the external copy\n\
+      \032         program. This is needed by rsync, for example, which internally\n\
+      \032         uses an ssh connection requiring an extra level of quoting for\n\
+      \032         paths containing spaces. When this flag is set to default, extra\n\
+      \032         quotes are added if the value of copyprog contains the string\n\
+      \032         rsync.\n\
+      \n\
+      \032  copythreshold n\n\
+      \032         A number indicating above what filesize (in kilobytes) Unison\n\
+      \032         should use the external copying utility specified by copyprog.\n\
+      \032         Specifying 0 will cause all copies to use the external program;\n\
+      \032         a negative number will prevent any files from using it. The\n\
+      \032         default is -1. See the section \"Making Unison Faster on Large\n\
+      \032         Files\" for more information.\n\
+      \n\
+      \032  debug xxx\n\
+      \032         This preference is used to make Unison print various sorts of\n\
+      \032         information about what it is doing internally on the standard\n\
+      \032         error stream. It can be used many times, each time with the name\n\
+      \032         of a module for which debugging information should be printed.\n\
+      \032         Possible arguments for debug can be found by looking for calls\n\
+      \032         to Util.debug in the sources (using, e.g., grep). Setting -debug\n\
+      \032         all causes information from all modules to be printed (this mode\n\
+      \032         of usage is the first one to try, if you are trying to\n\
+      \032         understand something that Unison seems to be doing wrong);\n\
+      \032         -debug verbose turns on some additional debugging output from\n\
+      \032         some modules (e.g., it will show exactly what bytes are being\n\
+      \032         sent across the network).\n\
+      \n\
+      \032  diff xxx\n\
+      \032         This preference can be used to control the name and command-line\n\
+      \032         arguments of the system utility used to generate displays of\n\
+      \032         file differences. The default is `diff -u CURRENT2 CURRENT1'. If\n\
+      \032         the value of this preference contains the substrings CURRENT1\n\
+      \032         and CURRENT2, these will be replaced by the names of the files\n\
+      \032         to be diffed. If not, the two filenames will be appended to the\n\
+      \032         command. In both cases, the filenames are suitably quoted.\n\
+      \n\
+      \032  doc xxx\n\
+      \032         The command-line argument -doc secname causes unison to display\n\
+      \032         section secname of the manual on the standard output and then\n\
+      \032         exit. Use -doc all to display the whole manual, which includes\n\
+      \032         exactly the same information as the printed and HTML manuals,\n\
+      \032         modulo formatting. Use -doc topics to obtain a list of the names\n\
+      \032         of the various sections that can be printed.\n\
+      \n\
+      \032  dontchmod\n\
+      \032         By default, Unison uses the 'chmod' system call to set the\n\
+      \032         permission bits of files after it has copied them. But in some\n\
+      \032         circumstances (and under some operating systems), the chmod call\n\
+      \032         always fails. Setting this preference completely prevents Unison\n\
+      \032         from ever calling chmod.\n\
+      \n\
+      \032  dumbtty\n\
+      \032         When set to true, this flag makes the text mode user interface\n\
+      \032         avoid trying to change any of the terminal settings. (Normally,\n\
+      \032         Unison puts the terminal in `raw mode', so that it can do things\n\
+      \032         like overwriting the current line.) This is useful, for example,\n\
+      \032         when Unison runs in a shell inside of Emacs.\n\
+      \n\
+      \032         When dumbtty is set, commands to the user interface need to be\n\
+      \032         followed by a carriage return before Unison will execute them.\n\
+      \032         (When it is off, Unison recognizes keystrokes as soon as they\n\
+      \032         are typed.)\n\
+      \n\
+      \032         This preference has no effect on the graphical user interface.\n\
+      \n\
+      \032  dumparchives\n\
+      \032         When this preference is set, Unison will create a file\n\
+      \032         unison.dump on each host, containing a text summary of the\n\
+      \032         archive, immediately after loading it.\n\
+      \n\
+      \032  fastcheck xxx\n\
+      \032         When this preference is set to true, Unison will use the\n\
+      \032         modification time and length of a file as a `pseudo inode\n\
+      \032         number' when scanning replicas for updates, instead of reading\n\
+      \032         the full contents of every file. Under Windows, this may cause\n\
+      \032         Unison to miss propagating an update if the modification time\n\
+      \032         and length of the file are both unchanged by the update.\n\
+      \032         However, Unison will never overwrite such an update with a\n\
+      \032         change from the other replica, since it always does a safe check\n\
+      \032         for updates just before propagating a change. Thus, it is\n\
+      \032         reasonable to use this switch under Windows most of the time and\n\
+      \032         occasionally run Unison once with fastcheck set to false, if you\n\
+      \032         are worried that Unison may have overlooked an update. For\n\
+      \032         backward compatibility, yes, no, and default can be used in\n\
+      \032         place of true, false, and auto. See the section \"Fast Checking\"\n\
+      \032         for more information.\n\
+      \n\
+      \032  fat\n\
+      \032         When this is set to true, Unison will use appropriate options to\n\
+      \032         synchronize efficiently and without error a replica located on a\n\
+      \032         FAT filesystem on a non-Windows machine: do not synchronize\n\
+      \032         permissions (perms = 0); never use chmod ( t dontchmod = true);\n\
+      \032         treat filenames as case insensitive (ignorecase = true); do not\n\
+      \032         attempt to synchronize symbolic links (links = false); ignore\n\
+      \032         inode number changes when detecting updates (ignoreinodenumbers\n\
+      \032         = true). Any of these change can be overridden by explicitely\n\
+      \032         setting the corresponding preference in the profile.\n\
+      \n\
+      \032  follow xxx\n\
+      \032         Including the preference -follow pathspec causes Unison to treat\n\
+      \032         symbolic links matching pathspec as `invisible' and behave as if\n\
+      \032         the object pointed to by the link had appeared literally at this\n\
+      \032         position in the replica. See the section \"Symbolic Links\" for\n\
+      \032         more details. The syntax of pathspec is described in the section\n\
+      \032         \"Path Specification\" .\n\
+      \n\
+      \032  force xxx\n\
+      \032         Including the preference -force root causes Unison to resolve\n\
+      \032         all differences (even non-conflicting changes) in favor of root.\n\
+      \032         This effectively changes Unison from a synchronizer into a\n\
+      \032         mirroring utility.\n\
+      \n\
+      \032         You can also specify -force newer (or -force older) to force\n\
+      \032         Unison to choose the file with the later (earlier) modtime. In\n\
+      \032         this case, the -times preference must also be enabled.\n\
+      \n\
+      \032         This preference is overridden by the forcepartial preference.\n\
+      \n\
+      \032         This preference should be used only if you are sure you know\n\
+      \032         what you are doing!\n\
+      \n\
+      \032  forcepartial xxx\n\
+      \032         Including the preference forcepartial = PATHSPEC -> root causes\n\
+      \032         Unison to resolve all differences (even non-conflicting changes)\n\
+      \032         in favor of root for the files in PATHSPEC (see the section\n\
+      \032         \"Path Specification\" for more information). This effectively\n\
+      \032         changes Unison from a synchronizer into a mirroring utility.\n\
+      \n\
+      \032         You can also specify forcepartial PATHSPEC -> newer (or\n\
+      \032         forcepartial PATHSPEC older) to force Unison to choose the file\n\
+      \032         with the later (earlier) modtime. In this case, the -times\n\
+      \032         preference must also be enabled.\n\
+      \n\
+      \032         This preference should be used only if you are sure you know\n\
+      \032         what you are doing!\n\
+      \n\
+      \032  group\n\
+      \032         When this flag is set to true, the group attributes of the files\n\
+      \032         are synchronized. Whether the group names or the group\n\
+      \032         identifiers are synchronized depends on the preference numerids.\n\
+      \n\
+      \032  halfduplex\n\
+      \032         When this flag is set to true, Unison network communication is\n\
+      \032         forced to be half duplex (the client and the server never\n\
+      \032         simultaneously emit data). If you experience unstabilities with\n\
+      \032         your network link, this may help. The communication is always\n\
+      \032         half-duplex when synchronizing with a Windows machine due to a\n\
+      \032         limitation of Unison current implementation that could result in\n\
+      \032         a deadlock.\n\
+      \n\
+      \032  height n\n\
+      \032         Used to set the height (in lines) of the main window in the\n\
+      \032         graphical user interface.\n\
+      \n\
+      \032  ignore xxx\n\
+      \032         Including the preference -ignore pathspec causes Unison to\n\
+      \032         completely ignore paths that match pathspec (as well as their\n\
+      \032         children). This is useful for avoiding synchronizing temporary\n\
+      \032         files, object files, etc. The syntax of pathspec is described in\n\
+      \032         the section \"Path Specification\" , and further details on\n\
+      \032         ignoring paths is found in the section \"Ignoring Paths\" .\n\
+      \n\
+      \032  ignorearchives\n\
+      \032         When this preference is set, Unison will ignore any existing\n\
+      \032         archive files and behave as though it were being run for the\n\
+      \032         first time on these replicas. It is not a good idea to set this\n\
+      \032         option in a profile: it is intended for command-line use.\n\
+      \n\
+      \032  ignorecase xxx\n\
+      \032         When set to true, this flag causes Unison to treat filenames as\n\
+      \032         case insensitive--i.e., files in the two replicas whose names\n\
+      \032         differ in (upper- and lower-case) `spelling' are treated as the\n\
+      \032         same file. When the flag is set to false, Unison will treat all\n\
+      \032         filenames as case sensitive. Ordinarily, when the flag is set to\n\
+      \032         default, filenames are automatically taken to be\n\
+      \032         case-insensitive if either host is running Windows or OSX. In\n\
+      \032         rare circumstances it may be useful to set the flag manually.\n\
+      \n\
+      \032  ignoreinodenumbers\n\
+      \032         When set to true, this preference makes Unison not take\n\
+      \032         advantage of inode numbers during fast update detection. This\n\
+      \032         switch should be used with care, as it is less safe than the\n\
+      \032         standard update detection method, but it can be useful with\n\
+      \032         filesystems which do not support inode numbers.\n\
+      \n\
+      \032  ignorelocks\n\
+      \032         When this preference is set, Unison will ignore any lock files\n\
+      \032         that may have been left over from a previous run of Unison that\n\
+      \032         was interrupted while reading or writing archive files; by\n\
+      \032         default, when Unison sees these lock files it will stop and\n\
+      \032         request manual intervention. This option should be set only if\n\
+      \032         you are positive that no other instance of Unison might be\n\
+      \032         concurrently accessing the same archive files (e.g., because\n\
+      \032         there was only one instance of unison running and it has just\n\
+      \032         crashed or you have just killed it). It is probably not a good\n\
+      \032         idea to set this option in a profile: it is intended for\n\
+      \032         command-line use.\n\
+      \n\
+      \032  ignorenot xxx\n\
+      \032         This preference overrides the preference ignore. It gives a list\n\
+      \032         of patterns (in the same format as ignore) for paths that should\n\
+      \032         definitely not be ignored, whether or not they happen to match\n\
+      \032         one of the ignore patterns.\n\
+      \n\
+      \032         Note that the semantics of ignore and ignorenot is a little\n\
+      \032         counter-intuitive. When detecting updates, Unison examines paths\n\
+      \032         in depth-first order, starting from the roots of the replicas\n\
+      \032         and working downwards. Before examining each path, it checks\n\
+      \032         whether it matches ignore and does not match ignorenot; in this\n\
+      \032         case it skips this path and all its descendants. This means\n\
+      \032         that, if some parent of a given path matches an ignore pattern,\n\
+      \032         then it will be skipped even if the path itself matches an\n\
+      \032         ignorenot pattern. In particular, putting ignore = Path * in\n\
+      \032         your profile and then using ignorenot to select particular paths\n\
+      \032         to be synchronized will not work. Instead, you should use the\n\
+      \032         path preference to choose particular paths to synchronize.\n\
+      \n\
+      \032  immutable xxx\n\
+      \032         This preference specifies paths for directories whose immediate\n\
+      \032         children are all immutable files -- i.e., once a file has been\n\
+      \032         created, its contents never changes. When scanning for updates,\n\
+      \032         Unison does not check whether these files have been modified;\n\
+      \032         this can speed update detection significantly (in particular,\n\
+      \032         for mail directories).\n\
+      \n\
+      \032  immutablenot xxx\n\
+      \032         This preference overrides immutable.\n\
+      \n\
+      \032  key xxx\n\
+      \032         Used in a profile to define a numeric key (0-9) that can be used\n\
+      \032         in the graphical user interface to switch immediately to this\n\
+      \032         profile.\n\
+      \n\
+      \032  killserver\n\
+      \032         When set to true, this flag causes Unison to kill the remote\n\
+      \032         server process when the synchronization is finished. This\n\
+      \032         behavior is the default for ssh connections, so this preference\n\
+      \032         is not normally needed when running over ssh; it is provided so\n\
+      \032         that socket-mode servers can be killed off after a single run of\n\
+      \032         Unison, rather than waiting to accept future connections. (Some\n\
+      \032         users prefer to start a remote socket server for each run of\n\
+      \032         Unison, rather than leaving one running all the time.)\n\
+      \n\
+      \032  label xxx\n\
+      \032         Used in a profile to provide a descriptive string documenting\n\
+      \032         its settings. (This is useful for users that switch between\n\
+      \032         several profiles, especially using the `fast switch' feature of\n\
+      \032         the graphical user interface.)\n\
+      \n\
+      \032  links xxx\n\
+      \032         When set to true, this flag causes Unison to synchronize\n\
+      \032         symbolic links. When the flag is set to false, symbolic links\n\
+      \032         will result in an error during update detection. Ordinarily,\n\
+      \032         when the flag is set to default, symbolic links are synchronized\n\
+      \032         except when one of the hosts is running Windows. In rare\n\
+      \032         circumstances it may be useful to set the flag manually.\n\
+      \n\
+      \032  log\n\
+      \032         When this flag is set, Unison will log all changes to the\n\
+      \032         filesystems on a file.\n\
+      \n\
+      \032  logfile xxx\n\
+      \032         By default, logging messages will be appended to the file\n\
+      \032         unison.log in your HOME directory. Set this preference if you\n\
+      \032         prefer another file.\n\
+      \n\
+      \032  maxbackups n\n\
+      \032         This preference specifies the number of backup versions that\n\
+      \032         will be kept by unison, for each path that matches the predicate\n\
+      \032         backup. The default is 2.\n\
+      \n\
+      \032  maxerrors n\n\
+      \032         This preference controls after how many errors Unison aborts a\n\
+      \032         directory transfer. Setting it to a large number allows Unison\n\
+      \032         to transfer most of a directory even when some files fail to be\n\
+      \032         copied. The default is 1. If the preference is set too high,\n\
+      \032         Unison may take a long time to abort in case of repeated\n\
+      \032         failures (for instance, when the disk is full).\n\
+      \n\
+      \032  maxthreads n\n\
+      \032         This preference controls how much concurrency is allowed during\n\
+      \032         the transport phase. Normally, it should be set reasonably high\n\
+      \032         to maximize performance, but when Unison is used over a\n\
+      \032         low-bandwidth link it may be helpful to set it lower (e.g. to 1)\n\
+      \032         so that Unison doesn't soak up all the available bandwidth. The\n\
+      \032         default is the special value 0, which mean 20 threads when file\n\
+      \032         content streaming is desactivated and 1000 threads when it is\n\
+      \032         activated.\n\
+      \n\
+      \032  merge xxx\n\
+      \032         This preference can be used to run a merge program which will\n\
+      \032         create a new version for each of the files and the backup, with\n\
+      \032         the last backup and the both replicas. Setting the merge\n\
+      \032         preference for a path will also cause this path to be backed up,\n\
+      \032         just like t backup. The syntax of pathspec>cmd is described in\n\
+      \032         the section \"Path Specification\" , and further details on\n\
+      \032         Merging functions are present in the section \"Merging files\" .\n\
+      \n\
+      \032  mountpoint xxx\n\
+      \032         Including the preference -mountpoint PATH causes Unison to\n\
+      \032         double-check, at the end of update detection, that PATH exists\n\
+      \032         and abort if it does not. This is useful when Unison is used to\n\
+      \032         synchronize removable media. This preference can be given more\n\
+      \032         than once. See the section \"Mount Points\" .\n\
+      \n\
+      \032  nocreation xxx\n\
+      \032         Including the preference -nocreation root prevents Unison from\n\
+      \032         performing any file creation on root root.\n\
+      \n\
+      \032         This preference can be included twice, once for each root, if\n\
+      \032         you want to prevent any creation.\n\
+      \n\
+      \032  nocreationpartial xxx\n\
+      \032         Including the preference nocreationpartial = PATHSPEC -> root\n\
+      \032         prevents Unison from performing any file creation in PATHSPEC on\n\
+      \032         root root (see the section \"Path Specification\" for more\n\
+      \032         information). It is recommended to use BelowPath patterns when\n\
+      \032         selecting a directory and all its contents.\n\
+      \n\
+      \032  nodeletion xxx\n\
+      \032         Including the preference -nodeletion root prevents Unison from\n\
+      \032         performing any file deletion on root root.\n\
+      \n\
+      \032         This preference can be included twice, once for each root, if\n\
+      \032         you want to prevent any deletion.\n\
+      \n\
+      \032  nodeletionpartial xxx\n\
+      \032         Including the preference nodeletionpartial = PATHSPEC -> root\n\
+      \032         prevents Unison from performing any file deletion in PATHSPEC on\n\
+      \032         root root (see the section \"Path Specification\" for more\n\
+      \032         information). It is recommended to use BelowPath patterns when\n\
+      \032         selecting a directory and all its contents.\n\
+      \n\
+      \032  noupdate xxx\n\
+      \032         Including the preference -noupdate root prevents Unison from\n\
+      \032         performing any file update or deletion on root root.\n\
+      \n\
+      \032         This preference can be included twice, once for each root, if\n\
+      \032         you want to prevent any update.\n\
+      \n\
+      \032  noupdatepartial xxx\n\
+      \032         Including the preference noupdatepartial = PATHSPEC -> root\n\
+      \032         prevents Unison from performing any file update or deletion in\n\
+      \032         PATHSPEC on root root (see the section \"Path Specification\" for\n\
+      \032         more information). It is recommended to use BelowPath patterns\n\
+      \032         when selecting a directory and all its contents.\n\
+      \n\
+      \032  numericids\n\
+      \032         When this flag is set to true, groups and users are synchronized\n\
+      \032         numerically, rather than by name.\n\
+      \n\
+      \032         The special uid 0 and the special group 0 are never mapped via\n\
+      \032         user/group names even if this preference is not set.\n\
+      \n\
+      \032  owner\n\
+      \032         When this flag is set to true, the owner attributes of the files\n\
+      \032         are synchronized. Whether the owner names or the owner\n\
+      \032         identifiers are synchronizeddepends on the preference numerids.\n\
+      \n\
+      \032  path xxx\n\
+      \032         When no path preference is given, Unison will simply synchronize\n\
+      \032         the two entire replicas, beginning from the given pair of roots.\n\
+      \032         If one or more path preferences are given, then Unison will\n\
+      \032         synchronize only these paths and their children. (This is useful\n\
+      \032         for doing a fast sync of just one directory, for example.) Note\n\
+      \032         that path preferences are intepreted literally--they are not\n\
+      \032         regular expressions.\n\
+      \n\
+      \032  perms n\n\
+      \032         The integer value of this preference is a mask indicating which\n\
+      \032         permission bits should be synchronized. It is set by default to\n\
+      \032         0o1777: all bits but the set-uid and set-gid bits are\n\
+      \032         synchronised (synchronizing theses latter bits can be a security\n\
+      \032         hazard). If you want to synchronize all bits, you can set the\n\
+      \032         value of this preference to -1. If one of the replica is on a\n\
+      \032         FAT [Windows] filesystem, you should consider using the t fat\n\
+      \032         preference instead of this preference. If you need Unison not to\n\
+      \032         set permissions at all, set the value of this preference to 0\n\
+      \032         and set the preference t dontchmod to t true.\n\
+      \n\
+      \032  prefer xxx\n\
+      \032         Including the preference -prefer root causes Unison always to\n\
+      \032         resolve conflicts in favor of root, rather than asking for\n\
+      \032         guidance from the user. (The syntax of root is the same as for\n\
+      \032         the root preference, plus the special values newer and older.)\n\
+      \n\
+      \032         This preference is overridden by the preferpartial preference.\n\
+      \n\
+      \032         This preference should be used only if you are sure you know\n\
+      \032         what you are doing!\n\
+      \n\
+      \032  preferpartial xxx\n\
+      \032         Including the preference preferpartial = PATHSPEC -> root causes\n\
+      \032         Unison always to resolve conflicts in favor of root, rather than\n\
+      \032         asking for guidance from the user, for the files in PATHSPEC\n\
+      \032         (see the section \"Path Specification\" for more information).\n\
+      \032         (The syntax of root is the same as for the root preference, plus\n\
+      \032         the special values newer and older.)\n\
+      \n\
+      \032         This preference should be used only if you are sure you know\n\
+      \032         what you are doing!\n\
+      \n\
+      \032  repeat xxx\n\
+      \032         Setting this preference causes the text-mode interface to\n\
+      \032         synchronize repeatedly, rather than doing it just once and\n\
+      \032         stopping. If the argument is a number, Unison will pause for\n\
+      \032         that many seconds before beginning again.\n\
+      \n\
+      \032  retry n\n\
+      \032         Setting this preference causes the text-mode interface to try\n\
+      \032         again to synchronize updated paths where synchronization fails.\n\
+      \032         Each such path will be tried N times.\n\
+      \n\
+      \032  root xxx\n\
+      \032         Each use of this preference names the root of one of the\n\
+      \032         replicas for Unison to synchronize. Exactly two roots are\n\
+      \032         needed, so normal modes of usage are either to give two values\n\
+      \032         for root in the profile, or to give no values in the profile and\n\
+      \032         provide two on the command line. Details of the syntax of roots\n\
+      \032         can be found in the section \"Roots\" .\n\
+      \n\
+      \032         The two roots can be given in either order; Unison will sort\n\
+      \032         them into a canonical order before doing anything else. It also\n\
+      \032         tries to `canonize' the machine names and paths that appear in\n\
+      \032         the roots, so that, if Unison is invoked later with a slightly\n\
+      \032         different name for the same root, it will be able to locate the\n\
+      \032         correct archives.\n\
+      \n\
+      \032  rootalias xxx\n\
+      \032         When calculating the name of the archive files for a given pair\n\
+      \032         of roots, Unison replaces any roots matching the left-hand side\n\
+      \032         of any rootalias rule by the corresponding right-hand side.\n\
+      \n\
+      \032  rshargs xxx\n\
+      \032         The string value of this preference will be passed as additional\n\
+      \032         arguments (besides the host name and the name of the Unison\n\
+      \032         executable on the remote system) to the rsh command used to\n\
+      \032         invoke the remote server.\n\
+      \n\
+      \032  rshcmd xxx\n\
+      \032         This preference can be used to explicitly set the name of the\n\
+      \032         rsh executable (e.g., giving a full path name), if necessary.\n\
+      \n\
+      \032  rsrc xxx\n\
+      \032         When set to true, this flag causes Unison to synchronize\n\
+      \032         resource forks and HFS meta-data. On filesystems that do not\n\
+      \032         natively support resource forks, this data is stored in\n\
+      \032         Carbon-compatible ._ AppleDouble files. When the flag is set to\n\
+      \032         false, Unison will not synchronize these data. Ordinarily, the\n\
+      \032         flag is set to default, and these data are automatically\n\
+      \032         synchronized if either host is running OSX. In rare\n\
+      \032         circumstances it is useful to set the flag manually.\n\
+      \n\
+      \032  rsync\n\
+      \032         Unison uses the 'rsync algorithm' for 'diffs-only' transfer of\n\
+      \032         updates to large files. Setting this flag to false makes Unison\n\
+      \032         use whole-file transfers instead. Under normal circumstances,\n\
+      \032         there is no reason to do this, but if you are having trouble\n\
+      \032         with repeated 'rsync failure' errors, setting it to false should\n\
+      \032         permit you to synchronize the offending files.\n\
+      \n\
+      \032  selftest\n\
+      \032         Run internal tests and exit. This option is mostly for\n\
+      \032         developers and must be used carefully: in particular, it will\n\
+      \032         delete the contents of both roots, so that it can install its\n\
+      \032         own files for testing. This flag only makes sense on the command\n\
+      \032         line. When it is provided, no preference file is read: all\n\
+      \032         preferences must be specified on thecommand line. Also, since\n\
+      \032         the self-test procedure involves overwriting the roots and\n\
+      \032         backup directory, the names of the roots and of the backupdir\n\
+      \032         preference must include the string \"test\" or else the tests will\n\
+      \032         be aborted. (If these are not given on the command line, dummy\n\
+      \032         subdirectories in the current directory will be created\n\
+      \032         automatically.)\n\
+      \n\
+      \032  servercmd xxx\n\
+      \032         This preference can be used to explicitly set the name of the\n\
+      \032         Unison executable on the remote server (e.g., giving a full path\n\
+      \032         name), if necessary.\n\
+      \n\
+      \032  showarchive\n\
+      \032         When this preference is set, Unison will print out the 'true\n\
+      \032         names'of the roots, in the same form as is expected by the\n\
+      \032         rootaliaspreference.\n\
+      \n\
+      \032  silent\n\
+      \032         When this preference is set to true, the textual user interface\n\
+      \032         will print nothing at all, except in the case of errors. Setting\n\
+      \032         silent to true automatically sets the batch preference to true.\n\
+      \n\
+      \032  sortbysize\n\
+      \032         When this flag is set, the user interface will list changed\n\
+      \032         files by size (smallest first) rather than by name. This is\n\
+      \032         useful, for example, for synchronizing over slow links, since it\n\
+      \032         puts very large files at the end of the list where they will not\n\
+      \032         prevent smaller files from being transferred quickly.\n\
+      \n\
+      \032         This preference (as well as the other sorting flags, but not the\n\
+      \032         sorting preferences that require patterns as arguments) can be\n\
+      \032         set interactively and temporarily using the 'Sort' menu in the\n\
+      \032         graphical user interface.\n\
+      \n\
+      \032  sortfirst xxx\n\
+      \032         Each argument to sortfirst is a pattern pathspec, which\n\
+      \032         describes a set of paths. Files matching any of these patterns\n\
+      \032         will be listed first in the user interface. The syntax of\n\
+      \032         pathspec is described in the section \"Path Specification\" .\n\
+      \n\
+      \032  sortlast xxx\n\
+      \032         Similar to sortfirst, except that files matching one of these\n\
+      \032         patterns will be listed at the very end.\n\
+      \n\
+      \032  sortnewfirst\n\
+      \032         When this flag is set, the user interface will list newly\n\
+      \032         created files before all others. This is useful, for example,\n\
+      \032         for checking that newly created files are not `junk', i.e., ones\n\
+      \032         that should be ignored or deleted rather than synchronized.\n\
+      \n\
+      \032  sshargs xxx\n\
+      \032         The string value of this preference will be passed as additional\n\
+      \032         arguments (besides the host name and the name of the Unison\n\
+      \032         executable on the remote system) to the ssh command used to\n\
+      \032         invoke the remote server.\n\
+      \n\
+      \032  sshcmd xxx\n\
+      \032         This preference can be used to explicitly set the name of the\n\
+      \032         ssh executable (e.g., giving a full path name), if necessary.\n\
+      \n\
+      \032  sshversion xxx\n\
+      \032         This preference can be used to control which version of ssh\n\
+      \032         should be used to connect to the server. Legal values are 1 and\n\
+      \032         2, which will cause unison to try to use ssh1 orssh2 instead of\n\
+      \032         just ssh to invoke ssh. The default value is empty, which will\n\
+      \032         make unison use whatever version of ssh is installed as the\n\
+      \032         default `ssh' command.\n\
+      \n\
+      \032  stream\n\
+      \032         When this preference is set, Unison will use an experimental\n\
+      \032         streaming protocol for transferring file contents more\n\
+      \032         efficiently. The default value is true.\n\
+      \n\
+      \032  terse\n\
+      \032         When this preference is set to true, the user interface will not\n\
+      \032         print status messages.\n\
+      \n\
+      \032  testserver\n\
+      \032         Setting this flag on the command line causes Unison to attempt\n\
+      \032         to connect to the remote server and, if successful, print a\n\
+      \032         message and immediately exit. Useful for debugging installation\n\
+      \032         problems. Should not be set in preference files.\n\
+      \n\
+      \032  times\n\
+      \032         When this flag is set to true, file modification times (but not\n\
+      \032         directory modtimes) are propagated.\n\
+      \n\
+      \032  ui xxx\n\
+      \032         This preference selects either the graphical or the textual user\n\
+      \032         interface. Legal values are graphic or text.\n\
+      \n\
+      \032         Because this option is processed specially during Unison's\n\
+      \032         start-up sequence, it can only be used on the command line. In\n\
+      \032         preference files it has no effect.\n\
+      \n\
+      \032         If the Unison executable was compiled with only a textual\n\
+      \032         interface, this option has no effect. (The pre-compiled binaries\n\
+      \032         are all compiled with both interfaces available.)\n\
+      \n\
+      \032  unicode xxx\n\
+      \032         When set to true, this flag causes Unison to perform case\n\
+      \032         insensitive file comparisons assuming Unicode encoding. This is\n\
+      \032         the default. When the flag is set to false, a Latin 1 encoding\n\
+      \032         is assumed. When Unison runs in case sensitive mode, this flag\n\
+      \032         only makes a difference if one host is running Windows or Mac OS\n\
+      \032         X. Under Windows, the flag selects between using the Unicode or\n\
+      \032         8bit Windows API for accessing the filesystem. Under Mac OS X,\n\
+      \032         it selects whether comparing the filenames up to decomposition,\n\
+      \032         or byte-for-byte.\n\
+      \n\
+      \032  version\n\
+      \032         Print the current version number and exit. (This option only\n\
+      \032         makes sense on the command line.)\n\
+      \n\
+      \032  xferbycopying\n\
+      \032         When this preference is set, Unison will try to avoid\n\
+      \032         transferring file contents across the network by recognizing\n\
+      \032         when a file with the required contents already exists in the\n\
+      \032         target replica. This usually allows file moves to be propagated\n\
+      \032         very quickly. The default value istrue.\n\
+      \n\
+      Profiles\n\
+      \n\
+      \032  A profile is a text file that specifies permanent settings for roots,\n\
+      \032  paths, ignore patterns, and other preferences, so that they do not need\n\
+      \032  to be typed at the command line every time Unison is run. Profiles\n\
+      \032  should reside in the .unison directory on the client machine. If Unison\n\
+      \032  is started with just one argument name on the command line, it looks\n\
+      \032  for a profile called name.prf in the .unison directory. If it is\n\
+      \032  started with no arguments, it scans the .unison directory for files\n\
+      \032  whose names end in .prf and offers a menu (provided that the Unison\n\
+      \032  executable is compiled with the graphical user interface). If a file\n\
+      \032  named default.prf is found, its settings will be offered as the default\n\
+      \032  choices.\n\
+      \n\
+      \032  To set the value of a preference p permanently, add to the appropriate\n\
+      \032  profile a line of the form\n\
+      \032       p = true\n\
+      \n\
+      \032  for a boolean flag or\n\
+      \032       p = <value>\n\
+      \n\
+      \032  for a preference of any other type.\n\
+      \n\
+      \032  Whitespaces around p and xxx are ignored. A profile may also include\n\
+      \032  blank lines and lines beginning with #; both are ignored.\n\
+      \n\
+      \032  When Unison starts, it first reads the profile and then the command\n\
+      \032  line, so command-line options will override settings from the profile.\n\
+      \n\
+      \032  Profiles may also include lines of the form include name, which will\n\
+      \032  cause the file name (or name.prf, if name does not exist in the .unison\n\
+      \032  directory) to be read at the point, and included as if its contents,\n\
+      \032  instead of the include line, was part of the profile. Include lines\n\
+      \032  allows settings common to several profiles to be stored in one place.\n\
+      \n\
+      \032  A profile may include a preference `label = desc' to provide a\n\
+      \032  description of the options selected in this profile. The string desc is\n\
+      \032  listed along with the profile name in the profile selection dialog, and\n\
+      \032  displayed in the top-right corner of the main Unison window in the\n\
+      \032  graphical user interface.\n\
+      \n\
+      \032  The graphical user-interface also supports one-key shortcuts for\n\
+      \032  commonly used profiles. If a profile contains a preference of the form\n\
+      \032  `key = n', where n is a single digit, then pressing this digit key will\n\
+      \032  cause Unison to immediately switch to this profile and begin\n\
+      \032  synchronization again from scratch. In this case, all actions that have\n\
+      \032  been selected for a set of changes currently being displayed will be\n\
+      \032  discarded.\n\
+      \n\
+      Sample Profiles\n\
+      \n\
+      A Minimal Profile\n\
+      \n\
+      \032  Here is a very minimal profile file, such as might be found in\n\
+      \032  .unison/default.prf:\n\
+      \032   # Roots of the synchronization\n\
+      \032   root = /home/bcpierce\n\
+      \032   root = ssh://saul//home/bcpierce\n\
+      \n\
+      \032   # Paths to synchronize\n\
+      \032   path = current\n\
+      \032   path = common\n\
+      \032   path = .netscape/bookmarks.html\n\
+      \n\
+      A Basic Profile\n\
+      \n\
+      \032  Here is a more sophisticated profile, illustrating some other useful\n\
+      \032  features.\n\
+      \032   # Roots of the synchronization\n\
+      \032   root = /home/bcpierce\n\
+      \032   root = ssh://saul//home/bcpierce\n\
+      \n\
+      \032   # Paths to synchronize\n\
+      \032   path = current\n\
+      \032   path = common\n\
+      \032   path = .netscape/bookmarks.html\n\
+      \n\
+      \032   # Some regexps specifying names and paths to ignore\n\
+      \032   ignore = Name temp.*\n\
+      \032   ignore = Name *~\n\
+      \032   ignore = Name .*~\n\
+      \032   ignore = Path */pilot/backup/Archive_*\n\
+      \032   ignore = Name *.o\n\
+      \032   ignore = Name *.tmp\n\
+      \n\
+      \032   # Window height\n\
+      \032   height = 37\n\
+      \n\
+      \032   # Keep a backup copy of every file in a central location\n\
+      \032   backuplocation = central\n\
+      \032   backupdir = /home/bcpierce/backups\n\
+      \032   backup = Name *\n\
+      \032   backupprefix = $VERSION.\n\
+      \032   backupsuffix =\n\
+      \n\
+      \032   # Use this command for displaying diffs\n\
+      \032   diff = diff -y -W 79 --suppress-common-lines\n\
+      \n\
+      \032   # Log actions to the terminal\n\
+      \032   log = true\n\
+      \n\
+      A Power-User Profile\n\
+      \n\
+      \032  When Unison is used with large replicas, it is often convenient to be\n\
+      \032  able to synchronize just a part of the replicas on a given run (this\n\
+      \032  saves the time of detecting updates in the other parts). This can be\n\
+      \032  accomplished by splitting up the profile into several parts -- a common\n\
+      \032  part containing most of the preference settings, plus one \"top-level\"\n\
+      \032  file for each set of paths that need to be synchronized. (The include\n\
+      \032  mechanism can also be used to allow the same set of preference settings\n\
+      \032  to be used with different roots.)\n\
+      \n\
+      \032  The collection of profiles implementing this scheme might look as\n\
+      \032  follows. The file default.prf is empty except for an include directive:\n\
+      \032   # Include the contents of the file common\n\
+      \032   include common\n\
+      \n\
+      \032  Note that the name of the common file is common, not common.prf; this\n\
+      \032  prevents Unison from offering common as one of the list of profiles in\n\
+      \032  the opening dialog (in the graphical UI).\n\
+      \n\
+      \032  The file common contains the real preferences:\n\
+      \032   # Roots of the synchronization\n\
+      \032   root = /home/bcpierce\n\
+      \032   root = ssh://saul//home/bcpierce\n\
+      \n\
+      \032   # (... other preferences ...)\n\
+      \n\
+      \032   # If any new preferences are added by Unison (e.g. 'ignore'\n\
+      \032   # preferences added via the graphical UI), then store them in the\n\
+      \032   # file 'common' rathen than in the top-level preference file\n\
+      \032   addprefsto = common\n\
+      \n\
+      \032   # Names and paths to ignore:\n\
+      \032   ignore = Name temp.*\n\
+      \032   ignore = Name *~\n\
+      \032   ignore = Name .*~\n\
+      \032   ignore = Path */pilot/backup/Archive_*\n\
+      \032   ignore = Name *.o\n\
+      \032   ignore = Name *.tmp\n\
+      \n\
+      \032  Note that there are no path preferences in common. This means that,\n\
+      \032  when we invoke Unison with the default profile (e.g., by typing 'unison\n\
+      \032  default' or just 'unison' on the command line), the whole replicas will\n\
+      \032  be synchronized. (If we never want to synchronize the whole replicas,\n\
+      \032  then default.prf would instead include settings for all the paths that\n\
+      \032  are usually synchronized.)\n\
+      \n\
+      \032  To synchronize just part of the replicas, Unison is invoked with an\n\
+      \032  alternate preference file--e.g., doing 'unison workingset', where the\n\
+      \032  preference file workingset.prf contains\n\
+      \032   path = current/papers\n\
+      \032   path = Mail/inbox\n\
+      \032   path = Mail/drafts\n\
+      \032   include common\n\
+      \n\
+      \032  causes Unison to synchronize just the listed subdirectories.\n\
+      \n\
+      \032  The key preference can be used in combination with the graphical UI to\n\
+      \032  quickly switch between different sets of paths. For example, if the\n\
+      \032  file mail.prf contains\n\
+      \032   path = Mail\n\
+      \032   batch = true\n\
+      \032   key = 2\n\
+      \032   include common\n\
+      \n\
+      \032  then pressing 2 will cause Unison to look for updates in the Mail\n\
+      \032  subdirectory and (because the batch flag is set) immediately propagate\n\
+      \032  any that it finds.\n\
+      \n\
+      Keeping Backups\n\
+      \n\
+      \032  When Unison overwrites a file or directory by propagating a new version\n\
+      \032  from the other replica, it can keep the old version around as a backup.\n\
+      \032  There are several preferences that control precisely where these\n\
+      \032  backups are stored and how they are named.\n\
+      \n\
+      \032  To enable backups, you must give one or more backup preferences. Each\n\
+      \032  of these has the form\n\
+      \032   backup = <pathspec>\n\
+      \n\
+      \032  where <pathspec> has the same form as for the ignore preference. For\n\
+      \032  example,\n\
+      \032   backup = Name *\n\
+      \n\
+      \032  causes Unison to keep backups of all files and directories. The\n\
+      \032  backupnot preference can be used to give a few exceptions: it specifies\n\
+      \032  which files and directories should not be backed up, even if they match\n\
+      \032  the backup pathspec.\n\
+      \n\
+      \032  It is important to note that the pathspec is matched against the path\n\
+      \032  that is being updated by Unison, not its descendants. For example, if\n\
+      \032  you set backup = Name *.txt and then delete a whole directory named foo\n\
+      \032  containing some text files, these files will not be backed up because\n\
+      \032  Unison will just check that foo does not match *.txt. Similarly, if the\n\
+      \032  directory itself happened to be called foo.txt, then the whole\n\
+      \032  directory and all the files in it will be backed up, regardless of\n\
+      \032  their names.\n\
+      \n\
+      \032  Backup files can be stored either centrally or locally. This behavior\n\
+      \032  is controlled by the preference backuplocation, whose value must be\n\
+      \032  either central or local. (The default is central.)\n\
+      \n\
+      \032  When backups are stored locally, they are kept in the same directory as\n\
+      \032  the original.\n\
+      \n\
+      \032  When backups are stored centrally, the directory used to hold them is\n\
+      \032  controlled by the preference backupdir and the environment variable\n\
+      \032  UNISONBACKUPDIR. (The environment variable is checked first.) If\n\
+      \032  neither of these are set, then the directory .unison/backup in the\n\
+      \032  user's home directory is used.\n\
+      \n\
+      \032  The preference maxbackups controls how many previous versions of each\n\
+      \032  file are kept (including the current version).\n\
+      \n\
+      \032  By default, backup files are named .bak.VERSION.FILENAME, where\n\
+      \032  FILENAME is the original filename and VERSION is the backup number (1\n\
+      \032  for the most recent, 2 for the next most recent, etc.). This can be\n\
+      \032  changed by setting the preferences backupprefix and/or backupsuffix. If\n\
+      \032  desired, backupprefix may include a directory prefix; this can be used\n\
+      \032  with backuplocation = local to put all backup files for each directory\n\
+      \032  into a single subdirectory. For example, setting\n\
+      \032   backuplocation = local\n\
+      \032   backupprefix = .unison/$VERSION.\n\
+      \032   backupsuffix =\n\
+      \n\
+      \032  will put all backups in a local subdirectory named .unison. Also, note\n\
+      \032  that the string $VERSION in either backupprefix or backupsuffix (it\n\
+      \032  must appear in one or the other) is replaced by the version number.\n\
+      \032  This can be used, for example, to ensure that backup files retain the\n\
+      \032  same extension as the originals.\n\
+      \n\
+      \032  For backward compatibility, the backups preference is also supported.\n\
+      \032  It simply means backup = Name * and backuplocation = local.\n\
+      \n\
+      Merging Conflicting Versions\n\
+      \n\
+      \032  Unison can invoke external programs to merge conflicting versions of a\n\
+      \032  file. The preference merge controls this process.\n\
+      \n\
+      \032  The merge preference may be given once or several times in a preference\n\
+      \032  file (it can also be given on the command line, of course, but this\n\
+      \032  tends to be awkward because of the spaces and special characters\n\
+      \032  involved). Each instance of the preference looks like this:\n\
+      \032   merge = <PATHSPEC> -> <MERGECMD>\n\
+      \n\
+      \032  The <PATHSPEC> here has exactly the same format as for the ignore\n\
+      \032  preference (see the section \"Path specification\" ). For example, using\n\
+      \032  \"Name *.txt\" as the <PATHSPEC> tells Unison that this command should be\n\
+      \032  used whenever a file with extension .txt needs to be merged.\n\
+      \n\
+      \032  Many external merging programs require as inputs not just the two files\n\
+      \032  that need to be merged, but also a file containing the last\n\
+      \032  synchronized version. You can ask Unison to keep a copy of the last\n\
+      \032  synchronized version for some files using the backupcurrent preference.\n\
+      \032  This preference is used in exactly the same way as backup and its\n\
+      \032  meaning is similar, except that it causes backups to be kept of the\n\
+      \032  current contents of each file after it has been synchronized by Unison,\n\
+      \032  rather than the previous contents that Unison overwrote. These backups\n\
+      \032  are kept on both replicas in the same place as ordinary backup\n\
+      \032  files--i.e. according to the backuplocation and backupdir preferences.\n\
+      \032  They are named like the original files if backupslocation is set to\n\
+      \032  'central' and otherwise, Unison uses the backupprefix and backupsuffix\n\
+      \032  preferences and assumes a version number 000 for these backups.\n\
+      \n\
+      \032  The <MERGECMD> part of the preference specifies what external command\n\
+      \032  should be invoked to merge files at paths matching the <PATHSPEC>.\n\
+      \032  Within this string, several special substrings are recognized; these\n\
+      \032  will be substituted with appropriate values before invoking a sub-shell\n\
+      \032  to execute the command.\n\
+      \032    * CURRENT1 is replaced by the name of (a temporary copy of) the local\n\
+      \032      variant of the file.\n\
+      \032    * CURRENT2 is replaced by the name of a temporary file, into which\n\
+      \032      the contents of the remote variant of the file have been\n\
+      \032      transferred by Unison prior to performing the merge.\n\
+      \032    * CURRENTARCH is replaced by the name of the backed up copy of the\n\
+      \032      original version of the file (i.e., the file saved by Unison if the\n\
+      \032      current filename matches the path specifications for the\n\
+      \032      backupcurrent preference, as explained above), if one exists. If no\n\
+      \032      archive exists and CURRENTARCH appears in the merge command, then\n\
+      \032      an error is signalled.\n\
+      \032    * CURRENTARCHOPT is replaced by the name of the backed up copy of the\n\
+      \032      original version of the file (i.e., its state at the end of the\n\
+      \032      last successful run of Unison), if one exists, or the empty string\n\
+      \032      if no archive exists.\n\
+      \032    * NEW is replaced by the name of a temporary file that Unison expects\n\
+      \032      to be written by the merge program when it finishes, giving the\n\
+      \032      desired new contents of the file.\n\
+      \032    * PATH is replaced by the path (relative to the roots of the\n\
+      \032      replicas) of the file being merged.\n\
+      \032    * NEW1 and NEW2 are replaced by the names of temporary files that\n\
+      \032      Unison expects to be written by the merge program when it is only\n\
+      \032      able to partially merge the originals; in this case, NEW1 will be\n\
+      \032      written back to the local replica and NEW2 to the remote replica;\n\
+      \032      NEWARCH, if present, will be used as the \"last common state\" of the\n\
+      \032      replicas. (These three options are provided for later compatibility\n\
+      \032      with the Harmony data synchronizer.)\n\
+      \n\
+      \032  To accommodate the wide variety of programs that users might want to\n\
+      \032  use for merging, Unison checks for several possible situations when the\n\
+      \032  merge program exits:\n\
+      \032    * If the merge program exits with a non-zero status, then merge is\n\
+      \032      considered to have failed and the replicas are not changed.\n\
+      \032    * If the file NEW has been created, it is written back to both\n\
+      \032      replicas (and stored in the backup directory). Similarly, if just\n\
+      \032      the file NEW1 has been created, it is written back to both\n\
+      \032      replicas.\n\
+      \032    * If neither NEW nor NEW1 have been created, then Unison examines the\n\
+      \032      temporary files CURRENT1 and CURRENT2 that were given as inputs to\n\
+      \032      the merge program. If either has been changed (or both have been\n\
+      \032      changed in identical ways), then its new contents are written back\n\
+      \032      to both replicas. If either CURRENT1 or CURRENT2 has been deleted,\n\
+      \032      then the contents of the other are written back to both replicas.\n\
+      \032    * If the files NEW1, NEW2, and NEWARCH have all been created, they\n\
+      \032      are written back to the local replica, remote replica, and backup\n\
+      \032      directory, respectively. If the files NEW1, NEW2 have been created,\n\
+      \032      but NEWARCH has not, then these files are written back to the local\n\
+      \032      replica and remote replica, respectively. Also, if NEW1 and NEW2\n\
+      \032      have identical contents, then the same contents are stored as a\n\
+      \032      backup (if the backupcurrent preference is set for this path) to\n\
+      \032      reflect the fact that the path is currently in sync.\n\
+      \032    * If NEW1 and NEW2 (resp. CURRENT1 and CURRENT2) are created (resp.\n\
+      \032      overwritten) with different contents but the merge command did not\n\
+      \032      fail (i.e., it exited with status code 0), then we copy NEW1 (resp.\n\
+      \032      CURRENT1) to the other replica and to the archive.\n\
+      \032      This behavior is a design choice made to handle the case where a\n\
+      \032      merge command only synchronizes some specific contents between two\n\
+      \032      files, skipping some irrelevant information (order between entries,\n\
+      \032      for instance). We assume that, if the merge command exits normally,\n\
+      \032      then the two resulting files are \"as good as equal.\" (The reason we\n\
+      \032      copy one on top of the other is to avoid Unison detecting that the\n\
+      \032      files are unequal the next time it is run and trying again to merge\n\
+      \032      them when, in fact, the merge program has already made them as\n\
+      \032      similar as it is able to.)\n\
+      \n\
+      \032  If the confirmmerge preference is set and Unison is not run in batch\n\
+      \032  mode, then Unison will always ask for confirmation before actually\n\
+      \032  committing the results of the merge to the replicas.\n\
+      \n\
+      \032  A large number of external merging programs are available. For example,\n\
+      \032  on Unix systems setting the merge preference to\n\
+      \032   merge = Name *.txt -> diff3 -m CURRENT1 CURRENTARCH CURRENT2\n\
+      \032                           > NEW || echo \"differences detected\"\n\
+      \n\
+      \032  will tell Unison to use the external diff3 program for merging.\n\
+      \032  Alternatively, users of emacs may find the following settings\n\
+      \032  convenient:\n\
+      \032   merge = Name *.txt -> emacs -q --eval '(ediff-merge-files-with-ancestor\n\
+      \032                            \"CURRENT1\" \"CURRENT2\" \"CURRENTARCH\" nil \"NEW\")'\n\
+      \n\
+      \032  (These commands are displayed here on two lines to avoid running off\n\
+      \032  the edge of the page. In your preference file, each command should be\n\
+      \032  written on a single line.)\n\
+      \n\
+      \032  Users running emacs under windows may find something like this useful:\n\
+      \032  merge = Name * -> C:\\Progra~1\\Emacs\\emacs\\bin\\emacs.exe -q --eval\n\
+      \032                           \"(ediff-files \"\"\"CURRENT1\"\"\" \"\"\"CURRENT2\"\"\")\"\n\
+      \n\
+      \032  Users running Mac OS X (you may need the Developer Tools installed to\n\
+      \032  get the opendiff utility) may prefer\n\
+      \032   merge = Name *.txt -> opendiff CURRENT1 CURRENT2 -ancestor CURRENTARCH -merg\n\
+      e NEW\n\
+      \n\
+      \032  Here is a slightly more involved hack. The opendiff program can operate\n\
+      \032  either with or without an archive file. A merge command of this form\n\
+      \032   merge = Name *.txt ->\n\
+      \032             if [ CURRENTARCHOPTx = x ];\n\
+      \032             then opendiff CURRENT1 CURRENT2 -merge NEW;\n\
+      \032             else opendiff CURRENT1 CURRENT2 -ancestor CURRENTARCHOPT -merge NE\n\
+      W;\n\
+      \032             fi\n\
+      \n\
+      \032  (still all on one line in the preference file!) will test whether an\n\
+      \032  archive file exists and use the appropriate variant of the arguments to\n\
+      \032  opendiff.\n\
+      \n\
+      \032  Ordinarily, external merge programs are only invoked when Unison is not\n\
+      \032  running in batch mode. To specify an external merge program that should\n\
+      \032  be used no matter the setting of the batch flag, use the mergebatch\n\
+      \032  preference instead of merge.\n\
+      \n\
+      \032    Please post suggestions for other useful values of the merge\n\
+      \032    preference to the unison-users mailing list--we'd like to give\n\
+      \032    several examples here.\n\
+      \n\
+      The User Interface\n\
+      \n\
+      \032  Both the textual and the graphical user interfaces are intended to be\n\
+      \032  mostly self-explanatory. Here are just a few tricks:\n\
+      \032    * By default, when running on Unix the textual user interface will\n\
+      \032      try to put the terminal into the \"raw mode\" so that it reads the\n\
+      \032      input a character at a time rather than a line at a time. (This\n\
+      \032      means you can type just the single keystroke \">\" to tell Unison to\n\
+      \032      propagate a file from left to right, rather than \"> Enter.\")\n\
+      \032      There are some situations, though, where this will not work -- for\n\
+      \032      example, when Unison is running in a shell window inside Emacs.\n\
+      \032      Setting the dumbtty preference will force Unison to leave the\n\
+      \032      terminal alone and process input a line at a time.\n\
+      \n\
+      Exit code\n\
+      \n\
+      \032  When running in the textual mode, Unison returns an exit status, which\n\
+      \032  describes whether, and at which level, the synchronization was\n\
+      \032  successful. The exit status could be useful when Unison is invoked from\n\
+      \032  a script. Currently, there are four possible values for the exit\n\
+      \032  status:\n\
+      \032    * 0: successful synchronization; everything is up-to-date now.\n\
+      \032    * 1: some files were skipped, but all file transfers were successful.\n\
+      \032    * 2: non-fatal failures occurred during file transfer.\n\
+      \032    * 3: a fatal error occurred, or the execution was interrupted.\n\
+      \n\
+      \032  The graphical interface does not return any useful information through\n\
+      \032  the exit status.\n\
+      \n\
+      Path specification\n\
+      \n\
+      \032  Several Unison preferences (e.g., ignore/ignorenot, follow,\n\
+      \032  sortfirst/sortlast, backup, merge, etc.) specify individual paths or\n\
+      \032  sets of paths. These preferences share a common syntax based on\n\
+      \032  regular-expressions. Each preference is associated with a list of path\n\
+      \032  patterns; the paths specified are those that match any one of the path\n\
+      \032  pattern.\n\
+      \032    * Pattern preferences can be given on the command line, or, more\n\
+      \032      often, stored in profiles, using the same syntax as other\n\
+      \032      preferences. For example, a profile line of the form\n\
+      \032            ignore = pattern\n\
+      \n\
+      \032      adds pattern to the list of patterns to be ignored.\n\
+      \032    * Each pattern can have one of three forms. The most general form is\n\
+      \032      a Posix extended regular expression introduced by the keyword\n\
+      \032      Regex. (The collating sequences and character classes of full Posix\n\
+      \032      regexps are not currently supported).\n\
+      \032                Regex regexp\n\
+      \n\
+      \032      For convenience, three other styles of pattern are also recognized:\n\
+      \032                Name name\n\
+      \n\
+      \032      matches any path in which the last component matches name,\n\
+      \032                Path path\n\
+      \n\
+      \032      matches exactly the path path, and\n\
+      \032                BelowPath path\n\
+      \n\
+      \032      matches the path path and any path below. The name and path\n\
+      \032      arguments of the latter forms of patterns are not regular\n\
+      \032      expressions. Instead, standard \"globbing\" conventions can be used\n\
+      \032      in name and path:\n\
+      \032         + a * matches any sequence of characters not including / (and\n\
+      \032           not beginning with ., when used at the beginning of a name)\n\
+      \032         + a ? matches any single character except / (and leading .)\n\
+      \032         + [xyz] matches any character from the set {x, y, z }\n\
+      \032         + {a,bb,ccc} matches any one of a, bb, or ccc.\n\
+      \032    * The path separator in path patterns is always the forward-slash\n\
+      \032      character \"/\" -- even when the client or server is running under\n\
+      \032      Windows, where the normal separator character is a backslash. This\n\
+      \032      makes it possible to use the same set of path patterns for both\n\
+      \032      Unix and Windows file systems.\n\
+      \n\
+      \032  Some examples of path patterns appear in the section \"Ignoring Paths\" .\n\
+      \n\
+      Ignoring Paths\n\
+      \n\
+      \032  Most users of Unison will find that their replicas contain lots of\n\
+      \032  files that they don't ever want to synchronize -- temporary files, very\n\
+      \032  large files, old stuff, architecture-specific binaries, etc. They can\n\
+      \032  instruct Unison to ignore these paths using patterns introduced in the\n\
+      \032  section \"Path Patterns\" .\n\
+      \n\
+      \032  For example, the following pattern will make Unison ignore any path\n\
+      \032  containing the name CVS or a name ending in .cmo:\n\
+      \032            ignore = Name {CVS,*.cmo}\n\
+      \n\
+      \032  The next pattern makes Unison ignore the path a/b:\n\
+      \032            ignore = Path a/b\n\
+      \n\
+      \032  Path patterns do not skip filesnames beginning with . (as Name patterns\n\
+      \032  do). For example,\n\
+      \032            ignore = Path */tmp\n\
+      \n\
+      \032  will include .foo/tmp in the set of ignore directories, as it is a\n\
+      \032  path, not a name, that is ignored.\n\
+      \n\
+      \032  The following pattern makes Unison ignore any path beginning with a/b\n\
+      \032  and ending with a name ending by .ml.\n\
+      \032            ignore = Regex a/b/.*\\.ml\n\
+      \n\
+      \032  Note that regular expression patterns are \"anchored\": they must match\n\
+      \032  the whole path, not just a substring of the path.\n\
+      \n\
+      \032  Here are a few extra points regarding the ignore preference.\n\
+      \032    * If a directory is ignored, all its descendents will be too.\n\
+      \032    * The user interface provides some convenient commands for adding new\n\
+      \032      patterns to be ignored. To ignore a particular file, select it and\n\
+      \032      press \"i\". To ignore all files with the same extension, select it\n\
+      \032      and press \"E\" (with the shift key). To ignore all files with the\n\
+      \032      same name, no matter what directory they appear in, select it and\n\
+      \032      press \"N\". These new patterns become permanent: they are\n\
+      \032      immediately added to the current profile on disk.\n\
+      \032    * If you use the include directive to include a common collection of\n\
+      \032      preferences in several top-level preference files, you will\n\
+      \032      probably also want to set the addprefsto preference to the name of\n\
+      \032      this file. This will cause any new ignore patterns that you add\n\
+      \032      from inside Unison to be appended to this file, instead of\n\
+      \032      whichever top-level preference file you started Unison with.\n\
+      \032    * Ignore patterns can also be specified on the command line, if you\n\
+      \032      like (this is probably not very useful), using an option like\n\
+      \032      -ignore 'Name temp.txt'.\n\
+      \032    * Be careful about renaming directories containing ignored files.\n\
+      \032      Because Unison understands the rename as a delete plus a create,\n\
+      \032      any ignored files in the directory will be lost (since they are\n\
+      \032      invisible to Unison and therefore they do not get recreated in the\n\
+      \032      new version of the directory).\n\
+      \032    * There is also an ignorenot preference, which specifies a set of\n\
+      \032      patterns for paths that should not be ignored, even if they match\n\
+      \032      an ignore pattern. However, the interaction of these two sets of\n\
+      \032      patterns can be a little tricky. Here is exactly how it works:\n\
+      \032         + Unison starts detecting updates from the root of the\n\
+      \032           replicas--i.e., from the empty path. If the empty path matches\n\
+      \032           an ignore pattern and does not match an ignorenot pattern,\n\
+      \032           then the whole replica will be ignored. (For this reason, it\n\
+      \032           is not a good idea to include Name * as an ignore pattern. If\n\
+      \032           you want to ignore everything except a certain set of files,\n\
+      \032           use Name ?*.)\n\
+      \032         + If the root is a directory, Unison continues looking for\n\
+      \032           updates in all the immediate children of the root. Again, if\n\
+      \032           the name of some child matches an ignore pattern and does not\n\
+      \032           match an ignorenot pattern, then this whole path including\n\
+      \032           everything below it will be ignored.\n\
+      \032         + If any of the non-ignored children are directories, then the\n\
+      \032           process continues recursively.\n\
+      \n\
+      Symbolic Links\n\
+      \n\
+      \032  Ordinarily, Unison treats symbolic links in Unix replicas as \"opaque\":\n\
+      \032  it considers the contents of the link to be just the string specifying\n\
+      \032  where the link points, and it will propagate changes in this string to\n\
+      \032  the other replica.\n\
+      \n\
+      \032  It is sometimes useful to treat a symbolic link \"transparently,\" acting\n\
+      \032  as though whatever it points to were physically in the replica at the\n\
+      \032  point where the symbolic link appears. To tell Unison to treat a link\n\
+      \032  in this manner, add a line of the form\n\
+      \032            follow = pathspec\n\
+      \n\
+      \032  to the profile, where pathspec is a path pattern as described in the\n\
+      \032  section \"Path Patterns\" .\n\
+      \n\
+      \032  Windows file systems do not support symbolic links; Unison will refuse\n\
+      \032  to propagate an opaque symbolic link from Unix to Windows and flag the\n\
+      \032  path as erroneous. When a Unix replica is to be synchronized with a\n\
+      \032  Windows system, all symbolic links should match either an ignore\n\
+      \032  pattern or a follow pattern.\n\
+      \n\
+      Permissions\n\
+      \n\
+      \032  Synchronizing the permission bits of files is slightly tricky when two\n\
+      \032  different filesytems are involved (e.g., when synchronizing a Windows\n\
+      \032  client and a Unix server). In detail, here's how it works:\n\
+      \032    * When the permission bits of an existing file or directory are\n\
+      \032      changed, the values of those bits that make sense on both operating\n\
+      \032      systems will be propagated to the other replica. The other bits\n\
+      \032      will not be changed.\n\
+      \032    * When a newly created file is propagated to a remote replica, the\n\
+      \032      permission bits that make sense in both operating systems are also\n\
+      \032      propagated. The values of the other bits are set to default values\n\
+      \032      (they are taken from the current umask, if the receiving host is a\n\
+      \032      Unix system).\n\
+      \032    * For security reasons, the Unix setuid and setgid bits are not\n\
+      \032      propagated.\n\
+      \032    * The Unix owner and group ids are not propagated. (What would this\n\
+      \032      mean, in general?) All files are created with the owner and group\n\
+      \032      of the server process.\n\
+      \n\
+      Cross-Platform Synchronization\n\
+      \n\
+      \032  If you use Unison to synchronize files between Windows and Unix\n\
+      \032  systems, there are a few special issues to be aware of.\n\
+      \n\
+      \032  Case conflicts. In Unix, filenames are case sensitive: foo and FOO can\n\
+      \032  refer to different files. In Windows, on the other hand, filenames are\n\
+      \032  not case sensitive: foo and FOO can only refer to the same file. This\n\
+      \032  means that a Unix foo and FOO cannot be synchronized onto a Windows\n\
+      \032  system -- Windows won't allow two different files to have the \"same\"\n\
+      \032  name. Unison detects this situation for you, and reports that it cannot\n\
+      \032  synchronize the files.\n\
+      \n\
+      \032  You can deal with a case conflict in a couple of ways. If you need to\n\
+      \032  have both files on the Windows system, your only choice is to rename\n\
+      \032  one of the Unix files to avoid the case conflict, and re-synchronize.\n\
+      \032  If you don't need the files on the Windows system, you can simply\n\
+      \032  disregard Unison's warning message, and go ahead with the\n\
+      \032  synchronization; Unison won't touch those files. If you don't want to\n\
+      \032  see the warning on each synchronization, you can tell Unison to ignore\n\
+      \032  the files (see the section \"Ignore\" ).\n\
+      \n\
+      \032  Illegal filenames. Unix allows some filenames that are illegal in\n\
+      \032  Windows. For example, colons (`:') are not allowed in Windows\n\
+      \032  filenames, but they are legal in Unix filenames. This means that a Unix\n\
+      \032  file foo:bar can't be synchronized to a Windows system. As with case\n\
+      \032  conflicts, Unison detects this situation for you, and you have the same\n\
+      \032  options: you can either rename the Unix file and re-synchronize, or you\n\
+      \032  can ignore it.\n\
+      \n\
+      Slow Links\n\
+      \n\
+      \032  Unison is built to run well even over relatively slow links such as\n\
+      \032  modems and DSL connections.\n\
+      \n\
+      \032  Unison uses the \"rsync protocol\" designed by Andrew Tridgell and Paul\n\
+      \032  Mackerras to greatly speed up transfers of large files in which only\n\
+      \032  small changes have been made. More information about the rsync protocol\n\
+      \032  can be found at the rsync web site (http://samba.anu.edu.au/rsync/).\n\
+      \n\
+      \032  If you are using Unison with ssh, you may get some speed improvement by\n\
+      \032  enabling ssh's compression feature. Do this by adding the option\n\
+      \032  \"-sshargs -C\" to the command line or \"sshargs = -C\" to your profile.\n\
+      \n\
+      Making Unison Faster on Large Files\n\
+      \n\
+      \032  Unison's built-in implementation of the rsync algorithm makes\n\
+      \032  transferring updates to existing files pretty fast. However, for\n\
+      \032  whole-file copies of newly created files, the built-in transfer method\n\
+      \032  is not highly optimized. Also, if Unison is interrupted in the middle\n\
+      \032  of transferring a large file, it will attempt to retransfer the whole\n\
+      \032  thing on the next run.\n\
+      \n\
+      \032  These shortcomings can be addressed with a little extra work by telling\n\
+      \032  Unison to use an external file copying utility for whole-file\n\
+      \032  transfers. The recommended one is the standalone rsync tool, which is\n\
+      \032  available by default on most Unix systems and can easily be installed\n\
+      \032  on Windows systems using Cygwin.\n\
+      \n\
+      \032  If you have rsync installed on both hosts, you can make Unison use it\n\
+      \032  simply by setting the copythreshold flag to something non-negative. If\n\
+      \032  you set it to 0, Unison will use the external copy utility for all\n\
+      \032  whole-file transfers. (This is probably slower than letting Unison copy\n\
+      \032  small files by itself, but can be useful for testing.) If you set it to\n\
+      \032  a larger value, Unison will use the external utility for all files\n\
+      \032  larger than this size (which is given in kilobytes, so setting it to\n\
+      \032  1000 will cause the external tool to be used for all transfers larger\n\
+      \032  than a megabyte).\n\
+      \n\
+      \032  If you want to use a different external copy utility, set both the\n\
+      \032  copyprog and copyprogpartial preferences--the former is used for the\n\
+      \032  first transfer of a file, while the latter is used when Unison sees a\n\
+      \032  partially transferred temp file on the receiving host. Be careful here:\n\
+      \032  Your external tool needs to be instructed to copy files in place\n\
+      \032  (otherwise if the transfer is interrupted Unison will not notice that\n\
+      \032  some of the data has already been transferred, the next time it tries).\n\
+      \032  The default values are:\n\
+      \032  copyprog      =   rsync --inplace --compress\n\
+      \032  copyprogrest  =   rsync --partial --inplace --compress\n\
+      \n\
+      \032  You may also need to set the copyquoterem preference. When it is set to\n\
+      \032  true, this causes Unison to add an extra layer of quotes to the remote\n\
+      \032  path passed to the external copy program. This is is needed by rsync,\n\
+      \032  for example, which internally uses an ssh connection, requiring an\n\
+      \032  extra level of quoting for paths containing spaces. When this flag is\n\
+      \032  set to default, extra quotes are added if the value of copyprog\n\
+      \032  contains the string rsync. The default value is default, naturally.\n\
+      \n\
+      \032  If a directory transfer is interrupted, the next run of Unison will\n\
+      \032  automatically skip any files that were completely transferred before\n\
+      \032  the interruption. (This behavior is always on: it does not depend on\n\
+      \032  the setting of the copythreshold preference.) Note, though, that the\n\
+      \032  new directory will not appear in the destination filesystem until\n\
+      \032  everything has been transferred--partially transferred directories are\n\
+      \032  kept in a temporary location (with names like .unison.DIRNAME....)\n\
+      \032  until the transfer is complete.\n\
+      \n\
+      Fast Update Detection\n\
+      \n\
+      \032  If your replicas are large and at least one of them is on a Windows\n\
+      \032  system, you may find that Unison's default method for detecting changes\n\
+      \032  (which involves scanning the full contents of every file on every\n\
+      \032  sync--the only completely safe way to do it under Windows) is too slow.\n\
+      \032  Unison provides a preference fastcheck that, when set to true, causes\n\
+      \032  it to use file creation times as 'pseudo inode numbers' when scanning\n\
+      \032  replicas for updates, instead of reading the full contents of every\n\
+      \032  file.\n\
+      \n\
+      \032  When fastcheck is set to no, Unison will perform slow\n\
+      \032  checking--re-scanning the contents of each file on each\n\
+      \032  synchronization--on all replicas. When fastcheck is set to default\n\
+      \032  (which, naturally, is the default), Unison will use fast checks on Unix\n\
+      \032  replicas and slow checks on Windows replicas.\n\
+      \n\
+      \032  This strategy may cause Unison to miss propagating an update if the\n\
+      \032  modification time and length of the file are both unchanged by the\n\
+      \032  update. However, Unison will never overwrite such an update with a\n\
+      \032  change from the other replica, since it always does a safe check for\n\
+      \032  updates just before propagating a change. Thus, it is reasonable to use\n\
+      \032  this switch most of the time and occasionally run Unison once with\n\
+      \032  fastcheck set to no, if you are worried that Unison may have overlooked\n\
+      \032  an update.\n\
+      \n\
+      \032  Fastcheck is (always) automatically disabled for files with extension\n\
+      \032  .xls or .mpp, to prevent Unison from being confused by the habits of\n\
+      \032  certain programs (Excel, in particular) of updating files without\n\
+      \032  changing their modification times.\n\
+      \n\
+      Mount Points and Removable Media\n\
+      \n\
+      \032  Using Unison removable media such as USB drives can be dangerous unless\n\
+      \032  you are careful. If you synchronize a directory that is stored on\n\
+      \032  removable media when the media is not present, it will look to Unison\n\
+      \032  as though the whole directory has been deleted, and it will proceed to\n\
+      \032  delete the directory from the other replica--probably not what you\n\
+      \032  want!\n\
+      \n\
+      \032  To prevent accidents, Unison provides a preference called mountpoint.\n\
+      \032  Including a line like\n\
+      \032            mountpoint = foo\n\
+      \n\
+      \032  in your preference file will cause Unison to check, after it finishes\n\
+      \032  detecting updates, that something actually exists at the path foo on\n\
+      \032  both replicas; if it does not, the Unison run will abort.\n\
+      \n\
+      Click-starting Unison\n\
+      \n\
+      \032  On Windows NT/2k/XP systems, the graphical version of Unison can be\n\
+      \032  invoked directly by clicking on its icon. On Windows 95/98 systems,\n\
+      \032  click-starting also works, as long as you are not using ssh. Due to an\n\
+      \032  incompatibility with ocaml and Windows 95/98 that is not under our\n\
+      \032  control, you must start Unison from a DOS window in Windows 95/98 if\n\
+      \032  you want to use ssh.\n\
+      \n\
+      \032  When you click on the Unison icon, two windows will be created:\n\
+      \032  Unison's regular window, plus a console window, which is used only for\n\
+      \032  giving your password to ssh (if you do not use ssh to connect, you can\n\
+      \032  ignore this window). When your password is requested, you'll need to\n\
+      \032  activate the console window (e.g., by clicking in it) before typing. If\n\
+      \032  you start Unison from a DOS window, Unison's regular window will appear\n\
+      \032  and you will type your password in the DOS window you were using.\n\
+      \n\
+      \032  To use Unison in this mode, you must first create a profile (see the\n\
+      \032  section \"Profile\" ). Use your favorite editor for this.\n\
+      \n\
+      "))
+::
+    ("ssh", ("Installing Ssh", 
+     "Installing Ssh\n\
+      \n\
+      \032  Warning: These instructions may be out of date. More current\n\
+      \032  information can be found the Unison Wiki\n\
+      \032  (http://alliance.seas.upenn.edu/ bcpierce/wiki/index.php?n=Main.UnisonF\n\
+      \032  AQOSSpecific).\n\
+      \n\
+      \032  Your local host will need just an ssh client; the remote host needs an\n\
+      \032  ssh server (or daemon), which is available on Unix systems. Unison is\n\
+      \032  known to work with ssh version 1.2.27 (Unix) and version 1.2.14\n\
+      \032  (Windows); other versions may or may not work.\n\
+      \n\
+      Unix\n\
+      \n\
+      \032  Most modern Unix installations come with ssh pre-installed.\n\
+      \n\
+      Windows\n\
+      \n\
+      \032  Many Windows implementations of ssh only provide graphical interfaces,\n\
+      \032  but Unison requires an ssh client that it can invoke with a\n\
+      \032  command-line interface. A suitable version of ssh can be installed as\n\
+      \032  follows.\n\
+      \032   1. Download an ssh executable.\n\
+      \032      Warning: there are many implementations and ports of ssh for\n\
+      \032      Windows, and not all of them will work with Unison. We have gotten\n\
+      \032      Unison to work with Cygwin's port of openssh, and we suggest you\n\
+      \032      try that one first. Here's how to install it:\n\
+      \032        a. First, create a new folder on your desktop to hold temporary\n\
+      \032           installation files. It can have any name you like, but in\n\
+      \032           these instructions we'll assume that you call it Foo.\n\
+      \032        b. Direct your web browser to www.cygwin.com, and click on the\n\
+      \032           \"Install now!\" link. This will download a file, setup.exe;\n\
+      \032           save it in the directory Foo. The file setup.exe is a small\n\
+      \032           program that will download the actual install files from the\n\
+      \032           Internet when you run it.\n\
+      \032        c. Start setup.exe (by double-clicking). This brings up a series\n\
+      \032           of dialogs that you will have to go through. Select \"Install\n\
+      \032           from Internet.\" For \"Local Package Directory\" select the\n\
+      \032           directory Foo. For \"Select install root directory\" we\n\
+      \032           recommend that you use the default, C:\\cygwin. The next dialog\n\
+      \032           asks you to select the way that you want to connect to the\n\
+      \032           network to download the installation files; we have used \"Use\n\
+      \032           IE5 Settings\" successfully, but you may need to make a\n\
+      \032           different selection depending on your networking setup. The\n\
+      \032           next dialog gives a list of mirrors; select one close to you.\n\
+      \032           Next you are asked to select which packages to install. The\n\
+      \032           default settings in this dialog download a lot of packages\n\
+      \032           that are not strictly necessary to run Unison with ssh. If you\n\
+      \032           don't want to install a package, click on it until \"skip\" is\n\
+      \032           shown. For a minimum installation, select only the packages\n\
+      \032           \"cygwin\" and \"openssh,\" which come to about 1900KB; the full\n\
+      \032           installation is much larger.\n\
+      \n\
+      \032    Note that you are plan to build unison using the free CygWin GNU C\n\
+      \032    compiler, you need to install essential development packages such as\n\
+      \032    \"gcc\", \"make\", \"fileutil\", etc; we refer to the file\n\
+      \032    \"INSTALL.win32-cygwin-gnuc\" in the source distribution for further\n\
+      \032    details.\n\
+      \032           After the packages are downloaded and installed, the next\n\
+      \032           dialog allows you to choose whether to \"Create Desktop Icon\"\n\
+      \032           and \"Add to Start Menu.\" You make the call.\n\
+      \032        d. You can now delete the directory Foo and its contents.\n\
+      \032      Some people have reported problems using Cygwin's ssh with Unison.\n\
+      \032      If you have trouble, you might try other ones instead:\n\
+      \032 http://linuxmafia.com/ssh/win32.html\n\
+      \n\
+      \032   2. You must set the environment variables HOME and PATH. Ssh will\n\
+      \032      create a directory .ssh in the directory given by HOME, so that it\n\
+      \032      has a place to keep data like your public and private keys. PATH\n\
+      \032      must be set to include the Cygwin bin directory, so that Unison can\n\
+      \032      find the ssh executable.\n\
+      \032         + On Windows 95/98, add the lines\n\
+      \032   set PATH=%PATH%;<SSHDIR>\n\
+      \032   set HOME=<HOMEDIR>\n\
+      \n\
+      \032           to the file C:\\AUTOEXEC.BAT, where <HOMEDIR> is the directory\n\
+      \032           where you want ssh to create its .ssh directory, and <SSHDIR>\n\
+      \032           is the directory where the executable ssh.exe is stored; if\n\
+      \032           you've installed Cygwin in the default location, this is\n\
+      \032           C:\\cygwin\\bin. You will have to reboot your computer to take\n\
+      \032           the changes into account.\n\
+      \032         + On Windows NT/2k/XP, open the environment variables dialog\n\
+      \032           box:\n\
+      \032              o Windows NT: My Computer/Properties/Environment\n\
+      \032              o Windows 2k: My Computer/Properties/Advanced/Environment\n\
+      \032                variables\n\
+      \032           then select Path and edit its value by appending ;<SSHDIR> to\n\
+      \032           it, where <SSHDIR> is the full name of the directory that\n\
+      \032           includes the ssh executable; if you've installed Cygwin in the\n\
+      \032           default location, this is C:\\cygwin\\bin.\n\
+      \032   3. Test ssh from a DOS shell by typing\n\
+      \032     ssh <remote host> -l <login name>\n\
+      \n\
+      \032      You should get a prompt for your password on <remote host>,\n\
+      \032      followed by a working connection.\n\
+      \032   4. Note that ssh-keygen may not work (fails with \"gethostname: no such\n\
+      \032      file or directory\") on some systems. This is OK: you can use ssh\n\
+      \032      with your regular password for the remote system.\n\
+      \032   5. You should now be able to use Unison with an ssh connection. If you\n\
+      \032      are logged in with a different user name on the local and remote\n\
+      \032      hosts, provide your remote user name when providing the remote root\n\
+      \032      (i.e., //username@host/path...).\n\
+      \n\
+      "))
+::
+    ("news", ("Changes in Version 2.40.69", 
+     "Changes in Version 2.40.69\n\
+      \n\
+      \032  Changes since 2.40.1:\n\
+      \032    * Added \"BelowPath\" patterns, that match a path as well as all paths\n\
+      \032      below (convenient to use with nodeletion,update,creationpartial\n\
+      \032      preferences)\n\
+      \032    * Added a \"fat\" preference that makes Unison use the right options\n\
+      \032      when one of the replica is on a FAT filesystem.\n\
+      \032    * Allow \"prefer/force=newer\" even when not synchronizing modification\n\
+      \032      times. (The reconciler will not be aware of the modification time\n\
+      \032      of unchanged files, so the synchronization choices of Unison can be\n\
+      \032      different from when \"times=true\", but the behavior remains sane:\n\
+      \032      changed files with the most recent modification time will be\n\
+      \032      propagated.)\n\
+      \032    * Minor fixes and improvements:\n\
+      \032         + Compare filenames up to decomposition in case sensitive mode\n\
+      \032           when one host is running MacOSX and the unicode preference is\n\
+      \032           set to true.\n\
+      \032         + Rsync: somewhat faster compressor\n\
+      \032         + Make Unicode the default on all architectures (it was only the\n\
+      \032           default when a Mac OS X or Windows machine was involved).\n\
+      \n\
+      \032  Changes since 2.32:\n\
+      \032    * Major enhancement: Unicode support.\n\
+      \032         + Unison should now handle unicode filenames correctly on all\n\
+      \032           platforms.\n\
+      \032         + This functionality is controlled by a new preference unicode.\n\
+      \032         + Unicode mode is now the default when one of the hosts is under\n\
+      \032           Windows or MacOS. This may make upgrades a bit more painful\n\
+      \032           (the archives cannot be reused), but this is a much saner\n\
+      \032           default.\n\
+      \032    * Partial transfer of directories. If an error occurs while\n\
+      \032      transferring a directory, the part transferred so far is copied\n\
+      \032      into place (and the archives are updated accordingly). The\n\
+      \032      \"maxerrors\" preference controls how many transfer error Unison will\n\
+      \032      accept before stopping the transfer of a directory (by default,\n\
+      \032      only one). This makes it possible to transfer most of a directory\n\
+      \032      even if there are some errors. Currently, only the first error is\n\
+      \032      reported by the GUIs.\n\
+      \032      Also, allow partial transfer of a directory when there was an error\n\
+      \032      deep inside this directory during update detection. At the moment,\n\
+      \032      this is only activated with the text and GTK UIs, which have been\n\
+      \032      modified so that they show that the transfer is going to be partial\n\
+      \032      and so that they can display all errors.\n\
+      \032    * Improvement to the code for resuming directory transfers:\n\
+      \032         + if a file was not correctly transferred (or the source has\n\
+      \032           been modified since, with unchanged size), Unison performs a\n\
+      \032           new transfer rather than failing\n\
+      \032         + spurious files are deleted (this can happen if a file is\n\
+      \032           deleted on the source replica before resuming the transfer;\n\
+      \032           not deleting the file would result in it reappearing on the\n\
+      \032           target replica)\n\
+      \032    * Experimental streaming protocol for transferring file contents (can\n\
+      \032      be disabled by setting the directive \"stream\" to false): file\n\
+      \032      contents is transfered asynchronously (without waiting for a\n\
+      \032      response from the destination after each chunk sent) rather than\n\
+      \032      using the synchronous RPC mechanism. As a consequence:\n\
+      \032         + Unison now transfers the contents of a single file at a time\n\
+      \032           (Unison used to transfer several contents simultaneously in\n\
+      \032           order to hide the connection latency.)\n\
+      \032         + the transfer of large files uses the full available bandwidth\n\
+      \032           and is not slowed done due to the connection latency anymore\n\
+      \032         + we get performance improvement for small files as well by\n\
+      \032           scheduling many files simultaneously (as scheduling a file for\n\
+      \032           transfer consume little ressource: it does not mean allocating\n\
+      \032           a large buffer anymore)\n\
+      \032    * Changes to the internal implementation of the rsync algorithm:\n\
+      \032         + use longer blocks for large files (the size of a block is the\n\
+      \032           square root of the size of the file for large files);\n\
+      \032         + transmit less checksum information per block (we still have\n\
+      \032           less than one chance in a hundred million of transferring a\n\
+      \032           file incorrectly, and Unison will catch any transfer error\n\
+      \032           when fingerprinting the whole file)\n\
+      \032         + avoid transfer overhead (which was 4 bytes per block)\n\
+      \032      For a 1G file, the first optimization saves a factor 50 on the\n\
+      \032      amount of data transferred from the target to the source (blocks\n\
+      \032      are 32768 bytes rather than just 700 bytes). The two other\n\
+      \032      optimizations save another factor of 2 (from 24 bytes per block\n\
+      \032      down to 10).\n\
+      \032    * Implemented an on-disk file fingerprint cache to speed-up update\n\
+      \032      detection after a crash: this way, Unison does not have do\n\
+      \032      recompute all the file fingerprints from scratch.\n\
+      \032         + When Unison detects that the archive case-sensitivity mode\n\
+      \032           does not match the current settings, it populates the\n\
+      \032           fingerprint cache using the archive contents. This way,\n\
+      \032           changing the case-sensitivity mode should be reasonably fast.\n\
+      \032    * New preferences \"noupdate=root\", \"nodeletion=root\",\n\
+      \032      \"nocreation=root\" that prevent Unison from performing files\n\
+      \032      updates, deletions or creations on the given root. Also 'partial'\n\
+      \032      versions of 'noupdate', 'nodeletion' and 'nocreation'\n\
+      \032    * Limit the number of simultaneous external copy program (\"copymax\"\n\
+      \032      preference)\n\
+      \032    * New \"links\" preference. When set to false, Unison will report an\n\
+      \032      error on symlinks during update detection. (This is the default\n\
+      \032      when one host is running Windows but not Cygwin.) This is better\n\
+      \032      than failing during propagation.\n\
+      \032    * Added a preference \"halfduplex\" to force half-duplex communication\n\
+      \032      with the server. This may be useful on unreliable links (as a more\n\
+      \032      efficient alternative to \"maxthreads = 1\").\n\
+      \032    * Renamed preference \"pretendwin\" to \"ignoreinodenumbers\" (an alias\n\
+      \032      is kept for backwards compatibility).\n\
+      \032    * Ignore one-second differences when synchronizing modification time.\n\
+      \032      (Technically, this is an incompatible archive format change, but it\n\
+      \032      is backward compatible. To trigger a problem, a user would have to\n\
+      \032      synchronize modification times on a filesystem with a two-second\n\
+      \032      granularity and then downgrade to a previous version of Unison,\n\
+      \032      which does not work well in such a case. Thus, it does not seem\n\
+      \032      worthwhile to increment the archive format number, which would\n\
+      \032      impact all users.)\n\
+      \032    * Do not keep many files simultaneously opened anymore when the rsync\n\
+      \032      algorithm is in use.\n\
+      \032    * Add \"ignorearchives\" preference to ignore existing archives (to\n\
+      \032      avoid forcing users to delete them manually, in situations where\n\
+      \032      one archive has gotten deleted or corrupted).\n\
+      \032    * Mac OS\n\
+      \032         + fixed rsync bug which could result in an \"index out of bounds\"\n\
+      \032           error when transferring resource forks.\n\
+      \032         + Fixed bug which made Unison ignore finder information and\n\
+      \032           resource fork when compiled to 64bit on Mac OSX.\n\
+      \032         + should now be 64 bit clean (the Growl framework is not up to\n\
+      \032           date, though)\n\
+      \032         + Made the bridge between Objective C and Ocaml code GC friendly\n\
+      \032           (it was allocating ML values and putting them in an array\n\
+      \032           which was not registered with the GC)\n\
+      \032         + use darker grey arrows (patch contributed by Eric Y. Kow)\n\
+      \032    * GTK user interface\n\
+      \032         + assistant for creating profiles\n\
+      \032         + profile editor\n\
+      \032         + pop up a summary window when the replicas are not fully\n\
+      \032           synchronized after transport\n\
+      \032         + display estimated remaining time and transfer rate on the\n\
+      \032           progress bar\n\
+      \032         + allow simultaneous selection of several items\n\
+      \032         + Do not reload the preference file before a new update\n\
+      \032           detection if it is unchanged\n\
+      \032         + disabled scrolling to the first unfinished item during\n\
+      \032           transport. It goes way too fast when lot of small files are\n\
+      \032           synchronized, and it makes it impossible to browse the file\n\
+      \032           list during transport.\n\
+      \032         + take into account the \"height\" preference again\n\
+      \032         + the internal list of selected reconciler item was not always\n\
+      \032           in sync with what was displayed (GTK bug?); workaround\n\
+      \032           implemented\n\
+      \032         + Do not display \"Looking for change\" messages during\n\
+      \032           propagation (when checking the targe is unchanged) but only\n\
+      \032           during update detection\n\
+      \032         + Apply patch to fix some crashes in the OSX GUI, thanks to Onne\n\
+      \032           Gorter.\n\
+      \032    * Text UI\n\
+      \032         + During update detection, display status by updating a single\n\
+      \032           line rather than generating a new line of output every so\n\
+      \032           often. Should be less confusing.\n\
+      \032    * Windows\n\
+      \032         + Fastcheck is now the default under Windows. People mostly use\n\
+      \032           NTFS nowadays and the Unicode API provides an equivalent to\n\
+      \032           inode numbers for this filesystem.\n\
+      \032         + Only use long UNC path for accessing replicas (as '..' is not\n\
+      \032           handled with this format of paths, but can be useful)\n\
+      \032         + Windows text UI: now put the console into UTF-8 output mode.\n\
+      \032           This is the right thing to do when in Unicode mode, and is no\n\
+      \032           worse than what we had previously otherwise (the console use\n\
+      \032           some esoteric encoding by default). This only works when using\n\
+      \032           a Unicode font instead of the default raster font.\n\
+      \032         + Don't get the home directory from environment variable HOME\n\
+      \032           under Windows (except for Cygwin binaries): we don't want the\n\
+      \032           behavior of Unison to depends on whether it is run from a\n\
+      \032           Cygwin shell (where HOME is set) or in any other way (where\n\
+      \032           HOME is usually not set).\n\
+      \032    * Miscellaneous fixes and improvements\n\
+      \032         + Made a server waiting on a socket more resilient to unexpected\n\
+      \032           lost connections from the client.\n\
+      \032         + Small patch to property setting code suggested by Ulrich\n\
+      \032           Gernkow.\n\
+      \032         + Several fixes to the change transfer functions (both the\n\
+      \032           internal ones and external transfers using rsync). In\n\
+      \032           particular, limit the number of simultaneous transfer using an\n\
+      \032           rsync (as the rsync algorithm can use a large amount of memory\n\
+      \032           when processing huge files)\n\
+      \032         + Keep track of which file contents are being transferred, and\n\
+      \032           delay the transfer of a file when another file with the same\n\
+      \032           contents is currently being transferred. This way, the second\n\
+      \032           transfer can be skipped and replaced by a local copy.\n\
+      \032         + Experimental update detection optimization: do not read the\n\
+      \032           contents of unchanged directories\n\
+      \032         + When a file transfer fails, turn off fastcheck for this file\n\
+      \032           on the next sync.\n\
+      \032         + Fixed bug with case insensitive mode on a case sensitive\n\
+      \032           filesystem:\n\
+      \032              o if file \"a/a\" is created on one replica and directory \"A\"\n\
+      \032                is created on the other, the file failed to be\n\
+      \032                synchronized the first time Unison is run afterwards, as\n\
+      \032                Unison uses the wrong path \"a/a\" (if Unison is run again,\n\
+      \032                the directories are in the archive, so the right path is\n\
+      \032                used);\n\
+      \032              o if file \"a\" appears on one replica and file \"A\" appears\n\
+      \032                on the other with different contents, Unison was unable\n\
+      \032                to synchronize them.\n\
+      \032         + Improved error reporting when the destination is updated\n\
+      \032           during synchronization: Unison now tells which file has been\n\
+      \032           updated, and how.\n\
+      \032         + Limit the length of temporary file names\n\
+      \032         + Case sensitivity information put in the archive (in a backward\n\
+      \032           compatible way) and checked when the archive is loaded\n\
+      \032         + Got rid of the 16mb marshalling limit by marshalling to a\n\
+      \032           bigarray.\n\
+      \032         + Resume copy of partially transferred files.\n\
+      \n\
+      \032  Changes since 2.31:\n\
+      \032    * Small user interface changes\n\
+      \032         + Small change to text UI \"scanning...\" messages, to print just\n\
+      \032           directories (hopefully making it clearer that individual files\n\
+      \032           are not necessarily being fingerprinted).\n\
+      \032    * Minor fixes and improvements:\n\
+      \032         + Ignore one hour differences when deciding whether a file may\n\
+      \032           have been updated. This avoids slow update detection after\n\
+      \032           daylight saving time changes under Windows. This makes Unison\n\
+      \032           slightly more likely to miss an update, but it should be safe\n\
+      \032           enough.\n\
+      \032         + Fix a small bug that was affecting mainly windows users. We\n\
+      \032           need to commit the archives at the end of the sync even if\n\
+      \032           there are no updates to propagate because some files (in fact,\n\
+      \032           if we've just switched to DST on windows, a LOT of files)\n\
+      \032           might have new modtimes in the archive. (Changed the text UI\n\
+      \032           only. It's less clear where to change the GUI.)\n\
+      \032         + Don't delete the temp file when a transfer fails due to a\n\
+      \032           fingerprint mismatch (so that we can have a look and see why!)\n\
+      \032           We've also added more debugging code togive more informative\n\
+      \032           error messages when we encounter the dreaded and longstanding\n\
+      \032           \"assert failed during file transfer\" bug\n\
+      \032         + Incorrect paths (\"path\" directive) now result in an error\n\
+      \032           update item rather than a fatal error.\n\
+      \032         + Create parent directories (with correct permissions) during\n\
+      \032           transport for paths which point to non-existent locations in\n\
+      \032           the destination replica.\n\
+      \n\
+      \032  Changes since 2.27:\n\
+      \032    * If Unison is interrupted during a directory transfer, it will now\n\
+      \032      leave the partially transferred directory intact in a temporary\n\
+      \032      location. (This maintains the invariant that new files/directories\n\
+      \032      are transferred either completely or not at all.) The next time\n\
+      \032      Unison is run, it will continue filling in this temporary\n\
+      \032      directory, skipping transferring files that it finds are already\n\
+      \032      there.\n\
+      \032    * We've added experimental support for invoking an external file\n\
+      \032      transfer tool for whole-file copies instead of Unison's built-in\n\
+      \032      transfer protocol. Three new preferences have been added:\n\
+      \032         + copyprog is a string giving the name (and command-line\n\
+      \032           switches, if needed) of an external program that can be used\n\
+      \032           to copy large files efficiently. By default, rsync is invoked,\n\
+      \032           but other tools such as scp can be used instead by changing\n\
+      \032           the value of this preference. (Although this is not its\n\
+      \032           primary purpose, rsync is actually a pretty fast way of\n\
+      \032           copying files that don't already exist on the receiving host.)\n\
+      \032           For files that do already exist on (but that have been changed\n\
+      \032           in one replica), Unison will always use its built-in\n\
+      \032           implementation of the rsync algorithm.\n\
+      \032         + Added a \"copyprogrest\" preference, so that we can give\n\
+      \032           different command lines for invoking the external copy utility\n\
+      \032           depending on whether a partially transferred file already\n\
+      \032           exists or not. (Rsync doesn't seem to care about this, but\n\
+      \032           other utilities may.)\n\
+      \032         + copythreshold is an integer (-1 by default), indicating above\n\
+      \032           what filesize (in megabytes) Unison should use the external\n\
+      \032           copying utility specified by copyprog. Specifying 0 will cause\n\
+      \032           ALL copies to use the external program; a negative number will\n\
+      \032           prevent any files from using it. (Default is -1.)\n\
+      \032      Thanks to Alan Schmitt for a huge amount of hacking and to an\n\
+      \032      anonymous sponsor for suggesting and underwriting this extension.\n\
+      \032    * Small improvements:\n\
+      \032         + Added a new preference, dontchmod. By default, Unison uses the\n\
+      \032           chmod system call to set the permission bits of files after it\n\
+      \032           has copied them. But in some circumstances (and under some\n\
+      \032           operating systems), the chmod call always fails. Setting this\n\
+      \032           preference completely prevents Unison from ever calling chmod.\n\
+      \032         + Don't ignore files that look like backup files if the\n\
+      \032           backuplocation preference is set to central\n\
+      \032         + Shortened the names of several preferences. The old names are\n\
+      \032           also still supported, for backwards compatibility, but they do\n\
+      \032           not appear in the documentation.\n\
+      \032         + Lots of little documentation tidying. (In particular,\n\
+      \032           preferences are separated into Basic and Advanced! This should\n\
+      \032           hopefully make Unison a little more approachable for new\n\
+      \032           users.\n\
+      \032         + Unison can sometimes fail to transfer a file, giving the\n\
+      \032           unhelpful message \"Destination updated during synchronization\"\n\
+      \032           even though the file has not been changed. This can be caused\n\
+      \032           by programs that change either the file's contents or the\n\
+      \032           file's extended attributes without changing its modification\n\
+      \032           time. It's not clear what is the best fix for this - it is not\n\
+      \032           Unison's fault, but it makes Unison's behavior puzzling - but\n\
+      \032           at least Unison can be more helpful about suggesting a\n\
+      \032           workaround (running once with fastcheck set to false). The\n\
+      \032           failure message has been changed to give this advice.\n\
+      \032         + Further improvements to the OS X GUI (thanks to Alan Schmitt\n\
+      \032           and Craig Federighi).\n\
+      \032    * Very preliminary support for triggering Unison from an external\n\
+      \032      filesystem-watching utility. The current implementation is very\n\
+      \032      simple, not efficient, and almost completely untested--not ready\n\
+      \032      for real users. But if someone wants to help improve it (e.g., by\n\
+      \032      writing a filesystem watcher for your favorite OS), please make\n\
+      \032      yourself known!\n\
+      \032      On the Unison side, the new behavior is very simple:\n\
+      \032         + use the text UI\n\
+      \032         + start Unison with the command-line flag \"-repeat FOO\", where\n\
+      \032           FOO is name of a file where Unison should look for\n\
+      \032           notifications of changes\n\
+      \032         + when it starts up, Unison will read the whole contents of this\n\
+      \032           file (on both hosts), which should be a newline-separated list\n\
+      \032           of paths (relative to the root of the synchronization) and\n\
+      \032           synchronize just these paths, as if it had been started with\n\
+      \032           the \"-path=xxx\" option for each one of them\n\
+      \032         + when it finishes, it will sleep for a few seconds and then\n\
+      \032           examine the watchfile again; if anything has been added, it\n\
+      \032           will read the new paths, synchronize them, and go back to\n\
+      \032           sleep\n\
+      \032         + that's it!\n\
+      \032      To use this to drive Unison \"incrementally,\" just start it in this\n\
+      \032      mode and start up a tool (on each host) to watch for new changes to\n\
+      \032      the filesystem and append the appropriate paths to the watchfile.\n\
+      \032      Hopefully such tools should not be too hard to write.\n\
+      \032    * Bug fixes:\n\
+      \032         + Fixed a bug that was causing new files to be created with\n\
+      \032           permissions 0x600 instead of using a reasonable default (like\n\
+      \032           0x644), if the 'perms' flag was set to 0. (Bug reported by Ben\n\
+      \032           Crowell.)\n\
+      \032         + Follow maxthreads preference when transferring directories.\n\
+      \n\
+      \032  Changes since 2.17:\n\
+      \032    * Major rewrite and cleanup of the whole Mac OS X graphical user\n\
+      \032      interface by Craig Federighi. Thanks, Craig!!!\n\
+      \032    * Small fix to ctime (non-)handling in update detection under windows\n\
+      \032      with fastcheck.\n\
+      \032    * Several small fixes to the GTK2 UI to make it work better under\n\
+      \032      Windows [thanks to Karl M for these].\n\
+      \032    * The backup functionality has been completely rewritten. The\n\
+      \032      external interface has not changed, but numerous bugs, irregular\n\
+      \032      behaviors, and cross-platform inconsistencies have been corrected.\n\
+      \032    * The Unison project now accepts donations via PayPal. If you'd like\n\
+      \032      to donate, you can find a link to the donation page on the Unison\n\
+      \032      home page (http://www.cis.upenn.edu/ bcpierce/unison/lists.html).\n\
+      \032    * Some important safety improvements:\n\
+      \032         + Added a new mountpoint preference, which can be used to\n\
+      \032           specify a path that must exist in both replicas at the end of\n\
+      \032           update detection (otherwise Unison aborts). This can be used\n\
+      \032           to avoid potentially dangerous situations when Unison is used\n\
+      \032           with removable media such as external hard drives and compact\n\
+      \032           flash cards.\n\
+      \032         + The confirmation of \"big deletes\" is now controlled by a\n\
+      \032           boolean preference confirmbigdeletes. Default is true, which\n\
+      \032           gives the same behavior as previously. (This functionality is\n\
+      \032           at least partly superceded by the mountpoint preference, but\n\
+      \032           it has been left in place in case it is useful to some\n\
+      \032           people.)\n\
+      \032         + If Unison is asked to \"follow\" a symbolic link but there is\n\
+      \032           nothing at the other end of the link, it will now flag this\n\
+      \032           path as an error, rather than treating the symlink itself as\n\
+      \032           missing or deleted. This avoids a potentially dangerous\n\
+      \032           situation where a followed symlink points to an external\n\
+      \032           filesystem that might be offline when Unison is run (whereupon\n\
+      \032           Unison would cheerfully delete the corresponding files in the\n\
+      \032           other replica!).\n\
+      \032    * Smaller changes:\n\
+      \032         + Added forcepartial and preferpartial preferences, which behave\n\
+      \032           like force and prefer but can be specified on a per-path\n\
+      \032           basis. [Thanks to Alan Schmitt for this.]\n\
+      \032         + A bare-bones self test feature was added, which runs unison\n\
+      \032           through some of its paces and checks that the results are as\n\
+      \032           expected. The coverage of the tests is still very limited, but\n\
+      \032           the facility has already been very useful in debugging the new\n\
+      \032           backup functionality (especially in exposing some subtle\n\
+      \032           cross-platform issues).\n\
+      \032         + Refined debugging code so that the verbosity of individual\n\
+      \032           modules can be controlled separately. Instead of just putting\n\
+      \032           '-debug verbose' on the command line, you can put '-debug\n\
+      \032           update+', which causes all the extra messages in the Update\n\
+      \032           module, but not other modules, to be printed. Putting '-debug\n\
+      \032           verbose' causes all modules to print with maximum verbosity.\n\
+      \032         + Removed mergebatch preference. (It never seemed very useful,\n\
+      \032           and its semantics were confusing.)\n\
+      \032         + Rewrote some of the merging functionality, for better\n\
+      \032           cooperation with external Harmony instances.\n\
+      \032         + Changed the temp file prefix from .# to .unison.\n\
+      \032         + Compressed the output from the text user interface\n\
+      \032           (particularly when run with the -terse flag) to make it easier\n\
+      \032           to interpret the results when Unison is run several times in\n\
+      \032           succession from a script.\n\
+      \032         + Diff and merge functions now work under Windows.\n\
+      \032         + Changed the order of arguments to the default diff command (so\n\
+      \032           that the + and - annotations in diff's output are reversed).\n\
+      \032         + Added .mpp files to the \"never fastcheck\" list (like .xls\n\
+      \032           files).\n\
+      \032    * Many small bugfixes, including:\n\
+      \032         + Fixed a longstanding bug regarding fastcheck and daylight\n\
+      \032           saving time under Windows when Unison is set up to synchronize\n\
+      \032           modification times. (Modification times cannot be updated in\n\
+      \032           the archive in this case, so we have to ignore one hour\n\
+      \032           differences.)\n\
+      \032         + Fixed a bug that would occasionally cause the archives to be\n\
+      \032           left in non-identical states on the two hosts after\n\
+      \032           synchronization.\n\
+      \032         + Fixed a bug that prevented Unison from communicating correctly\n\
+      \032           between 32- and 64-bit architectures.\n\
+      \032         + On windows, file creation times are no longer used as a proxy\n\
+      \032           for inode numbers. (This is unfortunate, as it makes fastcheck\n\
+      \032           a little less safe. But it turns out that file creation times\n\
+      \032           are not reliable under Windows: if a file is removed and a new\n\
+      \032           file is created in its place, the new one will sometimes be\n\
+      \032           given the same creation date as the old one!)\n\
+      \032         + Set read-only file to R/W on OSX before attempting to change\n\
+      \032           other attributes.\n\
+      \032         + Fixed bug resulting in spurious \"Aborted\" errors during\n\
+      \032           transport (thanks to Jerome Vouillon)\n\
+      \032         + Enable diff if file contents have changed in one replica, but\n\
+      \032           only properties in the other.\n\
+      \032         + Removed misleading documentation for 'repeat' preference.\n\
+      \032         + Fixed a bug in merging code where Unison could sometimes\n\
+      \032           deadlock with the external merge program, if the latter\n\
+      \032           produced large amounts of output.\n\
+      \032         + Workaround for a bug compiling gtk2 user interface against\n\
+      \032           current versions of gtk2+ libraries.\n\
+      \032         + Added a better error message for \"ambiguous paths\".\n\
+      \032         + Squashed a longstanding bug that would cause file transfer to\n\
+      \032           fail with the message \"Failed: Error in readWrite: Is a\n\
+      \032           directory.\"\n\
+      \032         + Replaced symlinks with copies of their targets in the Growl\n\
+      \032           framework in src/uimac. This should make the sources easier to\n\
+      \032           check out from the svn repository on WinXP systems.\n\
+      \032         + Added a workaround (suggested by Karl M.) for the problem\n\
+      \032           discussed on the unison users mailing list where, on the\n\
+      \032           Windows platform, the server would hang when transferring\n\
+      \032           files. I conjecture that the problem has to do with the RPC\n\
+      \032           mechanism, which was used to make a call back from the server\n\
+      \032           to the client (inside the Trace.log function) so that the log\n\
+      \032           message would be appended to the log file on the client. The\n\
+      \032           workaround is to dump these messages (about when xferbycopying\n\
+      \032           shortcuts are applied and whether they succeed) just to the\n\
+      \032           standard output of the Unison process, not to the log file.\n\
+      \n\
+      \032  Changes since 2.13.0:\n\
+      \032    * The features for performing backups and for invoking external merge\n\
+      \032      programs have been completely rewritten by Stephane Lescuyer\n\
+      \032      (thanks, Stephane!). The user-visible functionality should not\n\
+      \032      change, but the internals have been rationalized and there are a\n\
+      \032      number of new features. See the manual (in particular, the\n\
+      \032      description of the backupXXX preferences) for details.\n\
+      \032    * Incorporated patches for ipv6 support, contributed by Samuel\n\
+      \032      Thibault. (Note that, due to a bug in the released OCaml 3.08.3\n\
+      \032      compiler, this code will not actually work with ipv6 unless\n\
+      \032      compiled with the CVS version of the OCaml compiler, where the bug\n\
+      \032      has been fixed; however, ipv4 should continue to work normally.)\n\
+      \032    * OSX interface:\n\
+      \032         + Incorporated Ben Willmore's cool new icon for the Mac UI.\n\
+      \032    * Small fixes:\n\
+      \032         + Fixed off by one error in month numbers (in printed dates)\n\
+      \032           reported by Bob Burger\n\
+      \n\
+      \032  Changes since 2.12.0:\n\
+      \032    * New convention for release numbering: Releases will continue to be\n\
+      \032      given numbers of the form X.Y.Z, but, from now on, just the major\n\
+      \032      version number (X.Y) will be considered significant when checking\n\
+      \032      compatibility between client and server versions. The third\n\
+      \032      component of the version number will be used only to identify\n\
+      \032      \"patch levels\" of releases.\n\
+      \032      This change goes hand in hand with a change to the procedure for\n\
+      \032      making new releases. Candidate releases will initially be given\n\
+      \032      \"beta release\" status when they are announced for public\n\
+      \032      consumption. Any bugs that are discovered will be fixed in a\n\
+      \032      separate branch of the source repository (without changing the\n\
+      \032      major version number) and new tarballs re-released as needed. When\n\
+      \032      this process converges, the patched beta version will be dubbed\n\
+      \032      stable.\n\
+      \032    * Warning (failure in batch mode) when one path is completely\n\
+      \032      emptied. This prevents Unison from deleting everything on one\n\
+      \032      replica when the other disappear.\n\
+      \032    * Fix diff bug (where no difference is shown the first time the diff\n\
+      \032      command is given).\n\
+      \032    * User interface changes:\n\
+      \032         + Improved workaround for button focus problem (GTK2 UI)\n\
+      \032         + Put leading zeroes in date fields\n\
+      \032         + More robust handling of character encodings in GTK2 UI\n\
+      \032         + Changed format of modification time displays, from modified at\n\
+      \032           hh:mm:ss on dd MMM, yyyy to modified on yyyy-mm-dd hh:mm:ss\n\
+      \032         + Changed time display to include seconds (so that people on FAT\n\
+      \032           filesystems will not be confused when Unison tries to update a\n\
+      \032           file time to an odd number of seconds and the filesystem\n\
+      \032           truncates it to an even number!)\n\
+      \032         + Use the diff \"-u\" option by default when showing differences\n\
+      \032           between files (the output is more readable)\n\
+      \032         + In text mode, pipe the diff output to a pager if the\n\
+      \032           environment variable PAGER is set\n\
+      \032         + Bug fixes and cleanups in ssh password prompting. Now works\n\
+      \032           with the GTK2 UI under Linux. (Hopefully the Mac OS X one is\n\
+      \032           not broken!)\n\
+      \032         + Include profile name in the GTK2 window name\n\
+      \032         + Added bindings ',' (same as '<') and '.' (same as '>') in the\n\
+      \032           GTK2 UI\n\
+      \032    * Mac GUI:\n\
+      \032         + actions like < and > scroll to the next item as necessary.\n\
+      \032         + Restart has a menu item and keyboard shortcut (command-R).\n\
+      \032         + Added a command-line tool for Mac OS X. It can be installed\n\
+      \032           from the Unison menu.\n\
+      \032         + New icon.\n\
+      \032         + Handle the \"help\" command-line argument properly.\n\
+      \032         + Handle profiles given on the command line properly.\n\
+      \032         + When a profile has been selected, the profile dialog is\n\
+      \032           replaced by a \"connecting\" message while the connection is\n\
+      \032           being made. This gives better feedback.\n\
+      \032         + Size of left and right columns is now large enough so that\n\
+      \032           \"PropsChanged\" is not cut off.\n\
+      \032    * Minor changes:\n\
+      \032         + Disable multi-threading when both roots are local\n\
+      \032         + Improved error handling code. In particular, make sure all\n\
+      \032           files are closed in case of a transient failure\n\
+      \032         + Under Windows, use $UNISON for home directory as a last resort\n\
+      \032           (it was wrongly moved before $HOME and $USERPROFILE in Unison\n\
+      \032           2.12.0)\n\
+      \032         + Reopen the logfile if its name changes (profile change)\n\
+      \032         + Double-check that permissions and modification times have been\n\
+      \032           properly set: there are some combination of OS and filesystem\n\
+      \032           on which setting them can fail in a silent way.\n\
+      \032         + Check for bad Windows filenames for pure Windows\n\
+      \032           synchronization also (not just cross architecture\n\
+      \032           synchronization). This way, filenames containing backslashes,\n\
+      \032           which are not correctly handled by unison, are rejected right\n\
+      \032           away.\n\
+      \032         + Attempt to resolve issues with synchronizing modification\n\
+      \032           times of read-only files under Windows\n\
+      \032         + Ignore chmod failures when deleting files\n\
+      \032         + Ignore trailing dots in filenames in case insensitive mode\n\
+      \032         + Proper quoting of paths, files and extensions ignored using\n\
+      \032           the UI\n\
+      \032         + The strings CURRENT1 and CURRENT2 are now correctly substitued\n\
+      \032           when they occur in the diff preference\n\
+      \032         + Improvements to syncing resource forks between Macs via a\n\
+      \032           non-Mac system.\n\
+      \n\
+      \032  Changes since 2.10.2:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed.\n\
+      \032    * Source code availability: The Unison sources are now managed using\n\
+      \032      Subversion. One nice side-effect is that anonymous checkout is now\n\
+      \032      possible, like this:\n\
+      \032       svn co https://cvs.cis.upenn.edu:3690/svnroot/unison/\n\
+      \n\
+      \032      We will also continue to export a \"developer tarball\" of the\n\
+      \032      current (modulo one day) sources in the web export directory. To\n\
+      \032      receive commit logs for changes to the sources, subscribe to the\n\
+      \032      unison-hackers list\n\
+      \032      (http://www.cis.upenn.edu/ bcpierce/unison/lists.html).\n\
+      \032    * Text user interface:\n\
+      \032         + Substantial reworking of the internal logic of the text UI to\n\
+      \032           make it a bit easier to modify.\n\
+      \032         + The dumbtty flag in the text UI is automatically set to true\n\
+      \032           if the client is running on a Unix system and the EMACS\n\
+      \032           environment variable is set to anything other than the empty\n\
+      \032           string.\n\
+      \032    * Native OS X gui:\n\
+      \032         + Added a synchronize menu item with keyboard shortcut\n\
+      \032         + Added a merge menu item, still needs to be debugged\n\
+      \032         + Fixes to compile for Panther\n\
+      \032         + Miscellaneous improvements and bugfixes\n\
+      \032    * Small changes:\n\
+      \032         + Changed the filename checking code to apply to Windows only,\n\
+      \032           instead of OS X as well.\n\
+      \032         + Finder flags now synchronized\n\
+      \032         + Fallback in copy.ml for filesystem that do not support O_EXCL\n\
+      \032         + Changed buffer size for local file copy (was highly\n\
+      \032           inefficient with synchronous writes)\n\
+      \032         + Ignore chmod failure when deleting a directory\n\
+      \032         + Fixed assertion failure when resolving a conflict content\n\
+      \032           change / permission changes in favor of the content change.\n\
+      \032         + Workaround for transferring large files using rsync.\n\
+      \032         + Use buffered I/O for files (this is the only way to open files\n\
+      \032           in binary mode under Cygwin).\n\
+      \032         + On non-Cygwin Windows systems, the UNISON environment variable\n\
+      \032           is now checked first to determine where to look for Unison's\n\
+      \032           archive and preference files, followed by HOME and USERPROFILE\n\
+      \032           in that order. On Unix and Cygwin systems, HOME is used.\n\
+      \032         + Generalized diff preference so that it can be given either as\n\
+      \032           just the command name to be used for calculating diffs or else\n\
+      \032           a whole command line, containing the strings CURRENT1 and\n\
+      \032           CURRENT2, which will be replaced by the names of the files to\n\
+      \032           be diff'ed before the command is called.\n\
+      \032         + Recognize password prompts in some newer versions of ssh.\n\
+      \n\
+      \032  Changes since 2.9.20:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed.\n\
+      \032    * Major functionality changes:\n\
+      \032         + Major tidying and enhancement of 'merge' functionality. The\n\
+      \032           main user-visible change is that the external merge program\n\
+      \032           may either write the merged output to a single new file, as\n\
+      \032           before, or it may modify one or both of its input files, or it\n\
+      \032           may write two new files. In the latter cases, its\n\
+      \032           modifications will be copied back into place on both the local\n\
+      \032           and the remote host, and (if the two files are now equal) the\n\
+      \032           archive will be updated appropriately. More information can be\n\
+      \032           found in the user manual. Thanks to Malo Denielou and Alan\n\
+      \032           Schmitt for these improvements.\n\
+      \032           Warning: the new merging functionality is not completely\n\
+      \032           compatible with old versions! Check the manual for details.\n\
+      \032         + Files larger than 2Gb are now supported.\n\
+      \032         + Added preliminary (and still somewhat experimental) support\n\
+      \032           for the Apple OS X operating system.\n\
+      \032              o Resource forks should be transferred correctly. (See the\n\
+      \032                manual for details of how this works when synchronizing\n\
+      \032                HFS with non-HFS volumes.) Synchronization of file type\n\
+      \032                and creator information is also supported.\n\
+      \032              o On OSX systems, the name of the directory for storing\n\
+      \032                Unison's archives, preference files, etc., is now\n\
+      \032                determined as follows:\n\
+      \032                   # if ~/.unison exists, use it\n\
+      \032                   # otherwise, use ~/Library/Application Support/Unison,\n\
+      \032                     creating it if necessary.\n\
+      \032              o A preliminary native-Cocoa user interface is under\n\
+      \032                construction. This still needs some work, and some users\n\
+      \032                experience unpredictable crashes, so it is only for\n\
+      \032                hackers for now. Run make with UISTYLE=mac to build this\n\
+      \032                interface.\n\
+      \032    * Minor functionality changes:\n\
+      \032         + Added an ignorelocks preference, which forces Unison to\n\
+      \032           override left-over archive locks. (Setting this preference is\n\
+      \032           dangerous! Use it only if you are positive you know what you\n\
+      \032           are doing.)\n\
+      \032         + Added a new preference assumeContentsAreImmutable. If a\n\
+      \032           directory matches one of the patterns set in this preference,\n\
+      \032           then update detection is skipped for files in this directory.\n\
+      \032           (The purpose is to speed update detection for cases like Mail\n\
+      \032           folders, which contain lots and lots of immutable files.) Also\n\
+      \032           a preference assumeContentsAreImmutableNot, which overrides\n\
+      \032           the first, similarly to ignorenot. (Later amendment: these\n\
+      \032           preferences are now called immutable and immutablenot.)\n\
+      \032         + The ignorecase flag has been changed from a boolean to a\n\
+      \032           three-valued preference. The default setting, called default,\n\
+      \032           checks the operating systems running on the client and server\n\
+      \032           and ignores filename case if either of them is OSX or Windows.\n\
+      \032           Setting ignorecase to true or false overrides this behavior.\n\
+      \032           If you have been setting ignorecase on the command line using\n\
+      \032           -ignorecase=true or -ignorecase=false, you will need to change\n\
+      \032           to -ignorecase true or -ignorecase false.\n\
+      \032         + a new preference, 'repeat', for the text user interface\n\
+      \032           (only). If 'repeat' is set to a number, then, after it\n\
+      \032           finishes synchronizing, Unison will wait for that many seconds\n\
+      \032           and then start over, continuing this way until it is killed\n\
+      \032           from outside. Setting repeat to true will automatically set\n\
+      \032           the batch preference to true.\n\
+      \032         + Excel files are now handled specially, so that the fastcheck\n\
+      \032           optimization is skipped even if the fastcheck flag is set.\n\
+      \032           (Excel does some naughty things with modtimes, making this\n\
+      \032           optimization unreliable and leading to failures during change\n\
+      \032           propagation.)\n\
+      \032         + The ignorecase flag has been changed from a boolean to a\n\
+      \032           three-valued preference. The default setting, called\n\
+      \032           'default', checks the operating systems running on the client\n\
+      \032           and server and ignores filename case if either of them is OSX\n\
+      \032           or Windows. Setting ignorecase to 'true' or 'false' overrides\n\
+      \032           this behavior.\n\
+      \032         + Added a new preference, 'repeat', for the text user interface\n\
+      \032           (only, at the moment). If 'repeat' is set to a number, then,\n\
+      \032           after it finishes synchronizing, Unison will wait for that\n\
+      \032           many seconds and then start over, continuing this way until it\n\
+      \032           is killed from outside. Setting repeat to true will\n\
+      \032           automatically set the batch preference to true.\n\
+      \032         + The 'rshargs' preference has been split into 'rshargs' and\n\
+      \032           'sshargs' (mainly to make the documentation clearer). In fact,\n\
+      \032           'rshargs' is no longer mentioned in the documentation at all,\n\
+      \032           since pretty much everybody uses ssh now anyway.\n\
+      \032    * Documentation\n\
+      \032         + The web pages have been completely redesigned and reorganized.\n\
+      \032           (Thanks to Alan Schmitt for help with this.)\n\
+      \032    * User interface improvements\n\
+      \032         + Added a GTK2 user interface, capable (among other things) of\n\
+      \032           displaying filenames in any locale encoding. Kudos to Stephen\n\
+      \032           Tse for contributing this code!\n\
+      \032         + The text UI now prints a list of failed and skipped transfers\n\
+      \032           at the end of synchronization.\n\
+      \032         + Restarting update detection from the graphical UI will reload\n\
+      \032           the current profile (which in particular will reset the -path\n\
+      \032           preference, in case it has been narrowed by using the \"Recheck\n\
+      \032           unsynchronized items\" command).\n\
+      \032         + Several small improvements to the text user interface,\n\
+      \032           including a progress display.\n\
+      \032    * Bug fixes (too numerous to count, actually, but here are some):\n\
+      \032         + The maxthreads preference works now.\n\
+      \032         + Fixed bug where warning message about uname returning an\n\
+      \032           unrecognized result was preventing connection to server. (The\n\
+      \032           warning is no longer printed, and all systems where 'uname'\n\
+      \032           returns anything other than 'Darwin' are assumed not to be\n\
+      \032           running OS X.)\n\
+      \032         + Fixed a problem on OS X that caused some valid file names\n\
+      \032           (e.g., those including colons) to be considered invalid.\n\
+      \032         + Patched Path.followLink to follow links under cygwin in\n\
+      \032           addition to Unix (suggested by Matt Swift).\n\
+      \032         + Small change to the storeRootsName function, suggested by\n\
+      \032           bliviero at ichips.intel.com, to fix a problem in unison with\n\
+      \032           the `rootalias' option, which allows you to tell unison that\n\
+      \032           two roots contain the same files. Rootalias was being applied\n\
+      \032           after the hosts were sorted, so it wouldn't work properly in\n\
+      \032           all cases.\n\
+      \032         + Incorporated a fix by Dmitry Bely for setting utimes of\n\
+      \032           read-only files on Win32 systems.\n\
+      \032    * Installation / portability:\n\
+      \032         + Unison now compiles with OCaml version 3.07 and later out of\n\
+      \032           the box.\n\
+      \032         + Makefile.OCaml fixed to compile out of the box under OpenBSD.\n\
+      \032         + a few additional ports (e.g. OpenBSD, Zaurus/IPAQ) are now\n\
+      \032           mentioned in the documentation\n\
+      \032         + Unison can now be installed easily on OSX systems using the\n\
+      \032           Fink package manager\n\
+      \n\
+      \032  Changes since 2.9.1:\n\
+      \032    * Added a preference maxthreads that can be used to limit the number\n\
+      \032      of simultaneous file transfers.\n\
+      \032    * Added a backupdir preference, which controls where backup files are\n\
+      \032      stored.\n\
+      \032    * Basic support added for OSX. In particular, Unison now recognizes\n\
+      \032      when one of the hosts being synchronized is running OSX and\n\
+      \032      switches to a case-insensitive treatment of filenames (i.e., 'foo'\n\
+      \032      and 'FOO' are considered to be the same file). (OSX is not yet\n\
+      \032      fully working, however: in particular, files with resource forks\n\
+      \032      will not be synchronized correctly.)\n\
+      \032    * The same hash used to form the archive name is now also added to\n\
+      \032      the names of the temp files created during file transfer. The\n\
+      \032      reason for this is that, during update detection, we are going to\n\
+      \032      silently delete any old temp files that we find along the way, and\n\
+      \032      we want to prevent ourselves from deleting temp files belonging to\n\
+      \032      other instances of Unison that may be running in parallel, e.g.\n\
+      \032      synchronizing with a different host. Thanks to Ruslan Ermilov for\n\
+      \032      this suggestion.\n\
+      \032    * Several small user interface improvements\n\
+      \032    * Documentation\n\
+      \032         + FAQ and bug reporting instructions have been split out as\n\
+      \032           separate HTML pages, accessible directly from the unison web\n\
+      \032           page.\n\
+      \032         + Additions to FAQ, in particular suggestions about performance\n\
+      \032           tuning.\n\
+      \032    * Makefile\n\
+      \032         + Makefile.OCaml now sets UISTYLE=text or UISTYLE=gtk\n\
+      \032           automatically, depending on whether it finds lablgtk installed\n\
+      \032         + Unison should now compile \"out of the box\" under OSX\n\
+      \n\
+      \032  Changes since 2.8.1:\n\
+      \032    * Changing profile works again under Windows\n\
+      \032    * File movement optimization: Unison now tries to use local copy\n\
+      \032      instead of transfer for moved or copied files. It is controled by a\n\
+      \032      boolean option \"xferbycopying\".\n\
+      \032    * Network statistics window (transfer rate, amount of data\n\
+      \032      transferred). [NB: not available in Windows-Cygwin version.]\n\
+      \032    * symlinks work under the cygwin version (which is dynamically\n\
+      \032      linked).\n\
+      \032    * Fixed potential deadlock when synchronizing between Windows and\n\
+      \032      Unix\n\
+      \032    * Small improvements:\n\
+      \032         + If neither the USERPROFILE nor the HOME environment variables\n\
+      \032           are set, then Unison will put its temporary commit log (called\n\
+      \032           DANGER.README) into the directory named by the UNISON\n\
+      \032           environment variable, if any; otherwise it will use C:.\n\
+      \032         + alternative set of values for fastcheck: yes = true; no =\n\
+      \032           false; default = auto.\n\
+      \032         + -silent implies -contactquietly\n\
+      \032    * Source code:\n\
+      \032         + Code reorganization and tidying. (Started breaking up some of\n\
+      \032           the basic utility modules so that the non-unison-specific\n\
+      \032           stuff can be made available for other projects.)\n\
+      \032         + several Makefile and docs changes (for release);\n\
+      \032         + further comments in \"update.ml\";\n\
+      \032         + connection information is not stored in global variables\n\
+      \032           anymore.\n\
+      \n\
+      \032  Changes since 2.7.78:\n\
+      \032    * Small bugfix to textual user interface under Unix (to avoid leaving\n\
+      \032      the terminal in a bad state where it would not echo inputs after\n\
+      \032      Unison exited).\n\
+      \n\
+      \032  Changes since 2.7.39:\n\
+      \032    * Improvements to the main web page (stable and beta version docs are\n\
+      \032      now both accessible).\n\
+      \032    * User manual revised.\n\
+      \032    * Added some new preferences:\n\
+      \032         + \"sshcmd\" and \"rshcmd\" for specifying paths to ssh and rsh\n\
+      \032           programs.\n\
+      \032         + \"contactquietly\" for suppressing the \"contacting server\"\n\
+      \032           message during Unison startup (under the graphical UI).\n\
+      \032    * Bug fixes:\n\
+      \032         + Fixed small bug in UI that neglected to change the displayed\n\
+      \032           column headers if loading a new profile caused the roots to\n\
+      \032           change.\n\
+      \032         + Fixed a bug that would put the text UI into an infinite loop\n\
+      \032           if it encountered a conflict when run in batch mode.\n\
+      \032         + Added some code to try to fix the display of non-Ascii\n\
+      \032           characters in filenames on Windows systems in the GTK UI.\n\
+      \032           (This code is currently untested--if you're one of the people\n\
+      \032           that had reported problems with display of non-ascii\n\
+      \032           filenames, we'd appreciate knowing if this actually fixes\n\
+      \032           things.)\n\
+      \032         + `-prefer/-force newer' works properly now. (The bug was\n\
+      \032           reported by Sebastian Urbaniak and Sean Fulton.)\n\
+      \032    * User interface and Unison behavior:\n\
+      \032         + Renamed `Proceed' to `Go' in the graphical UI.\n\
+      \032         + Added exit status for the textual user interface.\n\
+      \032         + Paths that are not synchronized because of conflicts or errors\n\
+      \032           during update detection are now noted in the log file.\n\
+      \032         + [END] messages in log now use a briefer format\n\
+      \032         + Changed the text UI startup sequence so that ./unison -ui text\n\
+      \032           will use the default profile instead of failing.\n\
+      \032         + Made some improvements to the error messages.\n\
+      \032         + Added some debugging messages to remote.ml.\n\
+      \n\
+      \032  Changes since 2.7.7:\n\
+      \032    * Incorporated, once again, a multi-threaded transport sub-system. It\n\
+      \032      transfers several files at the same time, thereby making much more\n\
+      \032      effective use of available network bandwidth. Unlike the earlier\n\
+      \032      attempt, this time we do not rely on the native thread library of\n\
+      \032      OCaml. Instead, we implement a light-weight, non-preemptive\n\
+      \032      multi-thread library in OCaml directly. This version appears\n\
+      \032      stable.\n\
+      \032      Some adjustments to unison are made to accommodate the\n\
+      \032      multi-threaded version. These include, in particular, changes to\n\
+      \032      the user interface and logging, for example:\n\
+      \032         + Two log entries for each transferring task, one for the\n\
+      \032           beginning, one for the end.\n\
+      \032         + Suppressed warning messages against removing temp files left\n\
+      \032           by a previous unison run, because warning does not work nicely\n\
+      \032           under multi-threading. The temp file names are made less\n\
+      \032           likely to coincide with the name of a file created by the\n\
+      \032           user. They take the form\n\
+      \032           .#<filename>.<serial>.unison.tmp. [N.b. This was later changed\n\
+      \032           to .unison.<filename>.<serial>.unison.tmp.]\n\
+      \032    * Added a new command to the GTK user interface: pressing 'f' causes\n\
+      \032      Unison to start a new update detection phase, using as paths just\n\
+      \032      those paths that have been detected as changed and not yet marked\n\
+      \032      as successfully completed. Use this command to quickly restart\n\
+      \032      Unison on just the set of paths still needing attention after a\n\
+      \032      previous run.\n\
+      \032    * Made the ignorecase preference user-visible, and changed the\n\
+      \032      initialization code so that it can be manually set to true, even if\n\
+      \032      neither host is running Windows. (This may be useful, e.g., when\n\
+      \032      using Unison running on a Unix system with a FAT volume mounted.)\n\
+      \032    * Small improvements and bug fixes:\n\
+      \032         + Errors in preference files now generate fatal errors rather\n\
+      \032           than warnings at startup time. (I.e., you can't go on from\n\
+      \032           them.) Also, we fixed a bug that was preventing these warnings\n\
+      \032           from appearing in the text UI, so some users who have been\n\
+      \032           running (unsuspectingly) with garbage in their prefs files may\n\
+      \032           now get error reports.\n\
+      \032         + Error reporting for preference files now provides file name\n\
+      \032           and line number.\n\
+      \032         + More intelligible message in the case of identical change to\n\
+      \032           the same files: \"Nothing to do: replicas have been changed\n\
+      \032           only in identical ways since last sync.\"\n\
+      \032         + Files with prefix '.#' excluded when scanning for preference\n\
+      \032           files.\n\
+      \032         + Rsync instructions are send directly instead of first\n\
+      \032           marshaled.\n\
+      \032         + Won't try forever to get the fingerprint of a continuously\n\
+      \032           changing file: unison will give up after certain number of\n\
+      \032           retries.\n\
+      \032         + Other bug fixes, including the one reported by Peter Selinger\n\
+      \032           (force=older preference not working).\n\
+      \032    * Compilation:\n\
+      \032         + Upgraded to the new OCaml 3.04 compiler, with the LablGtk\n\
+      \032           1.2.3 library (patched version used for compiling under\n\
+      \032           Windows).\n\
+      \032         + Added the option to compile unison on the Windows platform\n\
+      \032           with Cygwin GNU C compiler. This option only supports building\n\
+      \032           dynamically linked unison executables.\n\
+      \n\
+      \032  Changes since 2.7.4:\n\
+      \032    * Fixed a silly (but debilitating) bug in the client startup\n\
+      \032      sequence.\n\
+      \n\
+      \032  Changes since 2.7.1:\n\
+      \032    * Added addprefsto preference, which (when set) controls which\n\
+      \032      preference file new preferences (e.g. new ignore patterns) are\n\
+      \032      added to.\n\
+      \032    * Bug fix: read the initial connection header one byte at a time, so\n\
+      \032      that we don't block if the header is shorter than expected. (This\n\
+      \032      bug did not affect normal operation -- it just made it hard to tell\n\
+      \032      when you were trying to use Unison incorrectly with an old version\n\
+      \032      of the server, since it would hang instead of giving an error\n\
+      \032      message.)\n\
+      \n\
+      \032  Changes since 2.6.59:\n\
+      \032    * Changed fastcheck from a boolean to a string preference. Its legal\n\
+      \032      values are yes (for a fast check), no (for a safe check), or\n\
+      \032      default (for a fast check--which also happens to be safe--when\n\
+      \032      running on Unix and a safe check when on Windows). The default is\n\
+      \032      default.\n\
+      \032    * Several preferences have been renamed for consistency. All\n\
+      \032      preference names are now spelled out in lowercase. For backward\n\
+      \032      compatibility, the old names still work, but they are not mentioned\n\
+      \032      in the manual any more.\n\
+      \032    * The temp files created by the 'diff' and 'merge' commands are now\n\
+      \032      named by prepending a new prefix to the file name, rather than\n\
+      \032      appending a suffix. This should avoid confusing diff/merge programs\n\
+      \032      that depend on the suffix to guess the type of the file contents.\n\
+      \032    * We now set the keepalive option on the server socket, to make sure\n\
+      \032      that the server times out if the communication link is unexpectedly\n\
+      \032      broken.\n\
+      \032    * Bug fixes:\n\
+      \032         + When updating small files, Unison now closes the destination\n\
+      \032           file.\n\
+      \032         + File permissions are properly updated when the file is behind\n\
+      \032           a followed link.\n\
+      \032         + Several other small fixes.\n\
+      \n\
+      \032  Changes since 2.6.38:\n\
+      \032    * Major Windows performance improvement!\n\
+      \032      We've added a preference fastcheck that makes Unison look only at a\n\
+      \032      file's creation time and last-modified time to check whether it has\n\
+      \032      changed. This should result in a huge speedup when checking for\n\
+      \032      updates in large replicas.\n\
+      \032      When this switch is set, Unison will use file creation times as\n\
+      \032      'pseudo inode numbers' when scanning Windows replicas for updates,\n\
+      \032      instead of reading the full contents of every file. This may cause\n\
+      \032      Unison to miss propagating an update if the create time,\n\
+      \032      modification time, and length of the file are all unchanged by the\n\
+      \032      update (this is not easy to achieve, but it can be done). However,\n\
+      \032      Unison will never overwrite such an update with a change from the\n\
+      \032      other replica, since it always does a safe check for updates just\n\
+      \032      before propagating a change. Thus, it is reasonable to use this\n\
+      \032      switch most of the time and occasionally run Unison once with\n\
+      \032      fastcheck set to false, if you are worried that Unison may have\n\
+      \032      overlooked an update.\n\
+      \032      Warning: This change is has not yet been thoroughly field-tested.\n\
+      \032      If you set the fastcheck preference, pay careful attention to what\n\
+      \032      Unison is doing.\n\
+      \032    * New functionality: centralized backups and merging\n\
+      \032         + This version incorporates two pieces of major new\n\
+      \032           functionality, implemented by Sylvain Roy during a summer\n\
+      \032           internship at Penn: a centralized backup facility that keeps a\n\
+      \032           full backup of (selected files in) each replica, and a merging\n\
+      \032           feature that allows Unison to invoke an external file-merging\n\
+      \032           tool to resolve conflicting changes to individual files.\n\
+      \032         + Centralized backups:\n\
+      \032              o Unison now maintains full backups of the\n\
+      \032                last-synchronized versions of (some of) the files in each\n\
+      \032                replica; these function both as backups in the usual\n\
+      \032                sense and as the \"common version\" when invoking external\n\
+      \032                merge programs.\n\
+      \032              o The backed up files are stored in a directory\n\
+      \032                /.unison/backup on each host. (The name of this directory\n\
+      \032                can be changed by setting the environment variable\n\
+      \032                UNISONBACKUPDIR.)\n\
+      \032              o The predicate backup controls which files are actually\n\
+      \032                backed up: giving the preference 'backup = Path *' causes\n\
+      \032                backing up of all files.\n\
+      \032              o Files are added to the backup directory whenever unison\n\
+      \032                updates its archive. This means that\n\
+      \032                   # When unison reconstructs its archive from scratch\n\
+      \032                     (e.g., because of an upgrade, or because the archive\n\
+      \032                     files have been manually deleted), all files will be\n\
+      \032                     backed up.\n\
+      \032                   # Otherwise, each file will be backed up the first\n\
+      \032                     time unison propagates an update for it.\n\
+      \032              o The preference backupversions controls how many previous\n\
+      \032                versions of each file are kept. The default is 2 (i.e.,\n\
+      \032                the last synchronized version plus one backup).\n\
+      \032              o For backward compatibility, the backups preference is\n\
+      \032                also still supported, but backup is now preferred.\n\
+      \032              o It is OK to manually delete files from the backup\n\
+      \032                directory (or to throw away the directory itself). Before\n\
+      \032                unison uses any of these files for anything important, it\n\
+      \032                checks that its fingerprint matches the one that it\n\
+      \032                expects.\n\
+      \032         + Merging:\n\
+      \032              o Both user interfaces offer a new 'merge' command, invoked\n\
+      \032                by pressing 'm' (with a changed file selected).\n\
+      \032              o The actual merging is performed by an external program.\n\
+      \032                The preferences merge and merge2 control how this program\n\
+      \032                is invoked. If a backup exists for this file (see the\n\
+      \032                backup preference), then the merge preference is used for\n\
+      \032                this purpose; otherwise merge2 is used. In both cases,\n\
+      \032                the value of the preference should be a string\n\
+      \032                representing the command that should be passed to a shell\n\
+      \032                to invoke the merge program. Within this string, the\n\
+      \032                special substrings CURRENT1, CURRENT2, NEW, and OLD may\n\
+      \032                appear at any point. Unison will substitute these as\n\
+      \032                follows before invoking the command:\n\
+      \032                   # CURRENT1 is replaced by the name of the local copy\n\
+      \032                     of the file;\n\
+      \032                   # CURRENT2 is replaced by the name of a temporary\n\
+      \032                     file, into which the contents of the remote copy of\n\
+      \032                     the file have been transferred by Unison prior to\n\
+      \032                     performing the merge;\n\
+      \032                   # NEW is replaced by the name of a temporary file that\n\
+      \032                     Unison expects to be written by the merge program\n\
+      \032                     when it finishes, giving the desired new contents of\n\
+      \032                     the file; and\n\
+      \032                   # OLD is replaced by the name of the backed up copy of\n\
+      \032                     the original version of the file (i.e., its state at\n\
+      \032                     the end of the last successful run of Unison), if\n\
+      \032                     one exists (applies only to merge, not merge2).\n\
+      \032                For example, on Unix systems setting the merge preference\n\
+      \032                to\n\
+      \032  merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW\n\
+      \n\
+      \032                will tell Unison to use the external diff3 program for\n\
+      \032                merging.\n\
+      \032                A large number of external merging programs are\n\
+      \032                available. For example, emacs users may find the\n\
+      \032                following convenient:\n\
+      \032   merge2 = emacs -q --eval '(ediff-merge-files \"CURRENT1\" \"CURRENT2\"\n\
+      \032              nil \"NEW\")'\n\
+      \032   merge = emacs -q --eval '(ediff-merge-files-with-ancestor\n\
+      \032              \"CURRENT1\" \"CURRENT2\" \"OLD\" nil \"NEW\")'\n\
+      \n\
+      \032                (These commands are displayed here on two lines to avoid\n\
+      \032                running off the edge of the page. In your preference\n\
+      \032                file, each should be written on a single line.)\n\
+      \032              o If the external program exits without leaving any file at\n\
+      \032                the path NEW, Unison considers the merge to have failed.\n\
+      \032                If the merge program writes a file called NEW but exits\n\
+      \032                with a non-zero status code, then Unison considers the\n\
+      \032                merge to have succeeded but to have generated conflicts.\n\
+      \032                In this case, it attempts to invoke an external editor so\n\
+      \032                that the user can resolve the conflicts. The value of the\n\
+      \032                editor preference controls what editor is invoked by\n\
+      \032                Unison. The default is emacs.\n\
+      \032              o Please send us suggestions for other useful values of the\n\
+      \032                merge2 and merge preferences - we'd like to give several\n\
+      \032                examples in the manual.\n\
+      \032    * Smaller changes:\n\
+      \032         + When one preference file includes another, unison no longer\n\
+      \032           adds the suffix '.prf' to the included file by default. If a\n\
+      \032           file with precisely the given name exists in the .unison\n\
+      \032           directory, it will be used; otherwise Unison will add .prf, as\n\
+      \032           it did before. (This change means that included preference\n\
+      \032           files can be named blah.include instead of blah.prf, so that\n\
+      \032           unison will not offer them in its 'choose a preference file'\n\
+      \032           dialog.)\n\
+      \032         + For Linux systems, we now offer both a statically linked and a\n\
+      \032           dynamically linked executable. The static one is larger, but\n\
+      \032           will probably run on more systems, since it doesn't depend on\n\
+      \032           the same versions of dynamically linked library modules being\n\
+      \032           available.\n\
+      \032         + Fixed the force and prefer preferences, which were getting the\n\
+      \032           propagation direction exactly backwards.\n\
+      \032         + Fixed a bug in the startup code that would cause unison to\n\
+      \032           crash when the default profile (~/.unison/default.prf) does\n\
+      \032           not exist.\n\
+      \032         + Fixed a bug where, on the run when a profile is first created,\n\
+      \032           Unison would confusingly display the roots in reverse order in\n\
+      \032           the user interface.\n\
+      \032    * For developers:\n\
+      \032         + We've added a module dependency diagram to the source\n\
+      \032           distribution, in src/DEPENDENCIES.ps, to help new prospective\n\
+      \032           developers with navigating the code.\n\
+      \n\
+      \032  Changes since 2.6.11:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed.\n\
+      \032    * INCOMPATIBLE CHANGE: The startup sequence has been completely\n\
+      \032      rewritten and greatly simplified. The main user-visible change is\n\
+      \032      that the defaultpath preference has been removed. Its effect can be\n\
+      \032      approximated by using multiple profiles, with include directives to\n\
+      \032      incorporate common settings. All uses of defaultpath in existing\n\
+      \032      profiles should be changed to path.\n\
+      \032      Another change in startup behavior that will affect some users is\n\
+      \032      that it is no longer possible to specify roots both in the profile\n\
+      \032      and on the command line.\n\
+      \032      You can achieve a similar effect, though, by breaking your profile\n\
+      \032      into two:\n\
+      \n\
+      \032 default.prf =\n\
+      \032     root = blah\n\
+      \032     root = foo\n\
+      \032     include common\n\
+      \n\
+      \032 common.prf =\n\
+      \032     <everything else>\n\
+      \n\
+      \032      Now do\n\
+      \032 unison common root1 root2\n\
+      \n\
+      \032      when you want to specify roots explicitly.\n\
+      \032    * The -prefer and -force options have been extended to allow users to\n\
+      \032      specify that files with more recent modtimes should be propagated,\n\
+      \032      writing either -prefer newer or -force newer. (For symmetry, Unison\n\
+      \032      will also accept -prefer older or -force older.) The -force\n\
+      \032      older/newer options can only be used when -times is also set.\n\
+      \032      The graphical user interface provides access to these facilities on\n\
+      \032      a one-off basis via the Actions menu.\n\
+      \032    * Names of roots can now be \"aliased\" to allow replicas to be\n\
+      \032      relocated without changing the name of the archive file where\n\
+      \032      Unison stores information between runs. (This feature is for\n\
+      \032      experts only. See the \"Archive Files\" section of the manual for\n\
+      \032      more information.)\n\
+      \032    * Graphical user-interface:\n\
+      \032         + A new command is provided in the Synchronization menu for\n\
+      \032           switching to a new profile without restarting Unison from\n\
+      \032           scratch.\n\
+      \032         + The GUI also supports one-key shortcuts for commonly used\n\
+      \032           profiles. If a profile contains a preference of the form 'key\n\
+      \032           = n', where n is a single digit, then pressing this key will\n\
+      \032           cause Unison to immediately switch to this profile and begin\n\
+      \032           synchronization again from scratch. (Any actions that may have\n\
+      \032           been selected for a set of changes currently being displayed\n\
+      \032           will be discarded.)\n\
+      \032         + Each profile may include a preference 'label = <string>'\n\
+      \032           giving a descriptive string that described the options\n\
+      \032           selected in this profile. The string is listed along with the\n\
+      \032           profile name in the profile selection dialog, and displayed in\n\
+      \032           the top-right corner of the main Unison window.\n\
+      \032    * Minor:\n\
+      \032         + Fixed a bug that would sometimes cause the 'diff' display to\n\
+      \032           order the files backwards relative to the main user interface.\n\
+      \032           (Thanks to Pascal Brisset for this fix.)\n\
+      \032         + On Unix systems, the graphical version of Unison will check\n\
+      \032           the DISPLAY variable and, if it is not set, automatically fall\n\
+      \032           back to the textual user interface.\n\
+      \032         + Synchronization paths (path preferences) are now matched\n\
+      \032           against the ignore preferences. So if a path is both specified\n\
+      \032           in a path preference and ignored, it will be skipped.\n\
+      \032         + Numerous other bugfixes and small improvements.\n\
+      \n\
+      \032  Changes since 2.6.1:\n\
+      \032    * The synchronization of modification times has been disabled for\n\
+      \032      directories.\n\
+      \032    * Preference files may now include lines of the form include <name>,\n\
+      \032      which will cause name.prf to be read at that point.\n\
+      \032    * The synchronization of permission between Windows and Unix now\n\
+      \032      works properly.\n\
+      \032    * A binding CYGWIN=binmode in now added to the environment so that\n\
+      \032      the Cygwin port of OpenSSH works properly in a non-Cygwin context.\n\
+      \032    * The servercmd and addversionno preferences can now be used\n\
+      \032      together: -addversionno appends an appropriate -NNN to the server\n\
+      \032      command, which is found by using the value of the -servercmd\n\
+      \032      preference if there is one, or else just unison.\n\
+      \032    * Both '-pref=val' and '-pref val' are now allowed for boolean\n\
+      \032      values. (The former can be used to set a preference to false.)\n\
+      \032    * Lot of small bugs fixed.\n\
+      \n\
+      \032  Changes since 2.5.31:\n\
+      \032    * The log preference is now set to true by default, since the log\n\
+      \032      file seems useful for most users.\n\
+      \032    * Several miscellaneous bugfixes (most involving symlinks).\n\
+      \n\
+      \032  Changes since 2.5.25:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed (again).\n\
+      \032    * Several significant bugs introduced in 2.5.25 have been fixed.\n\
+      \n\
+      \032  Changes since 2.5.1:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * New functionality:\n\
+      \032         + Unison now synchronizes file modtimes, user-ids, and\n\
+      \032           group-ids.\n\
+      \032           These new features are controlled by a set of new preferences,\n\
+      \032           all of which are currently false by default.\n\
+      \032              o When the times preference is set to true, file\n\
+      \032                modification times are propaged. (Because the\n\
+      \032                representations of time may not have the same granularity\n\
+      \032                on both replicas, Unison may not always be able to make\n\
+      \032                the modtimes precisely equal, but it will get them as\n\
+      \032                close as the operating systems involved allow.)\n\
+      \032              o When the owner preference is set to true, file ownership\n\
+      \032                information is synchronized.\n\
+      \032              o When the group preference is set to true, group\n\
+      \032                information is synchronized.\n\
+      \032              o When the numericIds preference is set to true, owner and\n\
+      \032                group information is synchronized numerically. By\n\
+      \032                default, owner and group numbers are converted to names\n\
+      \032                on each replica and these names are synchronized. (The\n\
+      \032                special user id 0 and the special group 0 are never\n\
+      \032                mapped via user/group names even if this preference is\n\
+      \032                not set.)\n\
+      \032         + Added an integer-valued preference perms that can be used to\n\
+      \032           control the propagation of permission bits. The value of this\n\
+      \032           preference is a mask indicating which permission bits should\n\
+      \032           be synchronized. It is set by default to 0o1777: all bits but\n\
+      \032           the set-uid and set-gid bits are synchronised (synchronizing\n\
+      \032           theses latter bits can be a security hazard). If you want to\n\
+      \032           synchronize all bits, you can set the value of this preference\n\
+      \032           to -1.\n\
+      \032         + Added a log preference (default false), which makes Unison\n\
+      \032           keep a complete record of the changes it makes to the\n\
+      \032           replicas. By default, this record is written to a file called\n\
+      \032           unison.log in the user's home directory (the value of the HOME\n\
+      \032           environment variable). If you want it someplace else, set the\n\
+      \032           logfile preference to the full pathname you want Unison to\n\
+      \032           use.\n\
+      \032         + Added an ignorenot preference that maintains a set of patterns\n\
+      \032           for paths that should definitely not be ignored, whether or\n\
+      \032           not they match an ignore pattern. (That is, a path will now be\n\
+      \032           ignored iff it matches an ignore pattern and does not match\n\
+      \032           any ignorenot patterns.)\n\
+      \032    * User-interface improvements:\n\
+      \032         + Roots are now displayed in the user interface in the same\n\
+      \032           order as they were given on the command line or in the\n\
+      \032           preferences file.\n\
+      \032         + When the batch preference is set, the graphical user interface\n\
+      \032           no longer waits for user confirmation when it displays a\n\
+      \032           warning message: it simply pops up an advisory window with a\n\
+      \032           Dismiss button at the bottom and keeps on going.\n\
+      \032         + Added a new preference for controlling how many status\n\
+      \032           messages are printed during update detection: statusdepth\n\
+      \032           controls the maximum depth for paths on the local machine\n\
+      \032           (longer paths are not displayed, nor are non-directory paths).\n\
+      \032           The value should be an integer; default is 1.\n\
+      \032         + Removed the trace and silent preferences. They did not seem\n\
+      \032           very useful, and there were too many preferences for\n\
+      \032           controlling output in various ways.\n\
+      \032         + The text UI now displays just the default command (the one\n\
+      \032           that will be used if the user just types <return>) instead of\n\
+      \032           all available commands. Typing ? will print the full list of\n\
+      \032           possibilities.\n\
+      \032         + The function that finds the canonical hostname of the local\n\
+      \032           host (which is used, for example, in calculating the name of\n\
+      \032           the archive file used to remember which files have been\n\
+      \032           synchronized) normally uses the gethostname operating system\n\
+      \032           call. However, if the environment variable UNISONLOCALHOSTNAME\n\
+      \032           is set, its value will now be used instead. This makes it\n\
+      \032           easier to use Unison in situations where a machine's name\n\
+      \032           changes frequently (e.g., because it is a laptop and gets\n\
+      \032           moved around a lot).\n\
+      \032         + File owner and group are now displayed in the \"detail window\"\n\
+      \032           at the bottom of the screen, when unison is configured to\n\
+      \032           synchronize them.\n\
+      \032    * For hackers:\n\
+      \032         + Updated to Jacques Garrigue's new version of lablgtk, which\n\
+      \032           means we can throw away our local patched version.\n\
+      \032           If you're compiling the GTK version of unison from sources,\n\
+      \032           you'll need to update your copy of lablgtk to the developers\n\
+      \032           release. (Warning: installing lablgtk under Windows is\n\
+      \032           currently a bit challenging.)\n\
+      \032         + The TODO.txt file (in the source distribution) has been\n\
+      \032           cleaned up and reorganized. The list of pending tasks should\n\
+      \032           be much easier to make sense of, for people that may want to\n\
+      \032           contribute their programming energies. There is also a\n\
+      \032           separate file BUGS.txt for open bugs.\n\
+      \032         + The Tk user interface has been removed (it was not being\n\
+      \032           maintained and no longer compiles).\n\
+      \032         + The debug preference now prints quite a bit of additional\n\
+      \032           information that should be useful for identifying sources of\n\
+      \032           problems.\n\
+      \032         + The version number of the remote server is now checked right\n\
+      \032           away during the connection setup handshake, rather than later.\n\
+      \032           (Somebody sent a bug report of a server crash that turned out\n\
+      \032           to come from using inconsistent versions: better to check this\n\
+      \032           earlier and in a way that can't crash either client or\n\
+      \032           server.)\n\
+      \032         + Unison now runs correctly on 64-bit architectures (e.g. Alpha\n\
+      \032           linux). We will not be distributing binaries for these\n\
+      \032           architectures ourselves (at least for a while) but if someone\n\
+      \032           would like to make them available, we'll be glad to provide a\n\
+      \032           link to them.\n\
+      \032    * Bug fixes:\n\
+      \032         + Pattern matching (e.g. for ignore) is now case-insensitive\n\
+      \032           when Unison is in case-insensitive mode (i.e., when one of the\n\
+      \032           replicas is on a windows machine).\n\
+      \032         + Some people had trouble with mysterious failures during\n\
+      \032           propagation of updates, where files would be falsely reported\n\
+      \032           as having changed during synchronization. This should be\n\
+      \032           fixed.\n\
+      \032         + Numerous smaller fixes.\n\
+      \n\
+      \032  Changes since 2.4.1:\n\
+      \032    * Added a number of 'sorting modes' for the user interface. By\n\
+      \032      default, conflicting changes are displayed at the top, and the rest\n\
+      \032      of the entries are sorted in alphabetical order. This behavior can\n\
+      \032      be changed in the following ways:\n\
+      \032         + Setting the sortnewfirst preference to true causes newly\n\
+      \032           created files to be displayed before changed files.\n\
+      \032         + Setting sortbysize causes files to be displayed in increasing\n\
+      \032           order of size.\n\
+      \032         + Giving the preference sortfirst=<pattern> (where <pattern> is\n\
+      \032           a path descriptor in the same format as 'ignore' and 'follow'\n\
+      \032           patterns, causes paths matching this pattern to be displayed\n\
+      \032           first.\n\
+      \032         + Similarly, giving the preference sortlast=<pattern> causes\n\
+      \032           paths matching this pattern to be displayed last.\n\
+      \032      The sorting preferences are described in more detail in the user\n\
+      \032      manual. The sortnewfirst and sortbysize flags can also be accessed\n\
+      \032      from the 'Sort' menu in the grpahical user interface.\n\
+      \032    * Added two new preferences that can be used to change unison's\n\
+      \032      fundamental behavior to make it more like a mirroring tool instead\n\
+      \032      of a synchronizer.\n\
+      \032         + Giving the preference prefer with argument <root> (by adding\n\
+      \032           -prefer <root> to the command line or prefer=<root>) to your\n\
+      \032           profile) means that, if there is a conflict, the contents of\n\
+      \032           <root> should be propagated to the other replica (with no\n\
+      \032           questions asked). Non-conflicting changes are treated as\n\
+      \032           usual.\n\
+      \032         + Giving the preference force with argument <root> will make\n\
+      \032           unison resolve all differences in favor of the given root,\n\
+      \032           even if it was the other replica that was changed.\n\
+      \032      These options should be used with care! (More information is\n\
+      \032      available in the manual.)\n\
+      \032    * Small changes:\n\
+      \032         + Changed default answer to 'Yes' in all two-button dialogs in\n\
+      \032           the graphical interface (this seems more intuitive).\n\
+      \032         + The rsync preference has been removed (it was used to activate\n\
+      \032           rsync compression for file transfers, but rsync compression is\n\
+      \032           now enabled by default).\n\
+      \032         + In the text user interface, the arrows indicating which\n\
+      \032           direction changes are being propagated are printed differently\n\
+      \032           when the user has overridded Unison's default recommendation\n\
+      \032           (====> instead of ---->). This matches the behavior of the\n\
+      \032           graphical interface, which displays such arrows in a different\n\
+      \032           color.\n\
+      \032         + Carriage returns (Control-M's) are ignored at the ends of\n\
+      \032           lines in profiles, for Windows compatibility.\n\
+      \032         + All preferences are now fully documented in the user manual.\n\
+      \n\
+      \032  Changes since 2.3.12:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * New/improved functionality:\n\
+      \032         + A new preference -sortbysize controls the order in which\n\
+      \032           changes are displayed to the user: when it is set to true, the\n\
+      \032           smallest changed files are displayed first. (The default\n\
+      \032           setting is false.)\n\
+      \032         + A new preference -sortnewfirst causes newly created files to\n\
+      \032           be listed before other updates in the user interface.\n\
+      \032         + We now allow the ssh protocol to specify a port.\n\
+      \032         + Incompatible change: The unison: protocol is deprecated, and\n\
+      \032           we added file: and socket:. You may have to modify your\n\
+      \032           profiles in the .unison directory. If a replica is specified\n\
+      \032           without an explicit protocol, we now assume it refers to a\n\
+      \032           file. (Previously \"//saul/foo\" meant to use SSH to connect to\n\
+      \032           saul, then access the foo directory. Now it means to access\n\
+      \032           saul via a remote file mechanism such as samba; the old effect\n\
+      \032           is now achieved by writing ssh://saul/foo.)\n\
+      \032         + Changed the startup sequence for the case where roots are\n\
+      \032           given but no profile is given on the command line. The new\n\
+      \032           behavior is to use the default profile (creating it if it does\n\
+      \032           not exist), and temporarily override its roots. The manual\n\
+      \032           claimed that this case would work by reading no profile at\n\
+      \032           all, but AFAIK this was never true.\n\
+      \032         + In all user interfaces, files with conflicts are always listed\n\
+      \032           first\n\
+      \032         + A new preference 'sshversion' can be used to control which\n\
+      \032           version of ssh should be used to connect to the server. Legal\n\
+      \032           values are 1 and 2. (Default is empty, which will make unison\n\
+      \032           use whatever version of ssh is installed as the default 'ssh'\n\
+      \032           command.)\n\
+      \032         + The situation when the permissions of a file was updated the\n\
+      \032           same on both side is now handled correctly (we used to report\n\
+      \032           a spurious conflict)\n\
+      \032    * Improvements for the Windows version:\n\
+      \032         + The fact that filenames are treated case-insensitively under\n\
+      \032           Windows should now be handled correctly. The exact behavior is\n\
+      \032           described in the cross-platform section of the manual.\n\
+      \032         + It should be possible to synchronize with Windows shares,\n\
+      \032           e.g., //host/drive/path.\n\
+      \032         + Workarounds to the bug in syncing root directories in Windows.\n\
+      \032           The most difficult thing to fix is an ocaml bug: Unix.opendir\n\
+      \032           fails on c: in some versions of Windows.\n\
+      \032    * Improvements to the GTK user interface (the Tk interface is no\n\
+      \032      longer being maintained):\n\
+      \032         + The UI now displays actions differently (in blue) when they\n\
+      \032           have been explicitly changed by the user from Unison's default\n\
+      \032           recommendation.\n\
+      \032         + More colorful appearance.\n\
+      \032         + The initial profile selection window works better.\n\
+      \032         + If any transfers failed, a message to this effect is displayed\n\
+      \032           along with 'Synchronization complete' at the end of the\n\
+      \032           transfer phase (in case they may have scrolled off the top).\n\
+      \032         + Added a global progress meter, displaying the percentage of\n\
+      \032           total bytes that have been transferred so far.\n\
+      \032    * Improvements to the text user interface:\n\
+      \032         + The file details will be displayed automatically when a\n\
+      \032           conflict is been detected.\n\
+      \032         + when a warning is generated (e.g. for a temporary file left\n\
+      \032           over from a previous run of unison) Unison will no longer wait\n\
+      \032           for a response if it is running in -batch mode.\n\
+      \032         + The UI now displays a short list of possible inputs each time\n\
+      \032           it waits for user interaction.\n\
+      \032         + The UI now quits immediately (rather than looping back and\n\
+      \032           starting the interaction again) if the user presses 'q' when\n\
+      \032           asked whether to propagate changes.\n\
+      \032         + Pressing 'g' in the text user interface will proceed\n\
+      \032           immediately with propagating updates, without asking any more\n\
+      \032           questions.\n\
+      \032    * Documentation and installation changes:\n\
+      \032         + The manual now includes a FAQ, plus sections on common\n\
+      \032           problems and on tricks contributed by users.\n\
+      \032         + Both the download page and the download directory explicitly\n\
+      \032           say what are the current stable and beta-test version numbers.\n\
+      \032         + The OCaml sources for the up-to-the-minute developers' version\n\
+      \032           (not guaranteed to be stable, or even to compile, at any given\n\
+      \032           time!) are now available from the download page.\n\
+      \032         + Added a subsection to the manual describing cross-platform\n\
+      \032           issues (case conflicts, illegal filenames)\n\
+      \032    * Many small bug fixes and random improvements.\n\
+      \n\
+      \032  Changes since 2.3.1:\n\
+      \032    * Several bug fixes. The most important is a bug in the rsync module\n\
+      \032      that would occasionally cause change propagation to fail with a\n\
+      \032      'rename' error.\n\
+      \n\
+      \032  Changes since 2.2:\n\
+      \032    * The multi-threaded transport system is now disabled by default. (It\n\
+      \032      is not stable enough yet.)\n\
+      \032    * Various bug fixes.\n\
+      \032    * A new experimental feature:\n\
+      \032      The final component of a -path argument may now be the wildcard\n\
+      \032      specifier *. When Unison sees such a path, it expands this path on\n\
+      \032      the client into into the corresponding list of paths by listing the\n\
+      \032      contents of that directory.\n\
+      \032      Note that if you use wildcard paths from the command line, you will\n\
+      \032      probably need to use quotes or a backslash to prevent the * from\n\
+      \032      being interpreted by your shell.\n\
+      \032      If both roots are local, the contents of the first one will be used\n\
+      \032      for expanding wildcard paths. (Nb: this is the first one after the\n\
+      \032      canonization step - i.e., the one that is listed first in the user\n\
+      \032      interface - not the one listed first on the command line or in the\n\
+      \032      preferences file.)\n\
+      \n\
+      \032  Changes since 2.1:\n\
+      \032    * The transport subsystem now includes an implementation by Sylvain\n\
+      \032      Gommier and Norman Ramsey of Tridgell and Mackerras's rsync\n\
+      \032      protocol. This protocol achieves much faster transfers when only a\n\
+      \032      small part of a large file has been changed by sending just diffs.\n\
+      \032      This feature is mainly helpful for transfers over slow links--on\n\
+      \032      fast local area networks it can actually degrade performance--so we\n\
+      \032      have left it off by default. Start unison with the -rsync option\n\
+      \032      (or put rsync=true in your preferences file) to turn it on.\n\
+      \032    * \"Progress bars\" are now diplayed during remote file transfers,\n\
+      \032      showing what percentage of each file has been transferred so far.\n\
+      \032    * The version numbering scheme has changed. New releases will now be\n\
+      \032      have numbers like 2.2.30, where the second component is incremented\n\
+      \032      on every significant public release and the third component is the\n\
+      \032      \"patch level.\"\n\
+      \032    * Miscellaneous improvements to the GTK-based user interface.\n\
+      \032    * The manual is now available in PDF format.\n\
+      \032    * We are experimenting with using a multi-threaded transport\n\
+      \032      subsystem to transfer several files at the same time, making much\n\
+      \032      more effective use of available network bandwidth. This feature is\n\
+      \032      not completely stable yet, so by default it is disabled in the\n\
+      \032      release version of Unison.\n\
+      \032      If you want to play with the multi-threaded version, you'll need to\n\
+      \032      recompile Unison from sources (as described in the documentation),\n\
+      \032      setting the THREADS flag in Makefile.OCaml to true. Make sure that\n\
+      \032      your OCaml compiler has been installed with the -with-pthreads\n\
+      \032      configuration option. (You can verify this by checking whether the\n\
+      \032      file threads/threads.cma in the OCaml standard library directory\n\
+      \032      contains the string -lpthread near the end.)\n\
+      \n\
+      \032  Changes since 1.292:\n\
+      \032    * Reduced memory footprint (this is especially important during the\n\
+      \032      first run of unison, where it has to gather information about all\n\
+      \032      the files in both repositories).\n\
+      \032    * Fixed a bug that would cause the socket server under NT to fail\n\
+      \032      after the client exits.\n\
+      \032    * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK\n\
+      \032      interface (to avoid hitting them accidentally).\n\
+      \n\
+      \032  Changes since 1.231:\n\
+      \032    * Tunneling over ssh is now supported in the Windows version. See the\n\
+      \032      installation section of the manual for detailed instructions.\n\
+      \032    * The transport subsystem now includes an implementation of the rsync\n\
+      \032      protocol, built by Sylvain Gommier and Norman Ramsey. This protocol\n\
+      \032      achieves much faster transfers when only a small part of a large\n\
+      \032      file has been changed by sending just diffs. The rsync feature is\n\
+      \032      off by default in the current version. Use the -rsync switch to\n\
+      \032      turn it on. (Nb. We still have a lot of tuning to do: you may not\n\
+      \032      notice much speedup yet.)\n\
+      \032    * We're experimenting with a multi-threaded transport subsystem,\n\
+      \032      written by Jerome Vouillon. The downloadable binaries are still\n\
+      \032      single-threaded: if you want to try the multi-threaded version,\n\
+      \032      you'll need to recompile from sources. (Say make THREADS=true.)\n\
+      \032      Native thread support from the compiler is required. Use the option\n\
+      \032      -threads N to select the maximal number of concurrent threads\n\
+      \032      (default is 5). Multi-threaded and single-threaded clients/servers\n\
+      \032      can interoperate.\n\
+      \032    * A new GTK-based user interface is now available, thanks to Jacques\n\
+      \032      Garrigue. The Tk user interface still works, but we'll be shifting\n\
+      \032      development effort to the GTK interface from now on.\n\
+      \032    * OCaml 3.00 is now required for compiling Unison from sources. The\n\
+      \032      modules uitk and myfileselect have been changed to use labltk\n\
+      \032      instead of camltk. To compile the Tk interface in Windows, you must\n\
+      \032      have ocaml-3.00 and tk8.3. When installing tk8.3, put it in c:\\Tcl\n\
+      \032      rather than the suggested c:\\Program Files\\Tcl, and be sure to\n\
+      \032      install the headers and libraries (which are not installed by\n\
+      \032      default).\n\
+      \032    * Added a new -addversionno switch, which causes unison to use\n\
+      \032      unison-<currentversionnumber> instead of just unison as the remote\n\
+      \032      server command. This allows multiple versions of unison to coexist\n\
+      \032      conveniently on the same server: whichever version is run on the\n\
+      \032      client, the same version will be selected on the server.\n\
+      \n\
+      \032  Changes since 1.219:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * This version fixes several annoying bugs, including:\n\
+      \032         + Some cases where propagation of file permissions was not\n\
+      \032           working.\n\
+      \032         + umask is now ignored when creating directories\n\
+      \032         + directories are create writable, so that a read-only directory\n\
+      \032           and its contents can be propagated.\n\
+      \032         + Handling of warnings generated by the server.\n\
+      \032         + Synchronizing a path whose parent is not a directory on both\n\
+      \032           sides is now flagged as erroneous.\n\
+      \032         + Fixed some bugs related to symnbolic links and nonexistant\n\
+      \032           roots.\n\
+      \032              o When a change (deletion or new contents) is propagated\n\
+      \032                onto a 'follow'ed symlink, the file pointed to by the\n\
+      \032                link is now changed. (We used to change the link itself,\n\
+      \032                which doesn't fit our assertion that 'follow' means the\n\
+      \032                link is completely invisible)\n\
+      \032              o When one root did not exist, propagating the other root\n\
+      \032                on top of it used to fail, because unison could not\n\
+      \032                calculate the working directory into which to write\n\
+      \032                changes. This should be fixed.\n\
+      \032    * A human-readable timestamp has been added to Unison's archive\n\
+      \032      files.\n\
+      \032    * The semantics of Path and Name regular expressions now correspond\n\
+      \032      better.\n\
+      \032    * Some minor improvements to the text UI (e.g. a command for going\n\
+      \032      back to previous items)\n\
+      \032    * The organization of the export directory has changed -- should be\n\
+      \032      easier to find / download things now.\n\
+      \n\
+      \032  Changes since 1.200:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * This version has not been tested extensively on Windows.\n\
+      \032    * Major internal changes designed to make unison safer to run at the\n\
+      \032      same time as the replicas are being changed by the user.\n\
+      \032    * Internal performance improvements.\n\
+      \n\
+      \032  Changes since 1.190:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * A number of internal functions have been changed to reduce the\n\
+      \032      amount of memory allocation, especially during the first\n\
+      \032      synchronization. This should help power users with very big\n\
+      \032      replicas.\n\
+      \032    * Reimplementation of low-level remote procedure call stuff, in\n\
+      \032      preparation for adding rsync-like smart file transfer in a later\n\
+      \032      release.\n\
+      \032    * Miscellaneous bug fixes.\n\
+      \n\
+      \032  Changes since 1.180:\n\
+      \032    * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you\n\
+      \032      synchronize your replicas before upgrading, to avoid spurious\n\
+      \032      conflicts. The first sync after upgrading will be slow.\n\
+      \032    * Fixed some small bugs in the interpretation of ignore patterns.\n\
+      \032    * Fixed some problems that were preventing the Windows version from\n\
+      \032      working correctly when click-started.\n\
+      \032    * Fixes to treatment of file permissions under Windows, which were\n\
+      \032      causing spurious reports of different permissions when\n\
+      \032      synchronizing between windows and unix systems.\n\
+      \032    * Fixed one more non-tail-recursive list processing function, which\n\
+      \032      was causing stack overflows when synchronizing very large replicas.\n\
+      \n\
+      \032  Changes since 1.169:\n\
+      \032    * The text user interface now provides commands for ignoring files.\n\
+      \032    * We found and fixed some more non-tail-recursive list processing\n\
+      \032      functions. Some power users have reported success with very large\n\
+      \032      replicas.\n\
+      \032    * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored\n\
+      \032      automatically. If you want to ignore such files, put an appropriate\n\
+      \032      ignore pattern in your profile.\n\
+      \032    * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has\n\
+      \032      changed. Instead of putting a line of the form\n\
+      \032                ignore = <regexp>\n\
+      \n\
+      \032      in your profile (.unison/default.prf), you should put:\n\
+      \032                ignore = Regex <regexp>\n\
+      \n\
+      \032      Moreover, two other styles of pattern are also recognized:\n\
+      \032                ignore = Name <name>\n\
+      \n\
+      \032      matches any path in which one component matches <name>, while\n\
+      \032                ignore = Path <path>\n\
+      \n\
+      \032      matches exactly the path <path>.\n\
+      \032      Standard \"globbing\" conventions can be used in <name> and <path>:\n\
+      \032         + a ? matches any single character except /\n\
+      \032         + a * matches any sequence of characters not including /\n\
+      \032         + [xyz] matches any character from the set {x, y, z }\n\
+      \032         + {a,bb,ccc} matches any one of a, bb, or ccc.\n\
+      \032      See the user manual for some examples.\n\
+      \n\
+      \032  Changes since 1.146:\n\
+      \032    * Some users were reporting stack overflows when synchronizing huge\n\
+      \032      directories. We found and fixed some non-tail-recursive list\n\
+      \032      processing functions, which we hope will solve the problem. Please\n\
+      \032      give it a try and let us know.\n\
+      \032    * Major additions to the documentation.\n\
+      \n\
+      \032  Changes since 1.142:\n\
+      \032    * Major internal tidying and many small bugfixes.\n\
+      \032    * Major additions to the user manual.\n\
+      \032    * Unison can now be started with no arguments - it will prompt\n\
+      \032      automatically for the name of a profile file containing the roots\n\
+      \032      to be synchronized. This makes it possible to start the graphical\n\
+      \032      UI from a desktop icon.\n\
+      \032    * Fixed a small bug where the text UI on NT was raising a 'no such\n\
+      \032      signal' exception.\n\
+      \n\
+      \032  Changes since 1.139:\n\
+      \032    * The precompiled windows binary in the last release was compiled\n\
+      \032      with an old OCaml compiler, causing propagation of permissions not\n\
+      \032      to work (and perhaps leading to some other strange behaviors we've\n\
+      \032      heard reports about). This has been corrected. If you're using\n\
+      \032      precompiled binaries on Windows, please upgrade.\n\
+      \032    * Added a -debug command line flag, which controls debugging of\n\
+      \032      various modules. Say -debug XXX to enable debug tracing for module\n\
+      \032      XXX, or -debug all to turn on absolutely everything.\n\
+      \032    * Fixed a small bug where the text UI on NT was raising a 'no such\n\
+      \032      signal' exception.\n\
+      \n\
+      \032  Changes since 1.111:\n\
+      \032    * INCOMPATIBLE CHANGE: The names and formats of the preference files\n\
+      \032      in the .unison directory have changed. In particular:\n\
+      \032         + the file \"prefs\" should be renamed to default.prf\n\
+      \032         + the contents of the file \"ignore\" should be merged into\n\
+      \032           default.prf. Each line of the form REGEXP in ignore should\n\
+      \032           become a line of the form ignore = REGEXP in default.prf.\n\
+      \032    * Unison now handles permission bits and symbolic links. See the\n\
+      \032      manual for details.\n\
+      \032    * You can now have different preference files in your .unison\n\
+      \032      directory. If you start unison like this\n\
+      \032            unison profilename\n\
+      \n\
+      \032      (i.e. with just one \"anonymous\" command-line argument), then the\n\
+      \032      file ~/.unison/profilename.prf will be loaded instead of\n\
+      \032      default.prf.\n\
+      \032    * Some improvements to terminal handling in the text user interface\n\
+      \032    * Added a switch -killServer that terminates the remote server\n\
+      \032      process when the unison client is shutting down, even when using\n\
+      \032      sockets for communication. (By default, a remote server created\n\
+      \032      using ssh/rsh is terminated automatically, while a socket server is\n\
+      \032      left running.)\n\
+      \032    * When started in 'socket server' mode, unison prints 'server\n\
+      \032      started' on stderr when it is ready to accept connections. (This\n\
+      \032      may be useful for scripts that want to tell when a socket-mode\n\
+      \032      server has finished initalization.)\n\
+      \032    * We now make a nightly mirror of our current internal development\n\
+      \032      tree, in case anyone wants an up-to-the-minute version to hack\n\
+      \032      around with.\n\
+      \032    * Added a file CONTRIB with some suggestions for how to help us make\n\
+      \032      Unison better.\n\
+      \n\
+      "))
+::
+    ("", ("Junk", 
+     "\032    __________________________________________________________________\n\
+      \n\
+      \032    This document was translated from L^AT[E]X by [2]H^EV^EA.\n\
+      \n\
+      References\n\
+      \n\
+      \032  1. file://localhost/home/greg/projects/unison/branches/2.40/doc/temp.html#ssh-win\n\
+      \032  2. http://hevea.inria.fr/index.html\n\
+      "))
+::
+    [];;
+