(* -*- mode: tuareg; -*- *) let root _req = Views.root () module Repo = struct let ( let* ) m f = Lwt.bind m @@ function | Ok x -> f x | Error e -> let msg = Format.asprintf "%a" Resolvers.Store.pp_error e in Views.error_page msg let summary req = let repo = Dream.param req "repo" in let* branches = Resolvers.Branch.all repo in let* commits = Resolvers.Commit.recent repo 10 in Views.Repo.summary repo branches commits let log req = let repo = Dream.param req "repo" in let* commits = Resolvers.Commit.recent repo 100 in Views.Repo.log repo commits let files_at_head req = let repo = Dream.param req "repo" in let* tree = Resolvers.Tree.head repo in Views.Repo.files repo tree let file_id req = let repo = Dream.param req "repo" in let id = Dream.param req "id" in let* res = Resolvers.blob_or_tree repo id in match res with | `Tree tree -> Views.Repo.files repo tree | `Blob blob -> Views.Repo.file repo blob let refs req = let repo = Dream.param req "repo" in let* branches = Resolvers.Branch.all repo in Views.Repo.refs repo branches let commit req = let repo = Dream.param req "repo" in let id = Dream.param req "id" in let* commit = Resolvers.Commit.of_id repo id in Views.Repo.commit repo commit end let all_handlers = let open Dream in [ get "/" root; scope "/:repo" [] Repo. [ get "/" summary; get "/summary/" summary; get "/log/" log; get "/files/" files_at_head; get "/file/:id" file_id; get "/refs/" refs; get "/commit/:id" commit; ]; get "/static/**" (static "./lib/static"); ]