@@ -15,50 +15,22 @@ let language_manual_version next_handler request =
15
15
let open Data in
16
16
let init_path = request |> Dream. target |> String. split_on_char '/' in
17
17
let patch (release : Release.t ) = Rocqproverorg.Url. patch release.version in
18
- let release str =
19
- str |> Release. get_by_version
20
- |> Option. value ~default: Release. latest
21
- |> patch
22
- in
23
- let release_path = function
24
- | [] -> (patch Release. latest, [ " index.html" ])
25
- | x :: u -> (
26
- match Release. get_by_version x with
27
- | None -> (patch Release. latest, x :: u)
28
- | Some v -> (patch v, u))
29
- in
30
18
let tweak_base u =
31
19
match List. rev u with
32
- | _ :: "notes" :: _ -> u
33
20
| base :: _ when String. contains base '.' -> u
34
21
| htap -> List. rev (" index.html" :: htap)
35
22
in
36
23
let path =
37
24
match init_path with
38
- | "" :: ("manual" | "refman" ) :: path ->
39
- let version, path = release_path path in
40
- " " :: " doc" :: (" V" ^ version) :: " refman" :: tweak_base path
41
- | "" :: "stdlib" :: path ->
42
- let version, path = release_path path in
43
- " " :: " doc" :: (" V" ^ version) :: " stdlib" :: tweak_base path
44
- | [ " " ; " doc" ; version; (" refman" | "stdlib" | "api" | "doc" ) as path ] ->
45
- " " :: " doc" :: version :: path :: [ " index.html" ]
46
- | "" :: "api" :: path ->
47
- let version, path = release_path path in
48
- " " :: " doc" :: (" V" ^ version) :: " api" :: tweak_base path
49
- | [ " " ; " releases" ; version; " index.html" ] -> [ " " ; " releases" ; version ]
50
- | [ " " ; " releases" ; something ]
51
- when String. ends_with ~suffix: " .html" something ->
52
- let prefix = String. (sub something 0 (length something - 5 )) in
53
- " " :: " releases" :: (if prefix = " index" then [] else [ prefix ])
54
- | "" :: "releases" :: version :: ("htmlman" | "manual" ) :: tl ->
55
- " " :: " manual" :: release version
56
- :: (if tl = [] then [ " index.html" ] else tl)
57
- | "" :: "releases" :: version :: (("notes" | "api" ) as folder ) :: tl ->
58
- " " :: " manual" :: release version :: folder
59
- :: (if tl = [] && folder = " api" then [ " index.html" ] else tl)
60
- | [ " " ; " releases" ; version; man ] when String. contains_s man " refman" ->
61
- [ " " ; " manual" ; release version; man ]
25
+ (* When using the /doc/ path, a version is always already provided. *)
26
+ | "" :: "doc" :: version :: path ->
27
+ " " :: " doc" :: version :: tweak_base path
28
+ (* We provide shorter paths that always redirect to the latest version. *)
29
+ | " "
30
+ :: ((" api" | " corelib" | " refman" | " stdlib" | " refman-stdlib" ) :: _ as
31
+ path) ->
32
+ let version = patch Release. latest in
33
+ " " :: " doc" :: (" V" ^ version) :: tweak_base path
62
34
| u -> u
63
35
in
64
36
if init_path = path then next_handler request
0 commit comments