diff options
author | Marius Peter <marius.peter@tutanota.com> | 2025-01-25 19:16:32 +0100 |
---|---|---|
committer | Marius Peter <marius.peter@tutanota.com> | 2025-01-25 19:16:32 +0100 |
commit | 4edccf9a2504e8798df160e04a0820a7256f82b1 (patch) | |
tree | 371db4e0dbeaf8a62f1b2adb5b7f445b6bb799a0 /lib/views/repo.ml | |
parent | d817e1e464d1fb0c251c0d5e97b15466b0b1621c (diff) |
Restructure Views library.
Diffstat (limited to 'lib/views/repo.ml')
-rw-r--r-- | lib/views/repo.ml | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/views/repo.ml b/lib/views/repo.ml new file mode 100644 index 0000000..7fefce8 --- /dev/null +++ b/lib/views/repo.ml @@ -0,0 +1,38 @@ +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 |