[Unison-hackers] [unison-svn] r290 - in trunk: . doc src src/ubase

Benjamin C. Pierce bcpierce at seas.upenn.edu
Mon Jun 23 22:45:31 EDT 2008


Author: bcpierce
Date: 2008-06-23 22:45:20 -0400 (Mon, 23 Jun 2008)
New Revision: 290

Modified:
   trunk/Makefile
   trunk/doc/unison-manual.tex
   trunk/src/NEWS
   trunk/src/RECENTNEWS
   trunk/src/case.ml
   trunk/src/copy.ml
   trunk/src/fileinfo.ml
   trunk/src/files.ml
   trunk/src/globals.ml
   trunk/src/main.ml
   trunk/src/mkProjectInfo.ml
   trunk/src/osx.ml
   trunk/src/pred.ml
   trunk/src/pred.mli
   trunk/src/props.ml
   trunk/src/recon.ml
   trunk/src/remote.ml
   trunk/src/sortri.ml
   trunk/src/stasher.ml
   trunk/src/strings.ml
   trunk/src/transport.ml
   trunk/src/ubase/prefs.ml
   trunk/src/ubase/trace.ml
   trunk/src/ubase/uarg.ml
   trunk/src/ubase/uarg.mli
   trunk/src/uicommon.ml
   trunk/src/uitext.ml
   trunk/src/update.ml
   trunk/src/xferhint.ml
Log:
* Lots of little documentation tidying.  (In particular, I finally
  spent the time to separate preferences into Basic and Advanced!
  This should hopefully make Unison a little more approachable for new
  users.)




Modified: trunk/Makefile
===================================================================
--- trunk/Makefile	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/Makefile	2008-06-24 02:45:20 UTC (rev 290)
@@ -138,7 +138,7 @@
 	@echo Creating DOWNLOADDIR = $(DOWNLOADDIR)
 	@echo
 	-mkdir -p $(DOWNLOADDIR)
-	#touch $(DOWNLOADDIR)/THIS-IS-UNISON-$(VERSION)
+#	touch $(DOWNLOADDIR)/THIS-IS-UNISON-$(VERSION)
 
 exportsources:
 	$(RM) -r $(TMP)/$(EXPORTNAME)

Modified: trunk/doc/unison-manual.tex
===================================================================
--- trunk/doc/unison-manual.tex	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/doc/unison-manual.tex	2008-06-24 02:45:20 UTC (rev 290)
@@ -1310,8 +1310,8 @@
 \begin{quote}
 \verbatiminput{prefs.tmp} 
 \end{quote}
-Here, in more detail, are what they do.  Many are discussed in even greater
-detail in other sections of the manual. 
+Here, in more detail, is what they do.  Many are discussed in greater detail
+in other sections of the manual.
 %
 \input{prefsdocs.tmp} 
 

Modified: trunk/src/NEWS
===================================================================
--- trunk/src/NEWS	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/NEWS	2008-06-24 02:45:20 UTC (rev 290)
@@ -1,16 +1,150 @@
 
-Changes in Version 2.14.0
+Changes in Version 2.29.5
 
+   Changes since 2.17:
+     * Major rewrite and cleanup of the whole Mac OS X graphical user
+       interface by Craig Federighi. Thanks, Craig!!!
+     * Small fix to ctime (non-)handling in update detection under
+       windows with fastcheck.
+
+   Changes since 2.17:
+     * Several small fixes to the GTK2 UI to make it work better under
+       Windows [thanks to Karl M for these].
+     * The backup functionality has been completely rewritten. The
+       external interface has not changed, but numerous bugs, irregular
+       behaviors, and cross-platform inconsistencies have been corrected.
+     * The Unison project now accepts donations via PayPal. If you'd like
+       to donate, you can find a link to the donation page on the Unison
+       home page (http://www.cis.upenn.edu/ bcpierce/unison/lists.html).
+     * Some important safety improvements:
+          + Added a new mountpoint preference, which can be used to
+            specify a path that must exist in both replicas at the end of
+            update detection (otherwise Unison aborts). This can be used
+            to avoid potentially dangerous situations when Unison is used
+            with removable media such as external hard drives and compact
+            flash cards.
+          + The confirmation of "big deletes" is now controlled by a
+            boolean preference confirmbigdeletes. Default is true, which
+            gives the same behavior as previously. (This functionality is
+            at least partly superceded by the mountpoint preference, but
+            it has been left in place in case it is useful to some
+            people.)
+          + If Unison is asked to "follow" a symbolic link but there is
+            nothing at the other end of the link, it will now flag this
+            path as an error, rather than treating the symlink itself as
+            missing or deleted. This avoids a potentially dangerous
+            situation where a followed symlink points to an external
+            filesystem that might be offline when Unison is run
+            (whereupon Unison would cheerfully delete the corresponding
+            files in the other replica!).
+     * Smaller changes:
+          + Added forcepartial and preferpartial preferences, which
+            behave like force and prefer but can be specified on a
+            per-path basis. [Thanks to Alan Schmitt for this.]
+          + A bare-bones self test feature was added, which runs unison
+            through some of its paces and checks that the results are as
+            expected. The coverage of the tests is still very limited,
+            but the facility has already been very useful in debugging
+            the new backup functionality (especially in exposing some
+            subtle cross-platform issues).
+          + Refined debugging code so that the verbosity of individual
+            modules can be controlled separately. Instead of just putting
+            '-debug verbose' on the command line, you can put '-debug
+            update+', which causes all the extra messages in the Update
+            module, but not other modules, to be printed. Putting '-debug
+            verbose' causes all modules to print with maximum verbosity.
+          + Removed mergebatch preference. (It never seemed very useful,
+            and its semantics were confusing.)
+          + Rewrote some of the merging functionality, for better
+            cooperation with external Harmony instances.
+          + Changed the temp file prefix from .# to .unison.
+          + Compressed the output from the text user interface
+            (particularly when run with the -terse flag) to make it
+            easier to interpret the results when Unison is run several
+            times in succession from a script.
+          + Diff and merge functions now work under Windows.
+          + Changed the order of arguments to the default diff command
+            (so that the + and - annotations in diff's output are
+            reversed).
+          + Added .mpp files to the "never fastcheck" list (like .xls
+            files).
+     * Many small bugfixes, including:
+          + Fixed a longstanding bug regarding fastcheck and daylight
+            saving time under Windows when Unison is set up to
+            synchronize modification times. (Modification times cannot be
+            updated in the archive in this case, so we have to ignore one
+            hour differences.)
+          + Fixed a bug that would occasionally cause the archives to be
+            left in non-identical states on the two hosts after
+            synchronization.
+          + Fixed a bug that prevented Unison from communicating
+            correctly between 32- and 64-bit architectures.
+          + On windows, file creation times are no longer used as a proxy
+            for inode numbers. (This is unfortunate, as it makes
+            fastcheck a little less safe. But it turns out that file
+            creation times are not reliable under Windows: if a file is
+            removed and a new file is created in its place, the new one
+            will sometimes be given the same creation date as the old
+            one!)
+          + Set read-only file to R/W on OSX before attempting to change
+            other attributes.
+          + Fixed bug resulting in spurious "Aborted" errors during
+            transport (thanks to Jerome Vouillon)
+          + Enable diff if file contents have changed in one replica, but
+            only properties in the other.
+          + Removed misleading documentation for 'repeat' preference.
+          + Fixed a bug in merging code where Unison could sometimes
+            deadlock with the external merge program, if the latter
+            produced large amounts of output.
+          + Workaround for a bug compiling gtk2 user interface against
+            current versions of gtk2+ libraries.
+          + Added a better error message for "ambiguous paths".
+          + Squashed a longstanding bug that would cause file transfer to
+            fail with the message "Failed: Error in readWrite: Is a
+            directory."
+          + Replaced symlinks with copies of their targets in the Growl
+            framework in src/uimac. This should make the sources easier
+            to check out from the svn repository on WinXP systems.
+          + Added a workaround (suggested by Karl M.) for the problem
+            discussed on the unison users mailing list where, on the
+            Windows platform, the server would hang when transferring
+            files. I conjecture that the problem has to do with the RPC
+            mechanism, which was used to make a call back from the server
+            to the client (inside the Trace.log function) so that the log
+            message would be appended to the log file on the client. The
+            workaround is to dump these messages (about when
+            xferbycopying shortcuts are applied and whether they succeed)
+            just to the standard output of the Unison process, not to the
+            log file.
+
+   Changes since 2.13.0:
+     * The features for performing backups and for invoking external
+       merge programs have been completely rewritten by Stephane Lescuyer
+       (thanks, Stephane!). The user-visible functionality should not
+       change, but the internals have been rationalized and there are a
+       number of new features. See the manual (in particular, the
+       description of the backupXXX preferences) for details.
+     * Incorporated patches for ipv6 support, contributed by Samuel
+       Thibault. (Note that, due to a bug in the released OCaml 3.08.3
+       compiler, this code will not actually work with ipv6 unless
+       compiled with the CVS version of the OCaml compiler, where the bug
+       has been fixed; however, ipv4 should continue to work normally.)
+     * OSX interface:
+          + Incorporated Ben Willmore's cool new icon for the Mac UI.
+     * Small fixes:
+          + Fixed off by one error in month numbers (in printed dates)
+            reported by Bob Burger
+
    Changes since 2.12.0:
      * New convention for release numbering: Releases will continue to be
        given numbers of the form X.Y.Z, but, from now on, just the major
        version number (X.Y) will be considered significant when checking
        compatibility between client and server versions. The third
        component of the version number will be used only to identify
-       ``patch levels'' of releases.
+       "patch levels" of releases.
        This change goes hand in hand with a change to the procedure for
        making new releases. Candidate releases will initially be given
-       ``beta release'' status when they are announced for public
+       "beta release" status when they are announced for public
        consumption. Any bugs that are discovered will be fixed in a
        separate branch of the source repository (without changing the
        major version number) and new tarballs re-released as needed. When
@@ -88,7 +222,7 @@
        Subversion. One nice side-effect is that anonymous checkout is now
        possible, like this:
         svn co https://cvs.cis.upenn.edu:3690/svnroot/unison/
-       We will also continue to export a ``developer tarball'' of the
+       We will also continue to export a "developer tarball" of the
        current (modulo one day) sources in the web export directory. To
        receive commit logs for changes to the sources, subscribe to the
        unison-hackers list
@@ -168,10 +302,6 @@
             override left-over archive locks. (Setting this preference is
             dangerous! Use it only if you are positive you know what you
             are doing.)
-          + Running with the -timers flag set to true will now show the
-            total time taken to check for updates on each directory.
-            (This can be helpful for tidying directories to improve
-            update detection times.)
           + Added a new preference assumeContentsAreImmutable. If a
             directory matches one of the patterns set in this preference,
             then update detection is skipped for files in this directory.
@@ -228,7 +358,7 @@
           + Restarting update detection from the graphical UI will reload
             the current profile (which in particular will reset the -path
             preference, in case it has been narrowed by using the
-            ``Recheck unsynchronized items'' command).
+            "Recheck unsynchronized items" command).
           + Several small improvements to the text user interface,
             including a progress display.
      * Bug fixes (too numerous to count, actually, but here are some):
