Move Logarion's files in .logarion/ and perform OS ops with Bos

This commit is contained in:
Stavros Polymenis 2017-10-27 00:04:29 +01:00
parent 66c2d3cd2c
commit 9acf043870
3 changed files with 24 additions and 18 deletions

View File

@ -9,6 +9,7 @@ build: [
]
depends: [
"jbuilder" {build}
"bos"
"toml"
"uuidm"
"omd"

View File

@ -4,7 +4,7 @@
((name logarion_cli)
(public_name logarion_cli)
(modules logarion_cli)
(libraries (logarion logarion.confix logarion.file lwt.unix re.str cmdliner))))
(libraries (logarion logarion.confix logarion.file lwt.unix re.str cmdliner bos))))
(executable
((name logarion_webserver)

View File

@ -15,29 +15,34 @@ let conf () =
| Ok config -> config
| Error str -> prerr_endline str; exit 1
let init =
let f force =
let repo = Lpath.string_of_repo @@ (conf ()).C.repository in
let make_dir description d =
let open Unix in
try
mkdir d 0o700;
print_endline ("created " ^ description ^ ": " ^ d)
with Unix_error (EEXIST, "mkdir", _) ->
prerr_endline (description ^ " already exists: " ^ d);
if Array.length (Sys.readdir repo) > 0 then prerr_endline ("warning: " ^ d ^ " is not empty")
in
make_dir "repository" repo
let init force =
let rec create_dirs = function
| [] -> ()
| (dir,descr)::tl ->
match Bos.OS.Dir.create (Fpath.v dir) with
| Ok true -> print_endline ("Created empty " ^ descr); create_dirs tl
| Ok false -> print_endline ("Reinitialise existing " ^ descr); create_dirs tl
| Error (`Msg msg) -> prerr_endline @@ "Failed making " ^ descr ^ ". " ^ msg
in
let dirs = [
".logarion", "Logarion directory";
".logarion/static", "static file directory";
".logarion/html-templates", "template directory";
]
in
create_dirs dirs
let init_term =
let force =
Arg.(value & flag & info ["f"; "force"] ~doc:"Initialise repository even if directory is non empty")
let doc = "Initialise repository even if directory is non empty" in
Arg.(value & flag & info ["f"; "force"] ~doc)
in
Term.(const f $ force),
Term.(const init $ force),
Term.info
"init" ~doc:"initialise a logarion repository in present directory"
~man:[ `S "DESCRIPTION"; `P "Create a repository in current directory" ]
let create =
let create_term =
let title =
Arg.(value & pos 0 string "" & info [] ~docv:"TITLE" ~doc:"Title for new article")
in
@ -59,7 +64,7 @@ let default_cmd =
Term.info "logarion" ~version:"0.1.0" ~doc:"an article collection & publishing system"
~man:[ `S "BUGS"; `P "Submit bugs https://gitlab.com/orbifx/logarion/issues/new."; ]
let cmds = [ init; create ]
let cmds = [ init_term; create_term ]
let () = match Term.eval_choice default_cmd cmds with
| `Error _ -> exit 1 | _ -> exit 0