blob: 76cdf42a15065d3847b266b2a78487558119261e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
(* -*- 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* blob = Resolvers.Blob.of_id repo id in
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");
]
|