summaryrefslogtreecommitdiff
path: root/lib/views/repo_root.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/views/repo_root.ml')
-rw-r--r--lib/views/repo_root.ml41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/views/repo_root.ml b/lib/views/repo_root.ml
new file mode 100644
index 0000000..dd391d8
--- /dev/null
+++ b/lib/views/repo_root.ml
@@ -0,0 +1,41 @@
+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
Copyright 2019--2025 Marius PETER