@@ -289,13 +419,13 @@
           + Makefile.OCaml now sets UISTYLE=text or UISTYLE=gtk
             automatically, depending on whether it finds lablgtk
             installed
-          + Unison should now compile ``out of the box'' under OSX
+          + Unison should now compile "out of the box" under OSX
 
    Changes since 2.8.1:
      * Changing profile works again under Windows
      * File movement optimization: Unison now tries to use local copy
        instead of transfer for moved or copied files. It is controled by
-       a boolean option ``xferbycopying''.
+       a boolean option "xferbycopying".
      * Network statistics window (transfer rate, amount of data
        transferred). [NB: not available in Windows-Cygwin version.]
      * symlinks work under the cygwin version (which is dynamically
@@ -318,7 +448,7 @@
             the basic utility modules so that the non-unison-specific
             stuff can be made available for other projects.)
           + several Makefile and docs changes (for release);
-          + further comments in ``update.ml'';
+          + further comments in "update.ml";
           + connection information is not stored in global variables
             anymore.
 
@@ -332,9 +462,9 @@
        are now both accessible).
      * User manual revised.
      * Added some new preferences:
-          + ``sshcmd'' and ``rshcmd'' for specifying paths to ssh and rsh
+          + "sshcmd" and "rshcmd" for specifying paths to ssh and rsh
             programs.
-          + ``contactquietly'' for suppressing the ``contacting server''
+          + "contactquietly" for suppressing the "contacting server"
             message during Unison startup (under the graphical UI).
      * Bug fixes:
           + Fixed small bug in UI that neglected to change the displayed
@@ -344,8 +474,8 @@
             if it encountered a conflict when run in batch mode.
           + Added some code to try to fix the display of non-Ascii
             characters in filenames on Windows systems in the GTK UI.
