[OCaml] Mobile-friendly clone of cgit.
Replace Entry.perm int with a variant type
Replaces magic octal integers (0o040000, etc.) with a typed enum: Dir | File | Exec | Link | Submodule. The Diff module retains mode_of_perm for its own display purposes, as it needs the raw octal values in diff headers.
Changed files
lib/resolvers.ml
@@ -249,12 +249,21 @@
249
249
| `Normal -> 0o100644
250
250
251
251
module Entry = struct
252
Removed:
type t = { hash : string; name : string; perm : int }
252
Added:
type perm = Dir | File | Exec | Link | Submodule
253
253
254
Added:
type t = { hash : string; name : string; perm : perm }
255
Added:
256
Added:
let perm_of_git : Git.Tree.perm -> perm = function
257
Added:
| `Dir -> Dir
258
Added:
| `Exec -> Exec
259
Added:
| `Link -> Link
260
Added:
| `Commit -> Submodule
261
Added:
| `Normal | `Everybody -> File
262
Added:
254
263
let to_t (entry : Store.Value.Tree.entry) =
255
264
let hash = Store.Hash.to_hex entry.node in
256
265
let name = entry.name in
257
Removed:
let perm = mode_of_perm entry.perm in
266
Added:
let perm = perm_of_git entry.perm in
258
267
{ hash; name; perm }
259
268
260
269
let is_readme { name; _ } =
lib/views.ml
@@ -179,7 +179,7 @@
179
179
let li_of_entry repo (entry : Resolvers.Entry.t) =
180
180
let route = Routes.File (repo, entry.hash) in
181
181
let text =
182
Removed:
txt "%s" (if entry.perm = 0o040000 then entry.name ^ "/" else entry.name)
182
Added:
txt "%s" (if entry.perm = Dir then entry.name ^ "/" else entry.name)
183
183
in
184
184
HTML.(li [] [ Routes.link_to route text ])
185
185