From e62ec1114081c7fc1ba006fcc746f67ea7588b9c Mon Sep 17 00:00:00 2001 From: orbifx Date: Wed, 16 Nov 2022 22:01:58 +0000 Subject: [PATCH] New optional pubdir parameter for txt publish - Inform about pubdir value and txt.conf --- cli/atom.ml | 4 ++-- cli/publish.ml | 54 +++++++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/cli/atom.ml b/cli/atom.ml index 7831237..0ee6fcc 100644 --- a/cli/atom.ml +++ b/cli/atom.ml @@ -50,7 +50,7 @@ let base_url kv protocol = try let locs = Logarion.Store.KV.find "Locations" kv in let _i = Str.(search_forward (regexp (protocol ^ "://[^;]*")) locs 0) in Str.(matched_string locs) - with Not_found -> Printf.eprintf "Missing location for %s" protocol; "" + with Not_found -> Printf.eprintf "Missing location for %s, add it to txt.conf\n" protocol; "" let indices alternate_type c = let file name = Logarion.File_store.file (Filename.concat c.Conversion.dir name) in @@ -61,7 +61,7 @@ let indices alternate_type c = in let base_url = base_url c.kv protocol_regexp in let self = Filename.concat base_url fname in - file fname @@ + file fname @@ (*TODO: alternate & self per url*) {||} ^ title ^ {| d | None -> try Logarion.Store.KV.find "Pubdir" kv with Not_found -> try Sys.getenv "txtpubdir" with Not_found -> "" in - let exists_dir dir = Sys.is_directory (Filename.concat pub_dir dir) in - List.filter (fun x -> try exists_dir (snd x) with Sys_error _ -> false) [ - "htm,atom", "public_html/"; - "gmi,gmi-atom", "public_gemini/"; - "", "public_gopher/"; - ] - -open Logarion -let publish ids = - let kv = Logarion.File_store.of_kv_file () in - let predicate t = List.mem t.Text.id ids in - let targets = targets kv in - let pub_dirs = List.map (fun x -> snd x) targets in - File_store.iter ~predicate (fun (_t, p) -> - try File.file ((List.hd p)::pub_dirs) - with Unix.Unix_error (Unix.EEXIST, _, _) -> ()); - List.iter (fun t -> Printf.eprintf "%s %s\n" (fst t) (snd t); - Index.((load (snd t)) false None None None None); - Convert.at_path (fst t) false (snd t); - prerr_endline (snd t)) - targets + let targets = targets pubdir in + if targets = [] then + Printf.eprintf "No target directories in $pubdir='%s'\n" pubdir + else begin + let pub_dirs = List.map (fun x -> snd x) targets in + File_store.iter ~predicate (fun (_t, p) -> + try File.file ((List.hd p)::pub_dirs) + with Unix.Unix_error (Unix.EEXIST, _, _) -> ()); + List.iter (fun t -> Printf.eprintf "%s %s\n" (fst t) (snd t); + Index.((load (snd t)) false None None None None); + Convert.at_path (fst t) false (snd t)) + targets + end open Cmdliner let term = let ids = Arg.(value & pos_all string [] & info [] ~docv:"text ids") in - let doc = "convert texts into standard public dirs public_{html,gemini,gopher} if they exist" in - Term.(const publish $ ids), Term.info "publish" ~doc ~man:[ `S "DESCRIPTION"; `P doc ] + let pubdir = Arg.(value & opt (some string) None & info ["p"; "pubdir"] ~docv:"directory path" + ~doc:"set top directory for publishing files") in + let doc = "convert texts into standard public dirs pubdir/public_{html,gemini,gopher} if they exist" in + Term.(const publish $ pubdir $ ids), Term.info "publish" ~doc ~man:[ `S "DESCRIPTION"; `P doc ]