X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matitaB%2Fmatita%2FmatitaFilesystem.ml;h=8f969750ba78c34dfe59bddd4673b5da909bcb07;hb=74c6905907b0bca229366d52450e2a6982b5b8be;hp=7ad9287df9751958cead6e475ccb7df714c3851f;hpb=6b526c6aededda450597abe1c65fb249ba6801aa;p=helm.git diff --git a/matitaB/matita/matitaFilesystem.ml b/matitaB/matita/matitaFilesystem.ml index 7ad9287df..8f969750b 100644 --- a/matitaB/matita/matitaFilesystem.ml +++ b/matitaB/matita/matitaFilesystem.ml @@ -25,6 +25,9 @@ exception SvnError of string;; +(* disable for debugging *) +let prerr_endline _ = () + let exec_process cmd = let (stdout, stdin, stderr) as chs = Unix.open_process_full cmd [||] in let outlines = ref [] in @@ -174,7 +177,10 @@ let checkout user = let rt_dir = Helm_registry.get "matita.rt_base_dir" in let repo = Helm_registry.get "matita.weblib" in - let errno, outlines, errlines = exec_process + let errno, outlines, errlines = + prerr_endline + ("svn co --non-interactive " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/"); + exec_process ("svn co --non-interactive " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/") in let files, anomalies = @@ -244,6 +250,7 @@ let html_of_library uid ft = List.filter (fun x -> String.sub x 0 1 <> ".") (Array.to_list (Sys.readdir (basedir ^ "/" ^ path))) in let subdirs = List.filter (fun x -> Sys.is_directory (gpath x)) dirlist in + let subdirs = List.sort String.compare subdirs in (* only .ma scripts, hidden files excluded *) let scripts = @@ -254,6 +261,7 @@ let html_of_library uid ft = not (Sys.is_directory (gpath x)) && (String.sub x 0 1 <> ".") && (String.sub x i len = ".ma") with Not_found | Invalid_argument _ -> false) dirlist in + let scripts = List.sort String.compare scripts in let subdirtags = String.concat "\n" (List.map (fun x -> aux (normalize_qfn (lpath x ^ "/"))) subdirs) in let scripttags = @@ -303,37 +311,41 @@ let update_user user = ;; let add_files user files = - let rt_dir = Helm_registry.get "matita.rt_base_dir" in - let _repo = Helm_registry.get "matita.weblib" in - - let files = String.concat " " - (List.map ((^) (rt_dir ^ "/users/" ^ user ^ "/")) files) in - - let errno, outlines, errlines = - if files <> "" then - exec_process ("svn add --non-interactive " ^ files) - else 0,[],[] - in - if errno = 0 then - "BEGIN ADD - " ^ user ^ ":\n" ^ (string_of_output outlines errlines) ^ "END ADD - " ^ user ^ "\n\n" - else raise (SvnError (string_of_output outlines errlines)) + if (List.length files > 0) then + (let rt_dir = Helm_registry.get "matita.rt_base_dir" in + let _repo = Helm_registry.get "matita.weblib" in + + let files = String.concat " " + (List.map ((^) (rt_dir ^ "/users/" ^ user ^ "/")) files) in + + let errno, outlines, errlines = + if files <> "" then + exec_process ("svn add --non-interactive " ^ files) + else 0,[],[] + in + if errno = 0 then + "BEGIN ADD - " ^ user ^ ":\n" ^ (string_of_output outlines errlines) ^ "END ADD - " ^ user ^ "\n\n" + else raise (SvnError (string_of_output outlines errlines))) + else ("ADD - nothing to do for " ^ user ^ "\n") ;; (* this function should only be called by the server itself (or * the admin) at a scheduled time, so no concurrent instances and no CS needed * also, svn should already be safe as far as concurrency is concerned *) let commit user files = - let rt_dir = Helm_registry.get "matita.rt_base_dir" in - let _repo = Helm_registry.get "matita.weblib" in - - let files = String.concat " " - (List.map ((^) (rt_dir ^ "/users/" ^ user ^ "/")) files) in - - let errno, outlines, errlines = exec_process - ("svn ci --non-interactive --message \"commit by user " ^ user ^ "\" " ^ files) - in - 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)) + if (List.length files > 0) then + (let rt_dir = Helm_registry.get "matita.rt_base_dir" in + let _repo = Helm_registry.get "matita.weblib" in + + let files = String.concat " " + (List.map ((^) (rt_dir ^ "/users/" ^ user ^ "/")) files) in + + let errno, outlines, errlines = exec_process + ("svn ci --non-interactive --message \"commit by user " ^ user ^ "\" " ^ files) + in + 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))) + else ("COMMIT nothing to do for " ^ user ^ "\n") ;;