open Dream_html
open HTML
open Git_unix (* Import Git_unix for working with repositories *)
let git_directory = Filename.concat (Unix.getenv "HOME") "git"
let repo_path repo_name = Filename.concat git_directory repo_name
let list_commits repo_name =
let repo_dir = repo_path repo_name in
if Sys.file_exists repo_dir && Sys.is_directory repo_dir then
let store = Store.v (Fpath.v repo_dir) |> Result.get_ok in
let head = Store.Head.get store |> Result.get_ok in
let rec read_commits commits acc =
match commits with
| [] -> acc
| hash :: rest ->
let commit = Store.read_commit store hash |> Result.get_ok in
let hash_str = Hash.to_hex hash in
let message = Commit.message commit in
let author = Commit.author commit in
let date = Commit.date commit in
let formatted_commit =
li []
[
txt (Printf.sprintf "%s - %s (%s)" hash_str message author);
txt (" on " ^ date);
]
in
read_commits rest (formatted_commit :: acc)
in
let all_commits = Store.Commit.list store head in
ul [] (read_commits all_commits [])
else ul [] [ li [] [ txt "Error: Repository not found." ] ]
(* Render the repository's commit list as HTML *)
let render repo_name =
let commits = list_commits repo_name in
Layouts.application ~page_title:("Commits for " ^ repo_name) commits