Update views.

This doesn't even work. Why is OCaml so complicated?!

Commit
36c8f580659be0586413e3bfc891173fff3edd21
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
lib/views/dune
index 1b722c51..2c9ab5e5 100644..100644
@@ -1,4 +1,4 @@
1 1 (library
2 2 (name views)
3 3 (public_name ogit.views)
4 Removed: (libraries dream-html git))
4 Added: (libraries dream-html git-unix))
lib/views/ogit_root.ml
index 02928c9e..ca8e8700 100644..100644
@@ -3,16 +3,10 @@
3 3
4 4 let git_directory = Filename.concat (Unix.getenv "HOME") "git"
5 5
6 Removed: let repositories_in dir =
7 Removed: let links =
8 Removed: (* if Sys.file_exists dir && Sys.is_directory dir then *)
9 Removed: let repositories = Sys.readdir dir |> Array.to_list
10 Removed: and repo_to_li repo = li [] [ a [ href "%s" repo ] [ txt "%s" repo ] ] in
11 Removed: let repositories_as_items = List.map repo_to_li repositories in
12 Removed: ul [] repositories_as_items
13 Removed: (* else txt "No repositories found in %s" dir *)
14 Removed: in
15 Removed: div [ id "repositories" ] [ links ]
6 Added: let repositories_in directory =
7 Added: let repositories = Sys.readdir directory |> Array.to_list
8 Added: and li_of_repo repo = li [] [ a [ href "%s" repo ] [ txt "%s" repo ] ] in
9 Added: div [ id "repositories" ] [ ul [] @@ List.map li_of_repo repositories ]
16 10
17 Removed: let main_content = div [] [ txt "Hello World!"; repositories_in git_directory ]
11 Added: let main_content = null [ txt "Hello World!"; repositories_in git_directory ]
18 12 let render = Layouts.application ~page_title:"My repositories" ~main_content
lib/views/repo.ml
index 7fefce88..00000000 100644..000000
@@ -1,38 +0,0 @@
1 Removed: open Dream_html
2 Removed: open HTML
3 Removed: open Git_unix (* Import Git_unix for working with repositories *)
4 Removed:
5 Removed: let git_directory = Filename.concat (Unix.getenv "HOME") "git"
6 Removed: let repo_path repo_name = Filename.concat git_directory repo_name
7 Removed:
8 Removed: let list_commits repo_name =
9 Removed: let repo_dir = repo_path repo_name in
10 Removed: if Sys.file_exists repo_dir && Sys.is_directory repo_dir then
11 Removed: let store = Store.v (Fpath.v repo_dir) |> Result.get_ok in
12 Removed: let head = Store.Head.get store |> Result.get_ok in
13 Removed: let rec read_commits commits acc =
14 Removed: match commits with
15 Removed: | [] -> acc
16 Removed: | hash :: rest ->
17 Removed: let commit = Store.read_commit store hash |> Result.get_ok in
18 Removed: let hash_str = Hash.to_hex hash in
19 Removed: let message = Commit.message commit in
20 Removed: let author = Commit.author commit in
21 Removed: let date = Commit.date commit in
22 Removed: let formatted_commit =
23 Removed: li []
24 Removed: [
25 Removed: txt (Printf.sprintf "%s - %s (%s)" hash_str message author);
26 Removed: txt (" on " ^ date);
27 Removed: ]
28 Removed: in
29 Removed: read_commits rest (formatted_commit :: acc)
30 Removed: in
31 Removed: let all_commits = Store.Commit.list store head in
32 Removed: ul [] (read_commits all_commits [])
33 Removed: else ul [] [ li [] [ txt "Error: Repository not found." ] ]
34 Removed:
35 Removed: (* Render the repository's commit list as HTML *)
36 Removed: let render repo_name =
37 Removed: let commits = list_commits repo_name in
38 Removed: Layouts.application ~page_title:("Commits for " ^ repo_name) commits
lib/views/repo_root.ml
index 00000000..dd391d84 000000..100644
@@ -0,0 +1,41 @@
1 Added: open Dream_html
2 Added: open HTML
3 Added: open Git_unix
4 Added:
5 Added: let git_directory = Filename.concat (Unix.getenv "HOME") "git"
6 Added:
7 Added: let err_to_string err = Fmt.to_to_string Store.pp_error err
8 Added:
9 Added: let get_head_commit repo_path =
10 Added: Lwt_main.run (
11 Added: let open Lwt.Infix in
12 Added: match Git.Reference.of_string "HEAD" with
13 Added: | Error err ->
14 Added: Lwt.return (Error ("Invalid HEAD reference string: " ^ err_to_string err))
15 Added: | Ok head_ref_name ->
16 Added: Store.v (Fpath.v repo_path) >>= function
17 Added: | Error err ->
18 Added: Lwt.return (Error ("Failed to open repository: " ^ err_to_string err))
19 Added: | Ok store ->
20 Added: Store.Ref.resolve store head_ref_name >>= function
21 Added: | Error err ->
22 Added: Lwt.return (Error ("Failed to resolve HEAD: " ^ err_to_string err))
23 Added: | Ok head_oid -> Lwt.return (Ok head_oid)
24 Added: (* Git.Commit.v store head_oid >>= function *)
25 Added: (* | Error err -> *)
26 Added: (* Lwt.return (Error ("Failed to get commit from hash: " ^ err_to_string err)) *)
27 Added: (* | Ok commit -> *)
28 Added: (* Lwt.return (Ok commit) *)
29 Added: )
30 Added:
31 Added: let main_content =
32 Added: let open Lwt.Infix in
33 Added: Lwt.async (fun _ ->
34 Added: get_head_commit git_directory >>= function
35 Added: | Error msg ->
36 Added: Lwt.map (fun content -> [ p [] [ txt content ]]) (Error msg)
37 Added: | Ok head_oid ->
38 Added: Lwt.map (fun content -> [ p [] [ txt "HEAD commit hash: %s" content ]]) (Store.Hash.to_string head_oid)
39 Added: )
40 Added:
41 Added: let render = Layouts.application ~page_title:"My repositories" ~main_content