-            (This code is currently untested---if you're one of the
-            people that had reported problems with display of non-ascii
+            (This code is currently untested--if you're one of the people
+            that had reported problems with display of non-ascii
             filenames, we'd appreciate knowing if this actually fixes
             things.)
           + `-prefer/-force newer' works properly now. (The bug was
@@ -380,7 +510,8 @@
             nicely under multi-threading. The temp file names are made
             less likely to coincide with the name of a file created by
             the user. They take the form
-            .#<filename>.<serial>.unison.tmp.
+            .#<filename>.<serial>.unison.tmp. [N.b. This was later
+            changed to .unison.<filename>.<serial>.unison.tmp.]
      * Added a new command to the GTK user interface: pressing 'f' causes
        Unison to start a new update detection phase, using as paths just
        those paths that have been detected as changed and not yet marked
@@ -402,8 +533,8 @@
           + Error reporting for preference files now provides file name
             and line number.
           + More intelligible message in the case of identical change to
-            the same files: ``Nothing to do: replicas have been changed
-            only in identical ways since last sync.''
+            the same files: "Nothing to do: replicas have been changed
+            only in identical ways since last sync."
           + Files with prefix '.#' excluded when scanning for preference
             files.
           + Rsync instructions are send directly instead of first
@@ -431,7 +562,7 @@
        added to.
      * Bug fix: read the initial connection header one byte at a time, so
        that we don't block if the header is shorter than expected. (This
-       bug did not affect normal operation --- it just made it hard to
+       bug did not affect normal operation -- it just made it hard to
        tell when you were trying to use Unison incorrectly with an old
        version of the server, since it would hang instead of giving an
        error message.)
@@ -439,7 +570,7 @@
    Changes since 2.6.59:
      * Changed fastcheck from a boolean to a string preference. Its legal
        values are yes (for a fast check), no (for a safe check), or
-       default (for a fast check---which also happens to be safe---when
+       default (for a fast check--which also happens to be safe--when
        running on Unix and a safe check when on Windows). The default is
        default.
      * Several preferences have been renamed for consistency. All
@@ -494,7 +625,7 @@
                o Unison now maintains full backups of the
                  last-synchronized versions of (some of) the files in
                  each replica; these function both as backups in the
-                 usual sense and as the ``common version'' when invoking
+                 usual sense and as the "common version" when invoking
                  external merge programs.
                o The backed up files are stored in a directory
                  /.unison/backup on each host. (The name of this
@@ -575,7 +706,7 @@
                  conflicts. The value of the editor preference controls
                  what editor is invoked by Unison. The default is emacs.
                o Please send us suggestions for other useful values of
-                 the merge2 and merge preferences -- we'd like to give
+                 the merge2 and merge preferences - we'd like to give
                  several examples in the manual.
      * Smaller changes:
           + When one preference file includes another, unison no longer
@@ -636,10 +767,10 @@
        also set.
        The graphical user interface provides access to these facilities
        on a one-off basis via the Actions menu.
-     * Names of roots can now be ``aliased'' to allow replicas to be
+     * Names of roots can now be "aliased" to allow replicas to be
        relocated without changing the name of the archive file where
        Unison stores information between runs. (This feature is for
-       experts only. See the ``Archive Files'' section of the manual for
+       experts only. See the "Archive Files" section of the manual for
        more information.)
      * Graphical user-interface:
           + A new command is provided in the Synchronization menu for
@@ -773,9 +904,9 @@
             instead. This makes it easier to use Unison in situations
             where a machine's name changes frequently (e.g., because it
             is a laptop and gets moved around a lot).
-          + File owner and group are now displayed in the ``detail
-            window'' at the bottom of the screen, when unison is
-            configured to synchronize them.
+          + File owner and group are now displayed in the "detail window"
+            at the bottom of the screen, when unison is configured to
+            synchronize them.
      * For hackers:
           + Updated to Jacques Garrigue's new version of lablgtk, which
             means we can throw away our local patched version.
@@ -966,8 +1097,8 @@
        from being interpreted by your shell.
        If both roots are local, the contents of the first one will be
        used for expanding wildcard paths. (Nb: this is the first one
-       after the canonization step -- i.e., the one that is listed first
-       in the user interface -- not the one listed first on the command
+       after the canonization step - i.e., the one that is listed first
+       in the user interface - not the one listed first on the command
        line or in the preferences file.)
 
    Changes since 2.1:
@@ -975,16 +1106,16 @@
        Gommier and Norman Ramsey of Tridgell and Mackerras's rsync
        protocol. This protocol achieves much faster transfers when only a
        small part of a large file has been changed by sending just diffs.
-       This feature is mainly helpful for transfers over slow links---on
-       fast local area networks it can actually degrade performance---so
+       This feature is mainly helpful for transfers over slow links--on
+       fast local area networks it can actually degrade performance--so
        we have left it off by default. Start unison with the -rsync
        option (or put rsync=true in your preferences file) to turn it on.
-     * ``Progress bars'' are now diplayed during remote file transfers,
+     * "Progress bars" are now diplayed during remote file transfers,
        showing what percentage of each file has been transferred so far.
      * The version numbering scheme has changed. New releases will now be
        have numbers like 2.2.30, where the second component is
        incremented on every significant public release and the third
-       component is the ``patch level.''
+       component is the "patch level."
      * Miscellaneous improvements to the GTK-based user interface.
      * The manual is now available in PDF format.
      * We are experimenting with using a multi-threaded transport
@@ -1074,7 +1205,7 @@
        better.
      * Some minor improvements to the text UI (e.g. a command for going
        back to previous items)
-     * The organization of the export directory has changed --- should be
+     * The organization of the export directory has changed -- should be
        easier to find / download things now.
 
    Changes since 1.200:
@@ -1131,8 +1262,7 @@
        matches any path in which one component matches <name>, while
                  ignore = Path <path>
        matches exactly the path <path>.
-       Standard ``globbing'' conventions can be used in <name> and
-       <path>:
+       Standard "globbing" conventions can be used in <name> and <path>:
           + a ? matches any single character except /
           + a * matches any sequence of characters not including /
           + [xyz] matches any character from the set {x, y, z }
@@ -1149,7 +1279,7 @@
    Changes since 1.142:
      * Major internal tidying and many small bugfixes.
      * Major additions to the user manual.
-     * Unison can now be started with no arguments -- it will prompt
+     * Unison can now be started with no arguments - it will prompt
        automatically for the name of a profile file containing the roots
        to be synchronized. This makes it possible to start the graphical
        UI from a desktop icon.
@@ -1171,8 +1301,8 @@
    Changes since 1.111:
      * INCOMPATIBLE CHANGE: The names and formats of the preference files
        in the .unison directory have changed. In particular:
-          + the file ``prefs'' should be renamed to default.prf
-          + the contents of the file ``ignore'' should be merged into
+          + the file "prefs" should be renamed to default.prf
+          + the contents of the file "ignore" should be merged into
             default.prf. Each line of the form REGEXP in ignore should
             become a line of the form ignore = REGEXP in default.prf.
      * Unison now handles permission bits and symbolic links. See the
@@ -1180,7 +1310,7 @@
      * You can now have different preference files in your .unison
        directory. If you start unison like this
              unison profilename
-       (i.e. with just one ``anonymous'' command-line argument), then the
+       (i.e. with just one "anonymous" command-line argument), then the
        file ~/.unison/profilename.prf will be loaded instead of
        default.prf.
      * Some improvements to terminal handling in the text user interface

Modified: trunk/src/RECENTNEWS
===================================================================
--- trunk/src/RECENTNEWS	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/RECENTNEWS	2008-06-24 02:45:20 UTC (rev 290)
@@ -1,3 +1,13 @@
+CHANGES FROM VERSION 2.29.5
+
+* Lots of little documentation tidying.  (In particular, I finally
+  spent the time to separate preferences into Basic and Advanced!
+  This should hopefully make Unison a little more approachable for new
+  users.)
+
+
+
+-------------------------------
 CHANGES FROM VERSION 2.29.4
 
 * When using the internal transfer method, remove any temp file on the

Modified: trunk/src/case.ml
===================================================================
--- trunk/src/case.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/case.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -7,7 +7,7 @@
 (* the hosts is case insensitive.                                            *)
 let caseInsensitiveMode =
   Prefs.createString "ignorecase" "default"
-    "ignore upper/lowercase in filenames (`true', `false', or `default')"
+    "!identify upper/lowercase filenames (true/false/default)"
     ("When set to {\\tt true}, this flag causes Unison to treat "
      ^ "filenames as case insensitive---i.e., files in the two "
      ^ "replicas whose names differ in (upper- and lower-case) `spelling' "

Modified: trunk/src/copy.ml
===================================================================
--- trunk/src/copy.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/copy.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -113,7 +113,7 @@
 
 let rsyncActivated =
   Prefs.createBool "rsync" true
-    "activate the rsync transfer mode"
+    "!activate the rsync transfer mode"
     ("Unison uses the 'rsync algorithm' for 'diffs-only' transfer "
      ^ "of updates to large files.  Setting this flag to false makes Unison "
      ^ "use whole-file transfers instead.  Under normal circumstances, "
@@ -483,7 +483,7 @@
 
 let copyprog =
   Prefs.createString "copyprog" "rsync --partial --inplace --compress"
-    "External program for copying large files"
+    "!external program for copying large files"
     ("A string giving the name of an "
      ^ "external program that can be used to copy large files efficiently  "
      ^ "(plus command-line switches "
@@ -494,14 +494,15 @@
 
 let copythreshold =
   Prefs.createInt "copythreshold" (-1)
-    "If nonnegative, use copyprog to transfer files larger than this"
+    "!use external copyprog on files this big (if >=0, in Kb)"
     ("A number indicating above what filesize (in kilobytes) Unison should "
      ^ "use the external "
      ^ "copying utility specified by {\\tt copyprog}. Specifying 0 will cause "
      ^ "{\\em all} copies to use the external program; "
      ^ "a negative number will prevent any files from using it.  "
      ^ "The default is -1.  "
-     ^ "\\sectionref{speeding}{Making Unison Faster on Large Files}")
+     ^ "See \\sectionref{speeding}{Making Unison Faster on Large Files} "
+     ^ "for more information.")
 
 let tryCopyMovedFileLocal connFrom
             (fspathTo, pathTo, realPathTo, update, desc, fp, ress, id) =

Modified: trunk/src/fileinfo.ml
===================================================================
--- trunk/src/fileinfo.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/fileinfo.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -101,7 +101,7 @@
 
 let pretendLocalOSIsWin32 =
   Prefs.createBool "pretendwin" false
-    "Use creation times for detecting updates"
+    "!Use creation times for detecting updates"
     ("When set to true, this preference makes Unison use Windows-style "
   ^ "fast update detection (using file creation times as "
   ^ "``pseudo-inode-numbers''), even when running on a Unix system.  This "

Modified: trunk/src/files.ml
===================================================================
--- trunk/src/files.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/files.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -453,7 +453,7 @@
 
 let diffCmd =
   Prefs.createString "diff" "diff -u CURRENT2 CURRENT1"
-    "*command for showing differences between files"
+    "!command for showing differences between files"
     ("This preference can be used to control the name and command-line "
      ^ "arguments of the system "
      ^ "utility used to generate displays of file differences.  The default "

Modified: trunk/src/globals.ml
===================================================================
--- trunk/src/globals.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/globals.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -11,7 +11,7 @@
 
 let rawroots =
   Prefs.createStringList "root"
-    "root of a replica"
+    "root of a replica (should be used exactly twice)"
     ("Each use of this preference names the root of one of the replicas "
      ^ "for Unison to synchronize.  Exactly two roots are needed, so normal "
      ^ "modes of usage are either to give two values for \\verb|root| in the "
@@ -203,13 +203,16 @@
      ^ "will be propagated; conflicts will be skipped.")
 
 let confirmBigDeletes =
-  Prefs.createBool "confirmbigdeletes" true "request confirmation for whole-replica deletes"
-    ("When this is set to {\\tt true}, Unison will request an extra confirmation if it appears "
+  Prefs.createBool "confirmbigdel" true
+    "!ask about whole-replica (or path) deletes"
+    ("!When this is set to {\\tt true}, Unison will request an extra confirmation if it appears "
      ^ "that the entire replica has been deleted, before propagating the change.  If the {\\tt batch} "
      ^ "flag is also set, synchronization will be aborted.  When the {\\tt path} preference is used, "
      ^ "the same confirmation will be requested for top-level paths.  (At the moment, this flag only "
      ^ "affects the text user interface.)  See also the {\\tt mountpoint} preference.")
 
+let () = Prefs.alias confirmBigDeletes "confirmbigdeletes"
+
 let ignore =
   Pred.create "ignore"
     ("Including the preference \\texttt{-ignore \\ARG{pathspec}} causes Unison to "
@@ -250,7 +253,7 @@
   Pred.intern ignore newRE
 
 let merge = 
-  Pred.create "merge"
+  Pred.create "merge" ~advanced:true
     ("This preference can be used to run a merge program which will create "
      ^ "a new version for each of the files and the backup, "
      ^ "with the last backup and the both replicas.  Setting the {\\tt merge} "

Modified: trunk/src/main.ml
===================================================================
--- trunk/src/main.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/main.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -70,7 +70,8 @@
 
 let socketPrefName = "socket"
 let socket =
-  Prefs.create socketPrefName None "act as a server on a socket" ""
+  Prefs.create socketPrefName None
+    "!act as a server on a socket" ""
     (fun _ -> fun i ->
       (try
          Some(int_of_string i)
@@ -81,13 +82,13 @@
 let serverHostName = "host"
 let serverHost =
   Prefs.createString serverHostName ""
-    "bind the socket to this host name in server socket mode" ""
+    "!bind the socket to this host name in server socket mode" ""
 
 (* User preference for which UI to use if there is a choice *)
 let uiPrefName = "ui"
 let interface =
   Prefs.create uiPrefName Uicommon.Graphic
-    "select user interface ('text' or 'graphic'); command-line only"
+    "!select UI ('text' or 'graphic'); command-line only"
     ("This preference selects either the graphical or the textual user "
      ^ "interface.  Legal values are \\verb|graphic| or \\verb|text|.  "
      ^ "\n\nBecause this option is processed specially during Unison's "

Modified: trunk/src/mkProjectInfo.ml
===================================================================
--- trunk/src/mkProjectInfo.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/mkProjectInfo.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -75,3 +75,4 @@
 
 
 
+

Modified: trunk/src/osx.ml
===================================================================
--- trunk/src/osx.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/osx.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -9,8 +9,7 @@
 
 let rsrcSync =
   Prefs.createString "rsrc" "default"
-    "synchronize resource forks and HFS meta-data \
-     (`true', `false', or `default')"
+    "!synchronize resource forks (true/false/default)"
     "When set to {\\tt true}, this flag causes Unison to synchronize \
      resource forks and HFS meta-data.  On filesystems that do not \
      natively support resource forks, this data is stored in \

Modified: trunk/src/pred.ml
===================================================================
--- trunk/src/pred.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/pred.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -71,9 +71,12 @@
     end in
   (compiled, v)
 
-let create name fulldoc =
+let create name ?(advanced=false) fulldoc =
   let pref = 
-    Prefs.create name [] ("add a pattern to the " ^ name ^ " list") fulldoc
+    Prefs.create name []
+      ((if advanced then "!" else "")
+       ^ "add a pattern to the " ^ name ^ " list")
+      fulldoc
       (fun oldList string ->
          ignore (compile_pattern string); (* Check well-formedness *)
         string :: oldList)

Modified: trunk/src/pred.mli
===================================================================
--- trunk/src/pred.mli	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/pred.mli	2008-06-24 02:45:20 UTC (rev 290)
@@ -30,7 +30,7 @@
 
 (* Create a new predicate and register it with the preference module.  The first
    arg is the name of the predicate; the second is full (latex) documentation. *)
-val create : string -> string -> t  
+val create : string -> ?advanced:bool -> string -> t  
 
 (* Check whether a given path matches one of the default or current patterns *)
 val test : t -> string -> bool

Modified: trunk/src/props.ml
===================================================================
--- trunk/src/props.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/props.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -212,8 +212,8 @@
 (* ------------------------------------------------------------------------- *)
 
 let numericIds =
-  Prefs.createBool "numericids"
-    false "don't map uid/gid values by user/group names"
+  Prefs.createBool "numericids" false
+    "!don't map uid/gid values by user/group names"
     "When this flag is set to \\verb|true|, groups and users are \
      synchronized numerically, rather than by name. \n\
      \n\
@@ -343,7 +343,7 @@
 
 let sync =
   Prefs.createBool "group"
-    false "synchronize group"
+    false "synchronize group attributes"
     ("When this flag is set to \\verb|true|, the group attributes "
      ^ "of the files are synchronized.  "
      ^ "Whether the group names or the group identifiers are synchronized"

Modified: trunk/src/recon.ml
===================================================================
--- trunk/src/recon.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/recon.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -84,7 +84,7 @@
      ^ "know what you are doing!")
 
 let forceRootPartial: Pred.t =
-  Pred.create "forcepartial"
+  Pred.create "forcepartial" ~advanced:true
     ("Including the preference \\texttt{forcepartial \\ARG{PATHSPEC} -> \\ARG{root}} causes Unison to "
      ^ "resolve all differences (even non-conflicting changes) in favor of "
      ^ "\\ARG{root} for the files in \\ARG{PATHSPEC} (see \\sectionref{pathspec}{Path Specification} "
@@ -112,7 +112,7 @@
      ^ "know what you are doing!")
 
 let preferRootPartial: Pred.t =
-  Pred.create "preferpartial"
+  Pred.create "preferpartial" ~advanced:true
     ("Including the preference \\texttt{preferpartial \\ARG{PATHSPEC} -> \\ARG{root}} "
      ^ "causes Unison always to "
      ^ "resolve conflicts in favor of \\ARG{root}, rather than asking for "

Modified: trunk/src/remote.ml
===================================================================
--- trunk/src/remote.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/remote.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -412,7 +412,7 @@
    these be part of it too? *)
 let sshCmd =
   Prefs.createString "sshcmd" "ssh"
-    ("path to the ssh executable")
+    ("!path to the ssh executable")
     ("This preference can be used to explicitly set the name of the "
      ^ "ssh executable (e.g., giving a full path name), if necessary.")
 
@@ -433,7 +433,7 @@
 
 let sshargs =
   Prefs.createString "sshargs" ""
-    "other arguments (if any) for remote shell command"
+    "!other arguments (if any) for remote shell command"
     ("The string value of this preference will be passed as additional "
      ^ "arguments (besides the host name and the name of the Unison "
      ^ "executable on the remote system) to the \\verb|ssh| "
@@ -442,14 +442,14 @@
 
 let serverCmd =
   Prefs.createString "servercmd" ""
-    ("name of " ^ Uutil.myName ^ " executable on remote server")
+    ("!name of " ^ Uutil.myName ^ " executable on remote server")
     ("This preference can be used to explicitly set the name of the "
      ^ "Unison executable on the remote server (e.g., giving a full "
      ^ "path name), if necessary.")
 
 let addversionno =
   Prefs.createBool "addversionno" false
-    ("add version number to name of " ^ Uutil.myName ^ " executable on server")
+    ("!add version number to name of " ^ Uutil.myName ^ " on server")
     ("When this flag is set to {\\tt true}, Unison "
      ^ "will use \\texttt{unison-\\ARG{currentversionnumber}} instead of "
      ^ "just \\verb|unison| as the remote server command.  This allows "
@@ -1120,7 +1120,7 @@
 
 let killServer =
   Prefs.createBool "killserver" false
-    "kill server when done (even when using sockets)"
+    "!kill server when done (even when using sockets)"
     ("When set to \\verb|true|, this flag causes Unison to kill the remote "
      ^ "server process when the synchronization is finished.  This behavior "
      ^ "is the default for \\verb|ssh| connections, so this preference is not "

Modified: trunk/src/sortri.ml
===================================================================
--- trunk/src/sortri.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/sortri.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -9,7 +9,7 @@
 
 let bysize =
   Prefs.createBool "sortbysize" false
-    "list changed files by size, not name"
+    "!list changed files by size, not name"
     ("When this flag is set, the user interface will list changed files "
      ^ "by size (smallest first) rather than by name.  This is useful, for "
      ^ "example, for synchronizing over slow links, since it puts very "
@@ -22,13 +22,13 @@
 
 let newfirst =
   Prefs.createBool "sortnewfirst" false
-    "list new before changed files"
+    "!list new before changed files"
     ("When this flag is set, the user interface will list newly created "
      ^ "files before all others.  This is useful, for example, for checking "
      ^ "that newly created files are not `junk', i.e., ones that should be "
      ^ "ignored or deleted rather than synchronized.")
 
-let sortfirst = Pred.create "sortfirst"
+let sortfirst = Pred.create "sortfirst" ~advanced:true
     ("Each argument to \\texttt{sortfirst} is a pattern \\ARG{pathspec}, "
      ^ "which describes a set of paths.  "
      ^ "Files matching any of these patterns will be listed first in the "
@@ -36,7 +36,7 @@
      ^ "The syntax of \\ARG{pathspec} is "
      ^ "described in \\sectionref{pathspec}{Path Specification}.")
 
-let sortlast = Pred.create "sortlast"
+let sortlast = Pred.create "sortlast" ~advanced:true
     ("Similar to \\verb|sortfirst|, except that files matching one of these "
      ^ "patterns will be listed at the very end.")
 

Modified: trunk/src/stasher.ml
===================================================================
--- trunk/src/stasher.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/stasher.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -9,8 +9,8 @@
 let verbose = Util.debug "stasher+"
 
 let backuplocation = 
-  Prefs.createString "backuplocation" "central"
-    "where backups are stored ('local' or 'central')"
+  Prefs.createString "backuploc" "central"
+    "!where backups are stored ('local' or 'central')"
     ("This preference determines whether backups should be kept locally, near the "
      ^ "original files, or"
      ^" in a central directory specified by the \\texttt{backupdir} "
@@ -18,8 +18,10 @@
      ^"the same directory as the original files, and if set to \\verb|central|,"
      ^" \\texttt{backupdir} will be used instead.")
     
+let _ = Prefs.alias backuplocation "backuplocation"
+
 let backup =
-  Pred.create "backup"
+  Pred.create "backup" ~advanced:true
     ("Including the preference \\texttt{-backup \\ARG{pathspec}} "
      ^ "causes Unison to keep backup files for each path that matches "
      ^ "\\ARG{pathspec}.  These backup files are kept in the "
@@ -33,7 +35,7 @@
 let _ = Pred.alias backup "mirror"
 
 let backupnot =
-  Pred.create "backupnot"
+  Pred.create "backupnot" ~advanced:true
     ("The values of this preference specify paths or individual files or"
      ^ " regular expressions that should {\\em not} "
      ^ "be backed up, even if the {\\tt backup} preference selects "
@@ -49,7 +51,7 @@
     
 let backupprefix =
   Prefs.createString "backupprefix" ".bak.$VERSION."
-    "prefix for the names of backup files"
+    "!prefix for the names of backup files"
     ("When a backup for a file \\verb|NAME| is created, it is stored "
      ^ "in a directory specified by \\texttt{backuplocation}, in a file called "
      ^ "\\texttt{backupprefix}\\verb|NAME|\\texttt{backupsuffix}."
@@ -65,12 +67,12 @@
     
 let backupsuffix =
   Prefs.createString "backupsuffix" ""
-    "a suffix to be added to names of backup files"
+    "!a suffix to be added to names of backup files"
     ("See \\texttt{backupprefix} for full documentation.")
 
 let backups =
   Prefs.createBool "backups" false
-    "keep backup copies of all files (see also 'backup')"
+    "!keep backup copies of all files (see also 'backup')"
     ("Setting this flag to true is equivalent to "
      ^" setting \\texttt{backuplocation} to \\texttt{local}"
      ^" and \\texttt{backup} to \\verb|Name *|.")
@@ -91,7 +93,7 @@
 	
 let maxbackups =
   Prefs.createInt "maxbackups" 2
-    "number of backed up versions of a file"
+    "!number of backed up versions of a file"
     ("This preference specifies the number of backup versions that will "
      ^ "be kept by unison, for each path that matches the predicate "
      ^ "\\verb|backup|.  The default is 2.")
@@ -101,7 +103,7 @@
     
 let backupdir =
   Prefs.createString "backupdir" ""
-    "Directory for storing centralized backups"
+    "!directory for storing centralized backups"
     ("If this preference is set, Unison will use it as the name of the "
      ^ "directory used to store backup files specified by "
      ^ "the {\\tt backup} preference, when {\\tt backuplocation} is set"
@@ -119,8 +121,8 @@
 	else Os.fileInUnisonDir "backup")
 
 let backupcurrent =
-  Pred.create "backupcurrent"
-    ("Including the preference \\texttt{-backupcurrent \\ARG{pathspec}} "
+  Pred.create "backupcurr" ~advanced:true
+    ("Including the preference \\texttt{-backupcurr \\ARG{pathspec}} "
      ^" causes Unison to keep a backup of the {\\em current} version of every file "
      ^ "matching \\ARG{pathspec}.  "
      ^" This file will be saved as a backup with version number 000. Such"
@@ -131,8 +133,8 @@
      ^ "\\sectionref{pathspec}{Path Specification}.")
 
 let backupcurrentnot =
-  Pred.create "backupcurrentnot" 
-   "Exceptions to \\verb|backupcurrent|, like the \\verb|ignorenot| preference."
+  Pred.create "backupcurrnot" ~advanced:true
+   "Exceptions to \\verb|backupcurr|, like the \\verb|ignorenot| preference."
 
 let shouldBackupCurrent p =
      (* BCP: removed next line [Apr 2007]: causes ALL mergeable files to be backed
@@ -142,6 +144,9 @@
   (let s = Path.toString p in
       Pred.test backupcurrent s && not (Pred.test backupcurrentnot s))
 
+let _ = Pred.alias backupcurrent "backupcurrent"
+let _ = Pred.alias backupcurrentnot "backupcurrentnot"
+
 (*------------------------------------------------------------------------------------*)
 
 (* NB: We use Str.regexp here because we need group matching to retrieve

Modified: trunk/src/strings.ml
===================================================================
--- trunk/src/strings.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/strings.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -4,8 +4,13 @@
 let docs =
     ("about", ("About Unison", 
      "Unison File Synchronizer\n\
-      Version 2.26.12\n\
+      Version 2.29.5\n\
       \n\
+      "))
+::
+    ("", ("Overview", 
+     "Overview\n\
+      \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\
@@ -61,7 +66,7 @@
       \032  Trevor Jim (http://www.research.att.com/~trevor/), Benjamin Pierce\n\
       \032  (http://www.cis.upenn.edu/~bcpierce/), and J\233r\244me Vouillon\n\
       \032  (http://www.pps.jussieu.fr/~vouillon/), with Alan Schmitt\n\
-      \032  (http://www.inrialpes.fr/~aschmitt/), Malo Denielou, Zhe Yang\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\
@@ -91,7 +96,10 @@
       \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 http://www.cis.upenn.edu/~bcpierce/unison/lists.html\n\
+      \032  developers. See\n\
+      \n\
+      \032    http://www.cis.upenn.edu/~bcpierce/unison/lists.html\n\
+      \n\
       \032  for more information.\n\
       \n\
       "))
@@ -121,23 +129,35 @@
       \032  unison-users at yahoogroups.com (mailto:unison-users at yahoogroups.com).\n\
       \n\
       \032  Patches are even more welcome. They should be sent to\n\
-      \032  unison-hackers at yahoogroups.com\n\
-      \032  (mailto:unison-hackers at yahoogroups.com). (Since safety and robustness\n\
-      \032  are Unison's most important properties, patches will be held to high\n\
-      \032  standards of clear design and clean coding.) If you want to contribute\n\
-      \032  to Unison, start by downloading the developer tarball from the\n\
-      \032  download page. For some details on how the code is organized, etc.,\n\
-      \032  see the file CONTRIB.\n\
+      \032  unison-hackers at lists.seas.upenn.edu\n\
+      \032  (mailto:unison-hackers at lists.seas.upenn.edu). (Since safety and\n\
+      \032  robustness are Unison's most important properties, patches will be\n\
+      \032  held to high standards of clear design and clean coding.) If you want\n\
+      \032  to contribute to Unison, start by downloading the developer tarball\n\
+      \032  from the download page. For some details on how the code is organized,\n\
+      \032  etc., see the file CONTRIB.\n\
       \n\
       "))
 ::
     ("copying", ("Copying", 
      "Copying\n\
       \n\
-      \032  Unison is free software. You are free to change and redistribute it\n\
-      \032  under the terms of the GNU General Public License. Please see the file\n\
-      \032  COPYING in the Unison distribution for more information.\n\
+      \032  This file is part of Unison.\n\
       \n\
+      \032  Unison is free software: you can redistribute it and/or modify it\n\
+      \032  under the terms of the GNU General Public License as published by the\n\
+      \032  Free 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", 
@@ -1108,6 +1128,9 @@
       \032 -confirmbigdeletes      request confirmation for whole-replica deletes\n\
       \032 -confirmmerge       ask for confirmation before commiting results of a merge\n\
       \032 -contactquietly      Suppress the 'contacting server' message during startup\n\
+      \032 -copyprog xxx       External program for copying large files\n\
+      \032 -copythreshold n    If nonnegative, use copyprog to transfer files larger tha\n\
+      n this\n\
       \032 -debug xxx          debug module xxx ('all' -> everything, 'verbose' -> more)\n\
       \032 -doc xxx            show documentation ('-doc topics' lists topics)\n\
       \032 -dumbtty            do not try to change terminal settings in text UI\n\
@@ -1169,8 +1192,8 @@
       \032 -version            print version and exit\n\
       \032 -xferbycopying      optimize transfers using local copies, if possible\n\
       \n\
-      \032  Here, in more detail, are what they do. Many are discussed in even\n\
-      \032  greater detail in other sections of the manual.\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\
       \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\n\
@@ -1269,8 +1292,22 @@
       \032         effect.\n\
       \032  contactquietly \n\
       \032         If this flag is set, Unison will skip displaying the\n\
-      \032         `Contacting server' window (which some users find annoying)\n\
+      \032         `Contacting server' message (which some users find annoying)\n\
       \032         during startup.\n\
+      \032  copyprog xxx\n\
+      \032         A string giving the name of an external program that can be\n\
+      \032         used to copy large files efficiently (plus command-line\n\
+      \032         switches telling it to copy files in-place and to\n\
+      \032         resumeinterrupted transfers). The default setting invokes rsync\n\
+      \032         with appropriate options--most users should not need to change\n\
+      \032         it.\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. the section \"Making Unison Faster on Large\n\
+      \032         Files\"\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\
@@ -1316,24 +1353,24 @@
       \032         unison.dump on each host, containing a text summary of the\n\
       \032         archive, immediately after loading it.\n\
       \032  fastcheck xxx\n\
-      \032         When this preference is set to true, Unison will use file\n\
-      \032         creation times as `pseudo inode numbers' when scanning replicas\n\
-      \032         for updates, instead of reading the full contents of every\n\
-      \032         file. Under Windows, this may cause Unison to miss propagating\n\
-      \032         an update if the create time, modification time, and length of\n\
-      \032         the file are all unchanged by the update (this is not easy to\n\
-      \032         achieve, but it can be done). However, Unison will never\n\
-      \032         overwrite such an update with a change from the other replica,\n\
-      \032         since it always does a safe check for updates just before\n\
-      \032         propagating a change. Thus, it is reasonable to use this switch\n\
-      \032         under Windows most of the time and occasionally run Unison once\n\
-      \032         with fastcheck set to false, if you are worried that Unison may\n\
-      \032         have overlooked an update. The default value of the preference\n\
-      \032         is auto, which causes Unison to use fast checking on Unix\n\
-      \032         replicas (where it is safe) and slow checking on Windows\n\
-      \032         replicas. For backward compatibility, yes, no, and default can\n\
-      \032         be used in place of true, false, and auto. See the section\n\
-      \032         \"Fast Checking\" for more information.\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\n\
+      \032         check for updates just before propagating a change. Thus, it is\n\
+      \032         reasonable to use this switch under Windows most of the time\n\
+      \032         and occasionally run Unison once with fastcheck set to false,\n\
+      \032         if you are worried that Unison may have overlooked an update.\n\
+      \032         The default value of the preference is auto, which causes\n\
+      \032         Unison to use fast checking on Unix replicas (where it is safe)\n\
+      \032         and slow checking on Windows replicas. For backward\n\
+      \032         compatibility, yes, no, and default can be used in place of\n\
+      \032         true, false, and auto. See the section \"Fast Checking\" for more\n\
+      \032         information.\n\
       \032  follow xxx\n\
       \032         Including the preference -follow pathspec causes Unison to\n\
       \032         treat symbolic links matching pathspec as `invisible' and\n\
@@ -1385,7 +1422,7 @@
       \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\n\
-      \032         to t default, filenames are automatically taken to be\n\
+      \032         to 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 is useful to set the flag manually (e.g.\n\
       \032         when running Unison on a Unix system with a FAT [Windows]\n\
@@ -1421,12 +1458,12 @@
       \032         should use the path preference to choose particular paths to\n\
       \032         synchronize.\n\
       \032  immutable xxx\n\
-      \032         This preference specifies paths for directories whose children\n\
-      \032         are all immutable files -- i.e., once a file has been created,\n\
-      \032         its contents never changes. When scanning for updates, Unison\n\
-      \032         does not check whether these files have been modified; this can\n\
-      \032         speed update detection significantly (in particular, for mail\n\
-      \032         directories).\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\
       \032  immutablenot xxx\n\
       \032         This preference overrides immutable.\n\
       \032  key xxx\n\
@@ -1810,7 +1847,7 @@
       \032   # file 'common' rathen than in the top-level preference file\n\
       \032   addprefsto = common\n\
       \n\
-      \032   # regexps specifying names and paths to ignore\n\
+      \032   # Names and paths to ignore:\n\
       \032   ignore = Name temp.*\n\
       \032   ignore = Name *~\n\
       \032   ignore = Name .*~\n\
@@ -1889,16 +1926,16 @@
       \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 backupversions controls how many previous versions of\n\
-      \032  each file are kept. The default is 2.\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 .unison.FILENAME.VERSION.bak, where\n\
-      \032  FILENAME is the original filename and version is the backup number\n\
-      \032  (001 for the most recent, 002 for the next most recent, etc.). This\n\
-      \032  can be changed by setting the preferences backupprefix and/or\n\
-      \032  backupsuffix. If desired, backupprefix may include a directory prefix;\n\
-      \032  this can be used with backuplocation = local to put all backup files\n\
-      \032  for each directory into a single subdirectory. For example, setting\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.\n\
+      \032  If desired, backupprefix may include a directory prefix; this can be\n\
+      \032  used with backuplocation = local to put all backup files for each\n\
+      \032  directory into a single subdirectory. For example, setting\n\
       \032   backuplocation = local\n\
       \032   backupprefix = .unison/$VERSION.\n\
       \032   backupsuffix =\n\
@@ -2019,7 +2056,8 @@
       \n\
       \032  A large number of external merging programs are available. For\n\
       \032  example, on Unix systems setting the merge preference to\n\
-      \032   merge = Name *.txt -> diff3 CURRENT1 CURRENTARCH CURRENT2 -m > NEW\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\
@@ -2029,8 +2067,14 @@
       \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.) Users running Mac OS X (you may need the\n\
-      \032  Developer Tools installed to get the opendiff utility) may prefer\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 -mer\n\
       ge NEW\n\
       \n\
@@ -2284,6 +2328,42 @@
       \032  by enabling ssh's compression feature. Do this by adding the option\n\
       \032  \"-rshargs -C\" to the command line or \"rshargs = -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, the built-in transfer method is not highly\n\
+      \032  optimized. Also, if Unison is interrupted in the middle of\n\
+      \032  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 by telling Unison to use an\n\
+      \032  external file copying utility for whole-file transfers. The\n\
+      \032  recommended one is the standalone rsync tool, which is available by\n\
+      \032  default on most Unix systems and can easily be installed on Windows\n\
+      \032  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\n\
+      \032  copy small files by itself, but can be useful for testing.) If you set\n\
+      \032  it to a larger value, Unison will use the external utility for all\n\
+      \032  files larger than this size (which is given in kilobytes, so setting\n\
+      \032  it to 1000 will cause the external tool to be used for all transfers\n\
+      \032  larger than a megabyte).\n\
+      \n\
+      \032  If you want to use a different external copy utility, set the copyprog\n\
+      \032  preference.\n\
+      \n\
+      \032  If a directory transfer is interrupted, the next run of Unison will\n\
+      \032  skip any files that were completely transferred before the\n\
+      \032  interruption. Note, though, that the new directory will not appear in\n\
+      \032  the destination filesystem until everything has been\n\
+      \032  transferred--partially transferred directories are kept in a temporary\n\
+      \032  location (with names like .unison.DIRNAME....) until the transfer is\n\
+      \032  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\
@@ -2291,7 +2371,7 @@
       \032  changes (which involves scanning the full contents of every file on\n\
       \032  every sync--the only completely safe way to do it under Windows) is\n\
       \032  too slow. Unison provides a preference fastcheck that, when set to\n\
-      \032  yes, causes it to use file creation times as 'pseudo inode numbers'\n\
+      \032  true, causes it to use file creation times as 'pseudo inode numbers'\n\
       \032  when scanning replicas for updates, instead of reading the full\n\
       \032  contents of every file.\n\
       \n\
@@ -2302,9 +2382,8 @@
       \032  Unix replicas and slow checks on Windows replicas.\n\
       \n\
       \032  This strategy may cause Unison to miss propagating an update if the\n\
-      \032  create time, modification time, and length of the file are all\n\
-      \032  unchanged by the update (this is not easy to achieve, but it can be\n\
-      \032  done). However, Unison will never overwrite such an update with a\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\n\
       \032  use this switch most of the time and occasionally run Unison once with\n\
@@ -2327,11 +2406,11 @@
       \n\
       \032  To prevent accidents, Unison provides a preference called mountpoint.\n\
       \032  Including a line like\n\
-      \032            mountpoint = /mnt/foo\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 /mnt/foo\n\
-      \032  on both replicas; if it does not, the Unison run will abort.\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\
@@ -2359,6 +2438,11 @@
     ("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.Unison\n\
+      \032  FAQOSSpecific).\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\
@@ -2373,7 +2457,7 @@
       \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. (Warning: These instructions may be out of date.)\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\
@@ -2455,25 +2539,24 @@
       \n\
       "))
 ::
-    ("news", ("Changes in Version 2.26.12", 
-     "Changes in Version 2.26.12\n\
+    ("news", ("Changes in Version 2.29.5", 
+     "Changes in Version 2.29.5\n\
       \n\
       \032  Changes since 2.17:\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    * The native OS X user interface has been enormously improved by Ben\n\
-      \032      Willmore and Trevor Jim. (We have observed intermittent crashes of\n\
-      \032      this UI when used for large synchronizations. This problem has\n\
-      \032      hopefully been fixed by a recent improvement in locking when\n\
-      \032      communicating between Objective C and OCaml; if any further\n\
-      \032      crashes are observed, we would appreciate hearing about them,\n\
-      \032      especially if they are repeatable.)\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\n\
+      \032      windows with fastcheck.\n\
+      \n\
+      \032  Changes since 2.17:\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\
@@ -2527,6 +2610,23 @@
       \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\n\
+      \032           synchronize modification times. (Modification times cannot be\n\
+      \032           updated in the archive in this case, so we have to ignore one\n\
+      \032           hour 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\n\
+      \032           correctly 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\n\
+      \032           fastcheck a little less safe. But it turns out that file\n\
+      \032           creation times are not reliable under Windows: if a file is\n\
+      \032           removed and a new file is created in its place, the new one\n\
+      \032           will sometimes be given the same creation date as the old\n\
+      \032           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\
@@ -2743,10 +2843,6 @@
       \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         + Running with the -timers flag set to true will now show the\n\
-      \032           total time taken to check for updates on each directory.\n\
-      \032           (This can be helpful for tidying directories to improve\n\
-      \032           update detection times.)\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\
@@ -3780,7 +3876,7 @@
      "Junk\n\
       \032    _________________________________________________________________\n\
       \n\
-      \032    This document was translated from LAT[E]X by [2]HEVEA.\n\
+      \032    This document was translated from L^AT[E]X by [2]H^EV^EA.\n\
       \n\
       References\n\
       \n\

Modified: trunk/src/transport.ml
===================================================================
--- trunk/src/transport.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/transport.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -22,7 +22,7 @@
 
 let maxthreads =
   Prefs.createInt "maxthreads" 20
-    "maximum number of simultaneous file transfers"
+    "!maximum number of simultaneous file transfers"
     ("This preference controls how much concurrency is allowed during"
      ^ " the transport phase.  Normally, it should be set reasonably high "
      ^ "(default is 20) to maximize performance, but when Unison is used "

Modified: trunk/src/ubase/prefs.ml
===================================================================
--- trunk/src/ubase/prefs.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/ubase/prefs.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -81,6 +81,7 @@
       d
   end
 
+(* For debugging *)
 let dumpPrefsToStderr() =
   Printf.eprintf "Preferences:\n";
   Safelist.iter
@@ -130,6 +131,7 @@
     (fun cell -> Uarg.String (fun s -> set cell (intern (fst !cell) s)))
 
 let createBool name default doc fulldoc =
+  let doc = if default then doc ^ " (default true)" else doc in
   createPrefInternal name default doc fulldoc
     (fun v -> [if v then "true" else "false"])
     (fun cell -> Uarg.Bool (fun b -> set cell b))
@@ -154,32 +156,52 @@
 (*****************************************************************************)
 
 let prefArg = function
-    Uarg.Bool(_)   -> "   "
-  | Uarg.Int(_)    -> "n  "
+    Uarg.Bool(_)   -> ""
+  | Uarg.Int(_)    -> "n"
   | Uarg.String(_) -> "xxx"
   | _             -> assert false
 
 let argspecs hook =
   Util.StringMap.fold
     (fun name (doc, pspec, _) l ->
-       let desc =
-         if String.length doc > 0 && doc.[0] = '*' then doc else
-         let arg = prefArg pspec in
-         let spaces =
-           String.make (max 2 (18 - String.length (name ^ arg))) ' ' in
-         arg ^ spaces ^ doc
-       in
-       ("-" ^ name, hook name pspec, desc)::l)
+       ("-" ^ name, hook name pspec, "")::l)
     !prefs []
 
-let printUsage usage = Uarg.usage (argspecs (fun _ s -> s)) usage
+let oneLineDocs u =
+  let formatOne name pspec doc p =
+    if not p then "" else
+    let doc = if doc.[0] = '!'
+                then String.sub doc 1 ((String.length doc) - 1)
+                else doc in
+    let arg = prefArg pspec in
+    let arg = if arg = "" then "" else " " ^ arg in
+    let spaces =
+      String.make (max 1 (18 - String.length (name ^ arg))) ' ' in
+    " -" ^ name ^ arg ^ spaces ^ doc ^ "\n" in
+  let formatAll p =
+    String.concat ""
+      (Safelist.rev
+         (Util.StringMap.fold 
+            (fun name (doc, pspec, _) l ->
+               (formatOne name pspec doc
+                  (String.length doc > 0 && doc.[0] <> '*' && p doc)) :: l)
+            !prefs []))
+  in
+    u ^ "\n" 
+  ^ "Basic options: \n"
+  ^ formatAll (fun doc -> doc.[0] <> '!')
+  ^ "\nAdvanced options: \n"
+  ^ formatAll (fun doc -> doc.[0] = '!')
 
+let printUsage usage = Uarg.usage (argspecs (fun _ s -> s))
+                         (oneLineDocs usage)
+
 let processCmdLine usage hook =
   Uarg.current := 0;
   let argspecs = argspecs hook in
   let defaultanonfun _ =
     print_string "Anonymous arguments not allowed\n";
-    Uarg.usage argspecs usage;
+    Uarg.usage argspecs (oneLineDocs usage);
     exit 2
   in
   let anonfun =
@@ -192,9 +214,9 @@
       Not_found -> defaultanonfun
   in 
   try
-    Uarg.parse argspecs anonfun usage
+    Uarg.parse argspecs anonfun (oneLineDocs usage)
   with IllegalValue str -> 
-    raise(Util.Fatal(Printf.sprintf "%s \n%s\n" usage str))
+    raise(Util.Fatal(Printf.sprintf "%s \n%s\n" (oneLineDocs usage) str))
 
 let parseCmdLine usage =
   processCmdLine usage (fun _ sp -> sp)
@@ -335,7 +357,7 @@
 (*****************************************************************************)
 
 let addprefsto = createString "addprefsto" ""
-  "file to add new prefs to"
+  "!file to add new prefs to"
   "By default, new preferences added by Unison (e.g., new \\verb|ignore| \
    clauses) will be appended to whatever preference file Unison was told \
    to load at the beginning of the run.  Setting the preference \

Modified: trunk/src/ubase/trace.ml
===================================================================
--- trunk/src/ubase/trace.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/ubase/trace.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -15,7 +15,7 @@
 
 let debugmods =
   Prefs.createStringList "debug"
-    "debug module xxx ('all' -> everything, 'verbose' -> more)" 
+    "!debug module xxx ('all' -> everything, 'verbose' -> more)" 
     ("This preference is used to make Unison print various sorts of "
      ^ "information about what it is doing internally on the standard "
      ^ "error stream.  It can be used many times, each time with the name "
@@ -92,14 +92,14 @@
 
 let logging =
   Prefs.createBool "log" true
-    "record actions in file specified by logfile preference"
+    "!record actions in logfile"
     "When this flag is set, Unison will log all changes to the filesystems
      on a file."
 
 let logfile =
   Prefs.createString "logfile"
     (Util.fileInHomeDir "unison.log")
-    "Log file name"
+    "!logfile name"
     "By default, logging messages will be appended to the file
      \\verb|unison.log| in your HOME directory.  Set this preference if
      you prefer another file."

Modified: trunk/src/ubase/uarg.ml
===================================================================
--- trunk/src/ubase/uarg.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/ubase/uarg.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -34,10 +34,11 @@
 
 let usage speclist errmsg =
   printf "%s\n" errmsg;
-  Safelist.iter (function (key, _, doc) ->
-               if String.length doc > 0 && doc.[0] <> '*'
-                 then printf "  %s %s\n" key doc)
-                (Safelist.rev speclist)
+  Safelist.iter
+    (function (key, _, doc) ->
+       if String.length doc > 0 && doc.[0] <> '*'
+       then printf "  %s %s\n" key doc)
+    (Safelist.rev speclist)
 ;;
 
 let current = ref 0;;

Modified: trunk/src/ubase/uarg.mli
===================================================================
--- trunk/src/ubase/uarg.mli	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/ubase/uarg.mli	2008-06-24 02:45:20 UTC (rev 290)
@@ -8,7 +8,7 @@
 (*  Automatique.  Distributed only by permission.                      *)
 (*                                                                     *)
 (***********************************************************************)
-(* Slightly modified version by BCP for Unixon, July 1999 *)
+(* Slightly modified version by BCP for Unison in 1999 and 2008 *)
 
 (* Module [Uarg]: parsing of command line arguments *)
 

Modified: trunk/src/uicommon.ml
===================================================================
--- trunk/src/uicommon.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/uicommon.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -24,7 +24,7 @@
  **********************************************************************)
 
 let auto =
-  Prefs.createBool "auto" false "automatically accept default actions"
+  Prefs.createBool "auto" false "automatically accept default (nonconflicting) actions"
     ("When set to {\\tt true}, this flag causes the user "
      ^ "interface to skip asking for confirmations on "
      ^ "non-conflicting changes.  (More precisely, when the user interface "
@@ -36,7 +36,7 @@
    gets sent to the server at startup *)
 let mainWindowHeight =
   Prefs.createInt "height" 20
-    "height (in lines) of main window in graphical interface"
+    "!height (in lines) of main window in graphical interface"
     ("Used to set the height (in lines) of the main window in the graphical "
      ^ "user interface.")
 
@@ -58,7 +58,7 @@
 
 let profileLabel =
   Prefs.createString "label" ""
-    "provide a descriptive string label for this profile"
+    "!provide a descriptive string label for this profile"
     ("Used in a profile to provide a descriptive string documenting its "
      ^ "settings.  (This is useful for users that switch between several "
      ^ "profiles, especially using the `fast switch' feature of the "
@@ -66,7 +66,7 @@
 
 let profileKey =
   Prefs.createString "key" ""
-    "define a keyboard shortcut for this profile (in some UIs)"
+    "!define a keyboard shortcut for this profile (in some UIs)"
     ("Used in a profile to define a numeric key (0-9) that can be used in "
      ^ "the graphical user interface to switch immediately to this profile.")
 (* This preference is not actually referred to in the code anywhere, since
@@ -76,7 +76,7 @@
 
 let contactquietly =
   Prefs.createBool "contactquietly" false
-    "Suppress the 'contacting server' message during startup"
+    "!suppress the 'contacting server' message during startup"
     ("If this flag is set, Unison will skip displaying the "
      ^ "`Contacting server' message (which some users find annoying) "
      ^ "during startup.")
@@ -86,7 +86,7 @@
 
 let repeat =
   Prefs.createString "repeat" ""
-    "synchronize repeatedly (text interface only)"
+    "!synchronize repeatedly (text interface only)"
     ("Setting this preference causes the text-mode interface to synchronize "
      ^ "repeatedly, rather than doing it just once and stopping.  If the "
      ^ "argument is a number, Unison will pause for that many seconds before "
@@ -108,7 +108,7 @@
 
 let retry =
   Prefs.createInt "retry" 0
-    "re-try failed synchronizations N times (text interface only)"
+    "!re-try failed synchronizations N times (text ui only)"
     ("Setting this preference causes the text-mode interface to try again "
      ^ "to synchronize "
      ^ "updated paths where synchronization fails.  Each such path will be "
@@ -117,17 +117,18 @@
 
 let confirmmerge =
   Prefs.createBool "confirmmerge" false
-    "ask for confirmation before commiting results of a merge"
+    "!ask for confirmation before commiting results of a merge"
     ("Setting this preference causes both the text and graphical interfaces"
      ^ " to ask the user if the results of a merge command may be commited "
      ^ " to the replica or not. Since the merge command works on temporary files,"
      ^ " the user can then cancel all the effects of applying the merge if it"
      ^ " turns out that the result is not satisfactory.  In "
-     ^ " batch-mode, this preference has no effect.")
+     ^ " batch-mode, this preference has no effect.  Default is false.")
     
 let runTestsPrefName = "selftest"
 let runtests =
-  Prefs.createBool runTestsPrefName false "run internal tests and exit"
+  Prefs.createBool runTestsPrefName false
+    "!run internal tests and exit"
    ("Run internal tests and exit.  This option is mostly for developers and must be used "
   ^ "carefully: in particular, "
   ^ "it will delete the contents of both roots, so that it can install its own files "
@@ -323,13 +324,13 @@
   if dangerousPaths = [Path.empty] then
     "The root of one of the replicas has been completely emptied.\n\
      Unison may delete everything in the other replica.  (Set the \n\
-     'confirmbigdelete' preference to false to disable this check.)"
+     'confirmbigdel' preference to false to disable this check.)"
   else
     Printf.sprintf
       "The following paths have been completely emptied in one replica:\n  \
        %s\n\
        Unison may delete everything below these paths in the other replica.\n
-       (Set the 'confirmbigdelete' preference to false to disable this check.)"
+       (Set the 'confirmbigdel' preference to false to disable this check.)"
       (String.concat "\n  "
          (Safelist.map (fun p -> "'" ^ (Path.toString p) ^ "'")
             dangerousPaths))
@@ -401,7 +402,7 @@
    ^ " -doc tutorial\".\n"
    ^ "For other documentation, type \"" ^ Uutil.myName ^ " -doc topics\".\n"
 
-let usageMsg = coreUsageMsg ^ "\nOptions: "
+let usageMsg = coreUsageMsg 
 
 let debug = Trace.debug "startup"
 

Modified: trunk/src/uitext.ml
===================================================================
--- trunk/src/uitext.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/uitext.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -16,7 +16,7 @@
            Not_found -> false)
       | _ ->
           true)
-    "do not try to change terminal settings in text UI"
+    "!do not change terminal settings in text UI"
     ("When set to \\verb|true|, this flag makes the text mode user "
      ^ "interface avoid trying to change any of the terminal settings.  "
      ^ "(Normally, Unison puts the terminal in `raw mode', so that it can "
@@ -31,7 +31,7 @@
      ^ "interface.")
     
 let silent =
-  Prefs.createBool "silent" false "print nothing (except error messages)"
+  Prefs.createBool "silent" false "print nothing except error messages"
     ("When this preference is set to {\\tt true}, the textual user "
      ^ "interface will print nothing at all, except in the case of errors.  "
      ^ "Setting \\texttt{silent} to true automatically sets the "

Modified: trunk/src/update.ml
===================================================================
--- trunk/src/update.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/update.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -86,7 +86,7 @@
 
 let rootAliases : string list Prefs.t =
   Prefs.createStringList "rootalias"
-   "Register alias for canonical root names"
+   "!register alias for canonical root names"
    ("When calculating the name of the archive files for a given pair of roots,"
    ^ " Unison replaces any roots matching the left-hand side of any rootalias"
    ^ " rule by the corresponding right-hand side.")
@@ -144,7 +144,7 @@
 
 let showArchiveName =
   Prefs.createBool "showarchive" false
-    "show name of archive and 'true names' (for rootalias) of roots"
+    "!show 'true names' (for rootalias) of roots and archive"
     ("When this preference is set, Unison will print out the 'true names'"
      ^ "of the roots, in the same form as is expected by the {\\tt rootalias}"
      ^ "preference.")
@@ -643,7 +643,7 @@
 
 let ignorelocks =
   Prefs.createBool "ignorelocks" false
-    "ignore locks left over from previous run (dangerous!)"
+    "!ignore locks left over from previous run (dangerous!)"
     ("When this preference is set, Unison will ignore any lock files "
      ^ "that may have been left over from a previous run of Unison that "
      ^ "was interrupted while reading or writing archive files; by default, "
@@ -915,7 +915,7 @@
 
 let mountpoints = 
   Prefs.createStringList "mountpoint"
-    "abort if this path does not exist"
+    "!abort if this path does not exist"
     ("Including the preference \\texttt{-mountpoint PATH} causes Unison to "
      ^ "double-check, at the end of update detection, that \\texttt{PATH} exists "
      ^ "and abort if it does not.  This is useful when Unison is used to synchronize "
@@ -942,7 +942,7 @@
 
 let fastcheck =
   Prefs.createString "fastcheck" "default"
-    "do fast update detection (`true', `false', or `default')"
+    "!do fast update detection (true/false/default)"
     ( "When this preference is set to \\verb|true|, \
        Unison will use the modification time and length of a file as a
        `pseudo inode number' \
@@ -971,7 +971,7 @@
    || (Prefs.read fastcheck = "default" && Util.osType = `Unix)
    || (Prefs.read fastcheck = "auto" && Util.osType = `Unix)
 
-let immutable = Pred.create "immutable"
+let immutable = Pred.create "immutable" ~advanced:true
    ("This preference specifies paths for directories whose \
      immediate children are all immutable files --- i.e., once a file has been \
      created, its contents never changes.  When scanning for updates, \
@@ -979,7 +979,7 @@
      this can speed update detection significantly (in particular, for mail \
      directories).")
 
-let immutablenot = Pred.create "immutablenot"
+let immutablenot = Pred.create "immutablenot" ~advanced:true
    ("This preference overrides {\\tt immutable}.")
 
 let bigFileLength = 10 * 1024

Modified: trunk/src/xferhint.ml
===================================================================
--- trunk/src/xferhint.ml	2008-06-23 22:05:17 UTC (rev 289)
+++ trunk/src/xferhint.ml	2008-06-24 02:45:20 UTC (rev 290)
@@ -5,7 +5,7 @@
 
 let xferbycopying =
   Prefs.createBool "xferbycopying" true
-    "optimize transfers using local copies, if possible"
+    "!optimize transfers using local copies"
     ("When this preference is set, Unison will try to avoid transferring "
    ^ "file contents across the network by recognizing when a file with the "
    ^ "required contents already exists in the target replica.  This usually "



More information about the Unison-hackers mailing list