[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