From 4345d330591fcc555d5bfee50b2164f665515a85 Mon Sep 17 00:00:00 2001 From: Andre Maroneze <andre.maroneze@cea.fr> Date: Mon, 1 Feb 2021 19:03:50 +0100 Subject: [PATCH] [Server] use Filepath parameters for relevant options --- src/plugins/server/server_doc.ml | 26 +++++++++++++----------- src/plugins/server/server_doc.mli | 2 +- src/plugins/server/server_parameters.ml | 5 +++-- src/plugins/server/server_parameters.mli | 2 +- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/plugins/server/server_doc.ml b/src/plugins/server/server_doc.ml index f38f08705f9..e1ba1ae684f 100644 --- a/src/plugins/server/server_doc.ml +++ b/src/plugins/server/server_doc.ml @@ -307,16 +307,17 @@ let metadata page : json = (* -------------------------------------------------------------------------- *) let pp_one_page ~root ~page ~title body = - let full_path = Filepath.normalize (root ^ "/" ^ page) in - let dir = Filename.dirname full_path in + let full_path = Filepath.Normalized.concat root page in + let dir = Filename.dirname (full_path:>string) in if not (Sys.file_exists dir) then Extlib.mkdir ~parents:true dir 0o755; try - let chan = open_out full_path in + let chan = open_out (full_path:>string) in let fmt = Format.formatter_of_out_channel chan in let title = Md.plain title in Markdown.(pp_pandoc ~page fmt (pandoc ~title body)) with Sys_error e -> - Senv.fatal "Could not open file %s for writing: %s" full_path e + Senv.fatal "Could not open file %a for writing: %s" + Filepath.Normalized.pretty full_path e (* Build section contents in reverse order *) let build d s = List.fold_left (fun d s -> s() :: d) d s @@ -338,13 +339,13 @@ let dump ~root ?(meta=true) () = let body = Markdown.subsections page.descr (build [] page.sections) in pp_one_page ~root ~page:path ~title (intro @ body) ; if meta then - let path = Printf.sprintf "%s/%s.json" root path in - Yojson.Basic.to_file path (metadata page) ; + let path = Filepath.Normalized.concat root (path ^ ".json") in + Yojson.Basic.to_file (path:>string) (metadata page) ; ) !pages ; Senv.feedback "[doc] Page: 'readme.md'" ; if meta then - let path = Printf.sprintf "%s/readme.md.json" root in - Yojson.Basic.to_file path maindata ; + let path = Filepath.Normalized.concat root "readme.md.json" in + Yojson.Basic.to_file (path:>string) maindata ; let body = [ Md.H1 (Md.plain "Presentation", None); Md.Block (Md.text (Md.format "Version %s" Fc_config.version))] @@ -363,15 +364,16 @@ let () = Db.Main.extend begin fun () -> let root = Senv.Doc.get () in - if root <> "" then - if Sys.file_exists root && Sys.is_directory root then + if not (Filepath.Normalized.is_unknown root) then + if Sys.is_directory (root:>string) then begin - Senv.feedback "[doc] Root: '%s'" root ; + Senv.feedback "[doc] Root: '%a'" Filepath.Normalized.pretty root ; Package.iter package ; dump ~root () ; end else - Senv.error "[doc] File '%s' is not a directory" root + Senv.error "[doc] File '%a' is not a directory" + Filepath.Normalized.pretty root end (* -------------------------------------------------------------------------- *) diff --git a/src/plugins/server/server_doc.mli b/src/plugins/server/server_doc.mli index 6bb0462554e..d86aaa97d5b 100644 --- a/src/plugins/server/server_doc.mli +++ b/src/plugins/server/server_doc.mli @@ -72,6 +72,6 @@ val package : Package.packageInfo -> unit (** Dumps all published pages of documentations. Unless [~meta:false], also generates METADATA for each page in [<filename>.json] for each page. *) -val dump : root:string -> ?meta:bool -> unit -> unit +val dump : root:Filepath.Normalized.t -> ?meta:bool -> unit -> unit (* -------------------------------------------------------------------------- *) diff --git a/src/plugins/server/server_parameters.ml b/src/plugins/server/server_parameters.ml index 3eedff1c728..c7086902c97 100644 --- a/src/plugins/server/server_parameters.ml +++ b/src/plugins/server/server_parameters.ml @@ -60,11 +60,12 @@ let server_doc = add_group "Server Doc Generation" let () = Parameter_customize.set_group server_doc let () = Parameter_customize.do_not_save () -module Doc = P.String +module Doc = P.Filepath (struct let option_name = "-server-doc" let arg_name = "dir" - let default = "" + let file_kind = "Directory" + let existence = Fc_Filepath.Must_exist let help = "Output a markdown documentation of the server in <dir>" end) diff --git a/src/plugins/server/server_parameters.mli b/src/plugins/server/server_parameters.mli index 4186a397421..74d29a8d0c1 100644 --- a/src/plugins/server/server_parameters.mli +++ b/src/plugins/server/server_parameters.mli @@ -24,7 +24,7 @@ include Plugin.General_services -module Doc : Parameter_sig.String (** Generate documentation *) +module Doc : Parameter_sig.Filepath (** Generate documentation *) module Polling : Parameter_sig.Int (** Idle waiting time (in ms) *) module AutoLog : Parameter_sig.Bool (** Monitor logs *) -- GitLab