[Unison-hackers] text ui: nothing is logged when there is nothing to propagate

Alan Schmitt alan.schmitt at polytechnique.org
Sun Mar 10 11:22:28 EDT 2013


Benjamin C. Pierce writes:

> Yes, please go ahead with all of them. My only tiny comment is that
> the new preference should be marked "advanced" (by putting a * at the
> beginning of its long description, IIRC).

OK, I made that change (it's a '!' at the beginning of the short
description, by the way).

I also modified the way I display the reasons for errors or skips: it's
inside the log if items are transferred, and in any case it's in the
summary at the end. This makes it easier to grep.

This is for instance what I get in the log after a small test:

If nothing was transferred:

Synchronization complete at 15:59:42  (0 item transferred, 2 skipped, 0 failed)
  skipped: fable.pdf (would transfer a file of size greater than maxsizethreshold)
  skipped: fine-esop.pdf (skip requested)


If something was transferred:

UNISON 2.46.13 started propagating changes at 16:09:09.24 on 10 Mar 2013
[CONFLICT] Skipping fable.pdf
  would transfer a file of size greater than maxsizethreshold
[BGN] Deleting fine-esop.pdf from /Users/schmitta/tmp/unison_test/a
[END] Deleting fine-esop.pdf
UNISON 2.46.13 finished propagating changes at 16:09:09.25 on 10 Mar 2013


Synchronization complete at 16:09:09  (1 item transferred, 1 skipped, 0 failed)
  skipped: fable.pdf (would transfer a file of size greater than maxsizethreshold)


We could also add this information for failed paths, by changing the
'doTransport' function. This way one would know in the summary why there
was a problem, instead of having to go hunt into the log. Let me know if
you want me to add this.


Here is the modified uitext patch.

diff --git a/src/uitext.ml b/src/uitext.ml
index 5fca0d9..364cb07 100644
--- a/src/uitext.ml
+++ b/src/uitext.ml
@@ -578,9 +578,12 @@ let rec interactAndPropagateChanges reconItemList
     if skipped>0 then
       Safelist.iter
         (fun ri ->
-        if problematic ri then
-          alwaysDisplayAndLog
-            ("  skipped: " ^ (Path.toString ri.path1)))
+         match ri.replicas with
+           Problem r
+         | Different {rc1 = _; rc2 = _; direction = Conflict r; default_direction = _} ->
+            alwaysDisplayAndLog (Printf.sprintf "  skipped: %s (%s)"
+                                                (Path.toString ri.path1) r)
+         | _ -> ())
         newReconItemList;
     if partials>0 then
       Safelist.iter
@@ -604,6 +607,25 @@ let rec interactAndPropagateChanges reconItemList
     if !Update.foundArchives && Prefs.read Uicommon.repeat = "" then
       Update.commitUpdates ();
     display "No updates to propagate\n";
+    if skipped > 0 then begin
+      let summary =
+        Printf.sprintf
+          "Synchronization complete at %s  (0 item transferred, %d skipped, 0 failed)"
+          (let tm = Util.localtime (Util.time()) in
+           Printf.sprintf "%02d:%02d:%02d"
+                          tm.Unix.tm_hour tm.Unix.tm_min tm.Unix.tm_sec)
+          skipped in
+      Trace.log (summary ^ "\n");
+      Safelist.iter
+        (fun ri ->
+         match ri.replicas with
+           Problem r
+         | Different {rc1 = _; rc2 = _; direction = Conflict r; default_direction = _} ->
+            alwaysDisplayAndLog (Printf.sprintf "  skipped: %s (%s)"
+                                                (Path.toString ri.path1) r)
+         | _ -> ())
+        newReconItemList
+      end;
     (skipped > 0, false, false, [])
   end else if proceed=ProceedImmediately then begin
     doit()


Alan


More information about the Unison-hackers mailing list