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