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

bcpierce at seas.upenn.edu bcpierce at seas.upenn.edu
Tue Oct 21 10:06:20 EDT 2014


Author: bcpierce
Date: 2014-10-21 10:06:20 -0400 (Tue, 21 Oct 2014)
New Revision: 531

Removed:
   trunk/src/ubase/uprintf.ml
   trunk/src/ubase/uprintf.mli
Modified:
   trunk/doc/changes.tex
   trunk/src/NEWS
   trunk/src/RECENTNEWS
   trunk/src/mkProjectInfo.ml
   trunk/src/osx.ml
   trunk/src/strings.ml
Log:
* Preparing for new beta release


Modified: trunk/doc/changes.tex
===================================================================
--- trunk/doc/changes.tex	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/doc/changes.tex	2014-10-21 14:06:20 UTC (rev 531)
@@ -1,3 +1,62 @@
+\begin{changesfromversion}{2.45}
+\item Incorporated a patch from Christopher Zimmermann to replace the
+  Uprintf module (which doesn't work with OCaml 4.02, causing Unison to crash) with equivalent
+  functionality from the standard library.
+\item Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
+\item Added a {\tt maxsizethreshold} option, which prevents the transfer of
+  files larger than the size specified (in Kb).
+\item Added a "copyonconflict" preference, to make a copy of files that would
+  otherwise be overwritten or deleted in case of conflicting changes.
+  (This makes it possible to automatically resolve conflicts in a
+   fairly safe way when synchronizing continuously, in combination
+   with the "{\tt repeat = watch}" and "{\tt prefer = newer}" preferences.
+%%%%%
+\item  File system monitoring: 
+\begin{itemize}
+\item 
+The file watcher now fails when unable to
+  watch a directory, rather than silently ignoring the issue.
+\item File system monitoring: more robust communication with the helper program
+  (in socket mode, the unison server will still work properly despite
+  unexpected unison client disconnections).
+\item A bytecode version of unison-fsmonitor is now produced by "make NATIVE=false"
+\item Improved search for unison-fsmonitor 
+\item Detect when the helper process exits.
+\item More robust file watching helper programs for Windows and Linux.
+  They communicate with Unison through pipes (Unison redirects stdin
+  and stdout), using a race-free protocol.
+\item Retries paths with failures using an exponential backoff algorithm.
+\item  The information returned by the file watchers are used
+    independently for each replica; thus, when only one replica has
+    changes, Unison will only rescan this replica.
+\item When available, used by the graphical UIs to speed up rescanning
+    (can be disabled by setting the new {\tt watch} preference to 
+\item Small fix to the way fsmonitor.py gets invoked when using the file
+  watching functionality, suggested by Josh Berdine.  Unison will now
+  look for {\tt fsmonitor.py} in the same directory where the Unison
+  executable itself lives.
+\end{itemize}
+%%%%%
+\item Minor:
+\begin{itemize}
+\item Fixed a bug in export procedure that was messing up documentation
+strings.
+\item Incorporated a patch from Ir\'anyossy Knoblauch Art\'ur to make temp file
+  names fit within 143 characters (to make eCryptFS happy).
+\item Added a string to the Conflict direction to document the reason of
+  the conflict. 
+\item Log conflicts and problems in the text UI even if nothing is propagated.
+\item Use hash function from OCaml 3.x for comparing archives, even when
+  compiled with OCaml 4.x.
+\item Do not restart Unison in case of uncaught exception when the repeat
+  preference is set.  This seems safer.  And it does not work, for
+  instance, in case of lost connection.
+\item Fix Unix.readlink invalid argument error under Windows
+\item Fix a crash when the output of the {\tt diff} program is too large.
+\item Fixed Makefile for cross-compiling towards Windows (updated to MinGW-w64)
+\end{itemize}
+\end{changesfromversion}
+
 \begin{changesfromversion}{2.40.63}
 \item New preference {\tt fastercheckUNSAFE}, which can be used (with care!)
 to achieve {\em much} faster update detection when all the common files in

Modified: trunk/src/NEWS
===================================================================
--- trunk/src/NEWS	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/NEWS	2014-10-21 14:06:20 UTC (rev 531)
@@ -1,6 +1,65 @@
 
-Changes in Version 2.47.1
+Changes in Version 2.47.4
 
+   Changes since 2.45:
+     * Incorporated a patch from Christopher Zimmermann to replace the
+       Uprintf module (which doesn't work with OCaml 4.02, causing Unison
+       to crash) with equivalent functionality from the standard library.
+     * Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
+     * Added a maxsizethreshold option, which prevents the transfer of
+       files larger than the size specified (in Kb).
+     * Added a "copyonconflict" preference, to make a copy of files that
+       would otherwise be overwritten or deleted in case of conflicting
+       changes. (This makes it possible to automatically resolve conflicts
+       in a fairly safe way when synchronizing continuously, in
+       combination with the "repeat = watch" and "prefer = newer"
+       preferences.
+     * File system monitoring:
+          + The file watcher now fails when unable to watch a directory,
+            rather than silently ignoring the issue.
+          + File system monitoring: more robust communication with the
+            helper program (in socket mode, the unison server will still
+            work properly despite unexpected unison client
+            disconnections).
+          + A bytecode version of unison-fsmonitor is now produced by
+            "make NATIVE=false"
+          + Improved search for unison-fsmonitor
+          + Detect when the helper process exits.
+          + More robust file watching helper programs for Windows and
+            Linux. They communicate with Unison through pipes (Unison
+            redirects stdin and stdout), using a race-free protocol.
+          + Retries paths with failures using an exponential backoff
+            algorithm.
+          + The information returned by the file watchers are used
+            independently for each replica; thus, when only one replica
+            has changes, Unison will only rescan this replica.
+          + When available, used by the graphical UIs to speed up
+            rescanning (can be disabled by setting the new watch
+            preference to
+          + Small fix to the way fsmonitor.py gets invoked when using the
+            file watching functionality, suggested by Josh Berdine. Unison
+            will now look for fsmonitor.py in the same directory where the
+            Unison executable itself lives.
+     * Minor:
+          + Fixed a bug in export procedure that was messing up
+            documentation strings.
+          + Incorporated a patch from Irányossy Knoblauch Artúr to make
+            temp file names fit within 143 characters (to make eCryptFS
+            happy).
+          + Added a string to the Conflict direction to document the
+            reason of the conflict.
+          + Log conflicts and problems in the text UI even if nothing is
+            propagated.
+          + Use hash function from OCaml 3.x for comparing archives, even
+            when compiled with OCaml 4.x.
+          + Do not restart Unison in case of uncaught exception when the
+            repeat preference is set. This seems safer. And it does not
+            work, for instance, in case of lost connection.
+          + Fix Unix.readlink invalid argument error under Windows
+          + Fix a crash when the output of the diff program is too large.
+          + Fixed Makefile for cross-compiling towards Windows (updated to
+            MinGW-w64)
+
    Changes since 2.40.63:
      * New preference fastercheckUNSAFE, which can be used (with care!) to
        achieve much faster update detection when all the common files in

Modified: trunk/src/RECENTNEWS
===================================================================
--- trunk/src/RECENTNEWS	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/RECENTNEWS	2014-10-21 14:06:20 UTC (rev 531)
@@ -1,187 +1,5 @@
-CHANGES FROM VERSION 2.47.2
+CHANGES FROM VERSION 2.47.4
 
-* Incorporate a small patch from Christopher Zimmermann to replace the
-  Uprintf module (which doesn't work with OCaml 4.02) with equivalent
-  functionality from the standard library.
+* Preparing for new beta release
 
-
 -------------------------------
-CHANGES FROM VERSION 2.47.1
-
-* Fixed a bug in export procedure that was messing up documentation strings
-
-
--------------------------------
-CHANGES FROM VERSION 2.47.0
-
-* Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
-
-* Update dates in copyright notices
-
-* Tidying for beta-release
-
--------------------------------
-CHANGES FROM VERSION 2.46.20
-
-* Incorporated patch from Irányossy Knoblauch Artúr to make temp file
-  names fit within 143 characters (to make eCryptFS happy).
-
-
--------------------------------
-CHANGES FROM VERSION 2.46.18
-
-* Incorporated patch from Irányossy Knoblauch Artúr to make temp file
-  names fit within 143 characters (to make eCryptFS happy).
-
-* Adapting the GTK UI to the new Conflict type. For the moment, the
-  string carried is not used.
-
--------------------------------
-CHANGES FROM VERSION 2.46.13
-
-* Log conflicts and problems in the text UI even if nothing is propagated.
-* Added a string to the Conflict direction to document the reason of
-  the conflict. The text UI has been adapted to this change, the other
-  UIs need to be modified.
-* Adding the maxsizethreshold option which prevents the transfer of
-  files larger than the size specified (in Kb)
-
--------------------------------
-CHANGES FROM VERSION 2.46.12
-
-* File system monitoring: the file watcher now fails when unable to
-  watch a directory, rather than silently ignoring the issue
-
--------------------------------
-CHANGES FROM VERSION 2.46.10
-
-* File system monitoring: more robust communication with the helper program
-  (in socket mode, the unison server will still work properly despite
-  unexpected unison client disconnections)
-
--------------------------------
-CHANGES FROM VERSION 2.46.9
-
-* Use hash function from OCaml 3.x for comparing archives, even when
-  compiled with OCaml 4.x
-
--------------------------------
-CHANGES FROM VERSION 2.46.8
-
-* Filesystem monitoring: do not use filters on maps, for compatibility
-  with OCaml 3.11
-
--------------------------------
-CHANGES FROM VERSION 2.46.6
-
-* A bytecode version of unison-fsmonitor is now produced by "make NATIVE=false"
-
--------------------------------
->>>>>>> .r525
-CHANGES FROM VERSION 2.46.4
-
-* Windows/lwt: correctly deals with Sys.Break exceptions when sleeping
-* File system monitoring: improved search for unison-fsmonitor 
-* File system monitoring: detect when the helper process exits
-* Do not restart Unison in case of uncaught exception when the repeat
-  preference is set.  This seems safer.  And it does not work, for
-  instance, in case of lost connection.
-
--------------------------------
-CHANGES FROM VERSION 2.46.3
-
-* Add a note to the 'new archives not identical' error message
-  explaining that this can happen because Unison binaries compiled
-  with OCaml 3 and OCaml 4 are incompatible.
-
-
--------------------------------
-CHANGES FROM VERSION 2.46.2
-
-* Fix Unix.readlink invalid argument error under Windows
-
--------------------------------
-CHANGES FROM VERSION 2.46.1
-
-* More robust file watching helper programs for Windows and Linux.
-  They communicate with Unison through pipes (Unison redirects stdin
-  and stdout), using a race-free protocol.
-
--------------------------------
-CHANGES FROM VERSION 2.46.0
-
-* Added a "copyonconflict" preference, to make a copy of files that would
-  otherwise be overwritten or deleted in case of conflicting changes.
-  (This makes it possible to automatically resolve conflicts in a
-   fairly safe way when synchronizing continuously, in combination
-   with the "repeat = watch" and "prefer = newer" preferences.
-
--------------------------------
-CHANGES FROM VERSION 2.46.-1
-
-* Bumped version number: incompatible protocol changes
-* Improvements to the file watching functionality:
-  - retries paths with failures using an exponential backoff algorithm
-  - the information returned by the file watchers are used
-    independently for each replica; thus, when only one replica has
-    changes, Unison will only rescan this replica
-  - when available, used by the graphical UIs to speed up rescanning
-    (can be disabled by setting the new 'watch' preference to false)
-
--------------------------------
-CHANGES FROM VERSION 2.45.15
-
-* transfer.ml: updated debugging code; in particular, turns an
-  assertion failure into a more friendly transient failure
-
--------------------------------
-CHANGES FROM VERSION 2.45.14
-
-* Function External.readChannelTillEof now tail recursive
-  (prevents a crash when the output of the diff program is too large)
-
--------------------------------
-CHANGES FROM VERSION 2.45.13
-
-* Fixed Makefile for cross-compiling towards Windows (updated to MinGW-w64)
-
--------------------------------
-CHANGES FROM VERSION 2.45.12
-
-* fsmonitor.py: fixed busy wait under Windows
-* fsmonitor.py: make sure this helper program exits when Unison terminates
-  (now, fsmonitor.py exits when stdin is closed, and Unison redirects stdin)
-
--------------------------------
-CHANGES FROM VERSION 2.45.11
-
-* Fix bug in Lwt_unix.sleep
-
--------------------------------
-CHANGES FROM VERSION 2.45.9
-
-* Added some more debugging code in transfer.ml
--------------------------------
-CHANGES FROM VERSION 2.45.7
-
-* Small fix to the way fsmonitor.py gets invoked when using the file
-  watching functionality, suggested by Josh Berdine.  Unison will now
-  look for fsmonitor.py in the same directory where the Unison
-  executable itself lives.
--------------------------------
-CHANGES FROM VERSION 2.45.7
-
-* Small fix to the way fsmonitor.py gets invoked when using the file
-  watching functionality, suggested by Josh Berdine.  Unison will now
-  look for fsmonitor.py in the same directory where the Unison
-  executable itself lives.
-
-* Fix bug in last commit
-
-* Added some debugging code in transfer.ml
-
-* Display full stack backtraces when printing exceptions, per comment
-  from Jerome
-
-- fixed a bug in the lookup of the host name on the server
-

Modified: trunk/src/mkProjectInfo.ml
===================================================================
--- trunk/src/mkProjectInfo.ml	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/mkProjectInfo.ml	2014-10-21 14:06:20 UTC (rev 531)
@@ -95,3 +95,4 @@
 
 
 
+

Modified: trunk/src/osx.ml
===================================================================
--- trunk/src/osx.ml	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/osx.ml	2014-10-21 14:06:20 UTC (rev 531)
@@ -206,7 +206,8 @@
   | `DIRECTORY -> { ressInfo = NoRess; finfo = "D" }
   |  _         -> { ressInfo = NoRess; finfo = "" }
 
-let noTypeCreator = String.make 10 '\000'
+(* BCP: dead code
+   let noTypeCreator = String.make 10 '\000' *)
 
 (* Remove trailing zeroes *)
 let trim s =

Modified: trunk/src/strings.ml
===================================================================
--- trunk/src/strings.ml	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/strings.ml	2014-10-21 14:06:20 UTC (rev 531)
@@ -4,7 +4,7 @@
 let docs =
     ("about", ("About Unison", 
      "Unison File Synchronizer\n\
-      Version 2.47.1\n\
+      Version 2.47.4\n\
       \n\
       "))
 ::
@@ -2768,9 +2768,68 @@
       \n\
       "))
 ::
-    ("news", ("Changes in Version 2.47.1", 
-     "Changes in Version 2.47.1\n\
+    ("news", ("Changes in Version 2.47.4", 
+     "Changes in Version 2.47.4\n\
       \n\
+      \032  Changes since 2.45:\n\
+      \032    * Incorporated a patch from Christopher Zimmermann to replace the\n\
+      \032      Uprintf module (which doesn't work with OCaml 4.02, causing Unison\n\
+      \032      to crash) with equivalent functionality from the standard library.\n\
+      \032    * Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.\n\
+      \032    * Added a maxsizethreshold option, which prevents the transfer of\n\
+      \032      files larger than the size specified (in Kb).\n\
+      \032    * Added a \"copyonconflict\" preference, to make a copy of files that\n\
+      \032      would otherwise be overwritten or deleted in case of conflicting\n\
+      \032      changes. (This makes it possible to automatically resolve conflicts\n\
+      \032      in a fairly safe way when synchronizing continuously, in\n\
+      \032      combination with the \"repeat = watch\" and \"prefer = newer\"\n\
+      \032      preferences.\n\
+      \032    * File system monitoring:\n\
+      \032         + The file watcher now fails when unable to watch a directory,\n\
+      \032           rather than silently ignoring the issue.\n\
+      \032         + File system monitoring: more robust communication with the\n\
+      \032           helper program (in socket mode, the unison server will still\n\
+      \032           work properly despite unexpected unison client\n\
+      \032           disconnections).\n\
+      \032         + A bytecode version of unison-fsmonitor is now produced by\n\
+      \032           \"make NATIVE=false\"\n\
+      \032         + Improved search for unison-fsmonitor\n\
+      \032         + Detect when the helper process exits.\n\
+      \032         + More robust file watching helper programs for Windows and\n\
+      \032           Linux. They communicate with Unison through pipes (Unison\n\
+      \032           redirects stdin and stdout), using a race-free protocol.\n\
+      \032         + Retries paths with failures using an exponential backoff\n\
+      \032           algorithm.\n\
+      \032         + The information returned by the file watchers are used\n\
+      \032           independently for each replica; thus, when only one replica\n\
+      \032           has changes, Unison will only rescan this replica.\n\
+      \032         + When available, used by the graphical UIs to speed up\n\
+      \032           rescanning (can be disabled by setting the new watch\n\
+      \032           preference to\n\
+      \032         + Small fix to the way fsmonitor.py gets invoked when using the\n\
+      \032           file watching functionality, suggested by Josh Berdine. Unison\n\
+      \032           will now look for fsmonitor.py in the same directory where the\n\
+      \032           Unison executable itself lives.\n\
+      \032    * Minor:\n\
+      \032         + Fixed a bug in export procedure that was messing up\n\
+      \032           documentation strings.\n\
+      \032         + Incorporated a patch from Ir\225nyossy Knoblauch Art\250r to make\n\
+      \032           temp file names fit within 143 characters (to make eCryptFS\n\
+      \032           happy).\n\
+      \032         + Added a string to the Conflict direction to document the\n\
+      \032           reason of the conflict.\n\
+      \032         + Log conflicts and problems in the text UI even if nothing is\n\
+      \032           propagated.\n\
+      \032         + Use hash function from OCaml 3.x for comparing archives, even\n\
+      \032           when compiled with OCaml 4.x.\n\
+      \032         + Do not restart Unison in case of uncaught exception when the\n\
+      \032           repeat preference is set. This seems safer. And it does not\n\
+      \032           work, for instance, in case of lost connection.\n\
+      \032         + Fix Unix.readlink invalid argument error under Windows\n\
+      \032         + Fix a crash when the output of the diff program is too large.\n\
+      \032         + Fixed Makefile for cross-compiling towards Windows (updated to\n\
+      \032           MinGW-w64)\n\
+      \n\
       \032  Changes since 2.40.63:\n\
       \032    * New preference fastercheckUNSAFE, which can be used (with care!) to\n\
       \032      achieve much faster update detection when all the common files in\n\

Deleted: trunk/src/ubase/uprintf.ml
===================================================================
--- trunk/src/ubase/uprintf.ml	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/ubase/uprintf.ml	2014-10-21 14:06:20 UTC (rev 531)
@@ -1,94 +0,0 @@
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License.         *)
-(*                                                                     *)
-(***********************************************************************)
-
-external caml_format_int: string -> int -> string = "caml_format_int"
-external caml_format_float: string -> float -> string = "caml_format_float"
-
-let fprintf outchan doafter format =
-  let format = (Obj.magic format : string) in
-  let rec doprn i =
-    if i >= String.length format then
-      (doafter(); Obj.magic ())
-    else begin
-      let c = String.unsafe_get format i in
-      if c <> '%' then begin
-        output_char outchan c;
-        doprn (succ i)
-      end else begin
-        let j = skip_args (succ i) in
-        match String.unsafe_get format j with
-          '%' ->
-            output_char outchan '%';
-            doprn (succ j)
-        | 's' ->
-            Obj.magic(fun s ->
-              if j <= i+1 then
-                output_string outchan s
-              else begin
-                let p =
-                  try
-                    int_of_string (String.sub format (i+1) (j-i-1))
-                  with Failure _ ->
-                    invalid_arg "fprintf: bad %s format" in
-                if p > 0 && String.length s < p then begin
-                  output_string outchan
-                                (String.make (p - String.length s) ' ');
-                  output_string outchan s
-                end else if p < 0 && String.length s < -p then begin
-                  output_string outchan s;
-                  output_string outchan
-                                (String.make (-p - String.length s) ' ')
-                end else
-                  output_string outchan s
-              end;
-              doprn (succ j))
-        | 'c' ->
-            Obj.magic(fun c ->
-              output_char outchan c;
-              doprn (succ j))
-        | 'd' | 'i' | 'o' | 'x' | 'X' | 'u' ->
-            Obj.magic(fun n ->
-              output_string outchan
-                            (caml_format_int (String.sub format i (j-i+1)) n);
-              doprn (succ j))
-        | 'f' | 'e' | 'E' | 'g' | 'G' ->
-            Obj.magic(fun f ->
-              output_string outchan
-                            (caml_format_float (String.sub format i (j-i+1)) f);
-              doprn (succ j))
-        | 'b' ->
-            Obj.magic(fun b ->
-              output_string outchan (string_of_bool b);
-              doprn (succ j))
-        | 'a' ->
-            Obj.magic(fun printer arg ->
-              printer outchan arg;
-              doprn(succ j))
-        | 't' ->
-            Obj.magic(fun printer ->
-              printer outchan;
-              doprn(succ j))
-        | c ->
-            invalid_arg ("fprintf: unknown format")
-      end
-    end
-
-  and skip_args j =
-    match String.unsafe_get format j with
-      '0' .. '9' | ' ' | '.' | '-' -> skip_args (succ j)
-    | c -> j
-
-  in doprn 0
-
-let printf doafter fmt = fprintf stdout doafter fmt
-and eprintf doafter fmt = fprintf stderr doafter fmt
-

Deleted: trunk/src/ubase/uprintf.mli
===================================================================
--- trunk/src/ubase/uprintf.mli	2014-09-28 16:48:05 UTC (rev 530)
+++ trunk/src/ubase/uprintf.mli	2014-10-21 14:06:20 UTC (rev 531)
@@ -1,75 +0,0 @@
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License.         *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* Modified for Unison *)
-
-
-(* Module [Printf]: formatting printing functions *)
-
-val fprintf: out_channel -> (unit->unit) -> ('a, out_channel, unit) format -> 'a
-        (* [fprintf outchan doafter format arg1 ... argN] formats the arguments
-           [arg1] to [argN] according to the format string [format],
-           outputs the resulting string on the channel [outchan], and then
-           executes the thunk [doafter].
-
-           The format is a character string which contains two types of
-           objects:  plain  characters, which are simply copied to the
-           output channel, and conversion specifications, each of which
-           causes  conversion and printing of one argument.
-
-           Conversion specifications consist in the [%] character, followed
-           by optional flags and field widths, followed by one conversion
-           character. The conversion characters and their meanings are:
--          [d] or [i]: convert an integer argument to signed decimal
--          [u]: convert an integer argument to unsigned decimal
--          [x]: convert an integer argument to unsigned hexadecimal,
-                using lowercase letters.
--          [X]: convert an integer argument to unsigned hexadecimal,
-                using uppercase letters.
--          [o]: convert an integer argument to unsigned octal.
--          [s]: insert a string argument
--          [c]: insert a character argument
--          [f]: convert a floating-point argument to decimal notation,
-                in the style [dddd.ddd]
--          [e] or [E]: convert a floating-point argument to decimal notation,
-                in the style [d.ddd e+-dd] (mantissa and exponent)
--          [g] or [G]: convert a floating-point argument to decimal notation,
-                in style [f] or [e], [E] (whichever is more compact)
--          [b]: convert a boolean argument to the string [true] or [false]
--          [a]: user-defined printer. Takes two arguments and apply the first
-                one to [outchan] (the current output channel) and to the second
-                argument. The first argument must therefore have type
-                [out_channel -> 'b -> unit] and the second ['b].
-                The output produced by the function is therefore inserted
-                in the output of [fprintf] at the current point.
--          [t]: same as [%a], but takes only one argument (with type
-                [out_channel -> unit]) and apply it to [outchan].
--          [%]: take no argument and output one [%] character.
--          Refer to the C library [printf] function for the meaning of
-           flags and field width specifiers.
-
-           Warning: if too few arguments are provided,
-           for instance because the [printf] function is partially
-           applied, the format is immediately printed up to
-           the conversion of the first missing argument; printing
-           will then resume when the missing arguments are provided.
-           For example, [List.iter (printf "x=%d y=%d " 1) [2;3]]
-           prints [x=1 y=2 3] instead of the expected
-           [x=1 y=2 x=1 y=3].  To get the expected behavior, do
-           [List.iter (fun y -> printf "x=%d y=%d " 1 y) [2;3]]. *)
-
-val printf: (unit->unit) -> ('a, out_channel, unit) format -> 'a
-        (* Same as [fprintf], but output on [stdout]. *)
-
-val eprintf: (unit->unit) -> ('a, out_channel, unit) format -> 'a
-        (* Same as [fprintf], but output on [stderr]. *)
-



More information about the Unison-hackers mailing list