[OCaml] Mobile-friendly clone of cgit.
style address good-taste review suggestions
- Extract strip_trailing_digits helper to replace imperative while loop in language_of_shebang (purely functional now) - Replace Fun.flip Option.bind with idiomatic >>= operator for option chaining in language_of_emacs_prop - Add comment explaining bounded queue behaviour in BFS commit walker - Improve comment on orphan tail page absorption in pagination logic
Changed files
lib/handlers.ml
@@ -111,7 +111,8 @@
111
111
else List.filteri (fun i _ -> i >= offset) all_commits
112
112
in
113
113
let remaining = List.length after_offset in
114
Removed:
(* If next page would have <10 items, absorb them; otherwise normal page *)
114
Added:
(* Avoid a final page with fewer than 10 items — absorb them into this
115
Added:
page instead, so users don't paginate for a near-empty last page. *)
115
116
let effective_size =
116
117
if remaining > page_size && remaining <= page_size + 10 then remaining
117
118
else page_size
lib/resolvers.ml
@@ -298,7 +298,10 @@
298
298
of_hash repository hash
299
299
300
300
let recent_matching_from repository hash count predicate =
301
Removed:
(* BFS traversal following all parents, ordered by author date descending *)
301
Added:
(* BFS traversal following all parents, ordered by author date descending.
302
Added:
The queue is kept sorted via List.merge on insertion. This is O(n) per
303
Added:
insert, but the queue length is bounded by the branch factor × count,
304
Added:
which is small in practice (most commits have 1-2 parents). *)
302
305
let module S = Set.Make (String) in
303
306
let rec walk collected seen queue remaining =
304
307
if remaining <= 0 then Lwt_result.return (List.rev collected)
lib/views/repo.ml
@@ -70,17 +70,19 @@
70
70
else base
71
71
in
72
72
(* Strip version suffixes: python3.11 -> python, ruby3.2 -> ruby *)
73
Added:
let strip_trailing_digits s =
74
Added:
let len = String.length s in
75
Added:
let rec find_end i =
76
Added:
if i < 0 then s
77
Added:
else if s.[i] >= '0' && s.[i] <= '9' then find_end (i - 1)
78
Added:
else String.sub s 0 (i + 1)
79
Added:
in
80
Added:
find_end (len - 1)
81
Added:
in
73
82
let interpreter =
74
83
match String.split_on_char '.' interpreter with
75
84
| [] -> ""
76
Removed:
| base :: _ ->
77
Removed:
(* Also strip trailing digits: python3 -> python *)
78
Removed:
let len = String.length base in
79
Removed:
let i = ref (len - 1) in
80
Removed:
while !i >= 0 && base.[!i] >= '0' && base.[!i] <= '9' do
81
Removed:
decr i
82
Removed:
done;
83
Removed:
if !i < 0 then base else String.sub base 0 (!i + 1)
85
Added:
| base :: _ -> strip_trailing_digits base
84
86
in
85
87
match String.lowercase_ascii interpreter with
86
88
| "sh" | "bash" | "dash" | "ash" | "zsh" -> Some "bash"
@@ -158,9 +160,8 @@
158
160
| "makefile" -> Some "makefile"
159
161
| m -> Some m
160
162
in
161
Removed:
find_between line "-*-" "-*-"
162
Removed:
|> Fun.flip Option.bind extract_mode
163
Removed:
|> Fun.flip Option.bind normalize_mode
163
Added:
let ( >>= ) = Option.bind in
164
Added:
find_between line "-*-" "-*-" >>= extract_mode >>= normalize_mode
164
165
165
166
let language_of_vim_modeline line =
166
167
let contains_substring s sub =