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.

Commit
2b907ca7bbfefcfa34b9ddb9b1aaaa254977d306
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/resolvers.ml
index db56ab39..29bc33df 100644..100644
@@ -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
index 37175b32..b5de6135 100644..100644
@@ -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