]> matita.cs.unibo.it Git - helm.git/blobdiff - matitaB/matita/matitaFilesystem.ml
Matitaweb: several improvements to svn interface.
[helm.git] / matitaB / matita / matitaFilesystem.ml
index 637a997dcd09612e4fa73f9ac638c08456ddcad1..13c40664b0499d65b71598cb74b90b6282f126dc 100644 (file)
@@ -103,6 +103,9 @@ let stat_classify line =
     | _ -> raise (SvnAnomaly line)
   in aux 0 []
 
+let count p l = 
+  List.length (List.filter p l)
+
 let stat_user user =
   let rt_dir = Helm_registry.get "matita.rt_base_dir" in
   let repo = Helm_registry.get "matita.weblib" in
@@ -155,7 +158,7 @@ let checkout user =
   let repo = Helm_registry.get "matita.weblib" in
 
   let errno, outlines, errlines = exec_process 
-    ("svn co " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/")
+    ("svn co --non-interactive " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/")
   in
   let files, anomalies = 
     List.fold_left (fun (facc,eacc) line ->
@@ -267,17 +270,27 @@ let update_user user =
   let repo = Helm_registry.get "matita.weblib" in
 
   let errno, outlines, errlines = exec_process 
-    ("svn up " ^ rt_dir ^ "/users/" ^ user ^ "/ --non-interactive")
+   ("svn up --non-interactive " ^ rt_dir ^ "/users/" ^ user ^ "/")
   in
   let files, anomalies = 
     List.fold_left (fun (facc,eacc) line ->
       try
         (let fname,flags = up_classify line user in
-         (fname,matita_flag_of_update flags)::facc), eacc
+         (fname, flags)::facc), eacc
       with
       | SvnAnomaly l -> facc, l::eacc) ([],[]) outlines
   in
-  if errno = 0 then files, anomalies
+  let added = count (fun (_,flags) -> List.mem Add flags) files in
+  let conflict = count (fun (_,flags) -> List.mem Conflict flags) files in
+  let del = count (fun (_,flags) -> List.mem Delete flags) files in
+  let upd = count (fun (_,flags) -> List.mem Update flags) files in
+  let merged = count (fun (_,flags) -> List.mem Merge flags) files in
+
+  let files = 
+    List.map (fun (fname,flags) -> fname,matita_flag_of_update flags) files
+  in
+
+  if errno = 0 then files, anomalies, (added,conflict,del,upd,merged)
   else raise (SvnError (string_of_output outlines errlines))
 ;;
 
@@ -289,22 +302,23 @@ let commit user =
   let repo = Helm_registry.get "matita.weblib" in
 
   let errno, outlines, errlines = exec_process 
-    ("svn ci --message \"commit by user " ^ user ^ "\" " ^ rt_dir ^ "/users/" ^ user ^ "/")
+    ("svn ci --non-interactive --message \"commit by user " ^ user ^ "\" " ^ rt_dir ^ "/users/" ^ user ^ "/")
   in
-  if errno = 0 then ()
+  if errno = 0 then 
+    "BEGIN COMMIT - " ^ user ^ ":\n" ^ (string_of_output outlines errlines) ^ "END COMMIT - " ^ user ^ "\n\n"
   else raise (SvnError (string_of_output outlines errlines))
 ;;
 
 let do_global_commit () =
   prerr_endline ("to be committed: " ^ String.concat " " !to_be_committed);
   List.fold_left
-    (fun acc u ->
+    (fun (acc,out) u ->
        try
-         commit u;
-         acc
+         let newout = commit u in
+         acc, out ^ newout
        with
        | SvnError outstr -> 
-           prerr_endline outstr;
-           u::acc)
-  [] (List.rev !to_be_committed)
+           prerr_endline ("COMMIT OF " ^ user ^ "FAILED:" ^ outstr);
+           u::acc,out)
+  ([],"") (List.rev !to_be_committed)
 ;;