85
85
String.lowercase_ascii type_name = ct))
86
86
commits
87
87
88
-
Removed:
let commits config request repository context =
88
+
Added:
let page_size = 20
89
+
Added:
90
+
Added:
let commits _config request repository context =
89
91
let filter_type = Dream.query request "type" in
90
-
Removed:
let* commits =
91
-
Removed:
Resolvers.Commit.recent repository config.Config.commits_max_displayed
92
+
Added:
let page =
93
+
Added:
match Dream.query request "page" with
94
+
Added:
| None -> 1
95
+
Added:
| Some s -> (
96
+
Added:
match int_of_string_opt s with Some p when p > 0 -> p | _ -> 1)
92
97
in
93
-
Removed:
let commits = filter_commits filter_type commits in
94
-
Removed:
Views.Repo.commits ?filter_type context commits
98
+
Added:
let offset = (page - 1) * page_size in
99
+
Added:
(* Fetch one beyond orphan threshold to detect whether more exist *)
100
+
Added:
let fetch_count = offset + page_size + 11 in
101
+
Added:
let* all_commits = Resolvers.Commit.recent repository fetch_count in
102
+
Added:
let all_commits = filter_commits filter_type all_commits in
103
+
Added:
let total = List.length all_commits in
104
+
Added:
let after_offset =
105
+
Added:
if offset >= total then []
106
+
Added:
else List.filteri (fun i _ -> i >= offset) all_commits
107
+
Added:
in
108
+
Added:
let remaining = List.length after_offset in
109
+
Added:
(* If next page would have <10 items, absorb them; otherwise normal page *)
110
+
Added:
let effective_size =
111
+
Added:
if remaining > page_size && remaining <= page_size + 10 then remaining
112
+
Added:
else page_size
113
+
Added:
in
114
+
Added:
let page_commits =
115
+
Added:
List.filteri (fun i _ -> i < effective_size) after_offset
116
+
Added:
in
117
+
Added:
let has_next = remaining > effective_size in
118
+
Added:
let has_prev = page > 1 in
119
+
Added:
Views.Repo.commits ?filter_type ~page ~has_prev ~has_next context
120
+
Added:
page_commits
95
121
96
-
Removed:
let commits_branch config repository context branch =
122
+
Added:
let commits_branch _config repository context branch =
97
123
let* reference = Resolvers.Reference.of_id repository branch in
124
+
Added:
let fetch_count = page_size + 11 in
98
125
let* commits =
99
-
Removed:
Resolvers.Commit.recent_from repository reference.hash
100
-
Removed:
config.Config.commits_max_displayed
126
+
Added:
Resolvers.Commit.recent_from repository reference.hash fetch_count
101
127
in
102
-
Removed:
Views.Repo.commits context commits
128
+
Added:
let remaining = List.length commits in
129
+
Added:
let effective_size =
130
+
Added:
if remaining > page_size && remaining <= page_size + 10 then remaining
131
+
Added:
else page_size
132
+
Added:
in
133
+
Added:
let page_commits = List.filteri (fun i _ -> i < effective_size) commits in
134
+
Added:
let has_next = remaining > effective_size in
135
+
Added:
Views.Repo.commits ~page:1 ~has_prev:false ~has_next context page_commits
103
136
104
137
let commit_id repository context id =
105
138
let* commit = Resolvers.Commit.of_id repository id in