open Dream_html open HTML open Git_unix let git_directory = Filename.concat (Unix.getenv "HOME") "git" let err_to_string err = Fmt.to_to_string Store.pp_error err let get_head_commit repo_path = Lwt_main.run ( let open Lwt.Infix in match Git.Reference.of_string "HEAD" with | Error err -> Lwt.return (Error ("Invalid HEAD reference string: " ^ err_to_string err)) | Ok head_ref_name -> Store.v (Fpath.v repo_path) >>= function | Error err -> Lwt.return (Error ("Failed to open repository: " ^ err_to_string err)) | Ok store -> Store.Ref.resolve store head_ref_name >>= function | Error err -> Lwt.return (Error ("Failed to resolve HEAD: " ^ err_to_string err)) | Ok head_oid -> Lwt.return (Ok head_oid) (* Git.Commit.v store head_oid >>= function *) (* | Error err -> *) (* Lwt.return (Error ("Failed to get commit from hash: " ^ err_to_string err)) *) (* | Ok commit -> *) (* Lwt.return (Ok commit) *) ) let main_content = let open Lwt.Infix in Lwt.async (fun _ -> get_head_commit git_directory >>= function | Error msg -> Lwt.map (fun content -> [ p [] [ txt content ]]) (Error msg) | Ok head_oid -> Lwt.map (fun content -> [ p [] [ txt "HEAD commit hash: %s" content ]]) (Store.Hash.to_string head_oid) ) let render = Layouts.application ~page_title:"My repositories" ~main_content