(* -*- mode: tuareg; -*- *) let root _req = Views.root () module Repo = struct open Git_presenters let ( let* ) m f = let open Lwt.Infix in m >>= function | Ok x -> f x | Error e -> let msg = Format.asprintf "%a" Store.pp_error e in Views.error_page msg |> Dream_html.respond let repo req = Dream.param req "repo" let id_of_req req = Dream.param req "id" let summary req = let* branches = all_branches (repo req) in let* commits = recent_commits (repo req) 10 in let authors = [ "John Pork"; "Sebastian Jellybean" ] in Views.Repo.summary (repo req) branches commits authors let log req = let* commits = recent_commits (repo req) 100 in Views.Repo.log (repo req) commits let files_at_head req = let* tree = head_tree (repo req) in Views.Repo.files (repo req) tree let file_id req = let id = id_of_req req in let* blob = blob_of_id (repo req) id in Views.Repo.file (repo req) blob let refs req = let* branches = all_branches (repo req) in Views.Repo.refs (repo req) branches let commit req = let id = id_of_req req in let* commit = commit_of_id (repo req) id in Views.Repo.commit (repo req) commit end let all_handlers = Dream. [ get "/" root; scope "/:repo" [] Repo. [ get "/" summary; get "/summary/" summary; get "/log/" log; get "/files/" files_at_head; get "/files/:id" file_id; get "/refs/" refs; get "/commit/:id" commit; ]; get "/static/**" (static "./lib/static"); ]