From 3fafe4a86932a6e80aaf2e3640d26ac4178d7e1f Mon Sep 17 00:00:00 2001 From: Emile Trotignon Date: Fri, 26 May 2023 16:03:20 +0200 Subject: [PATCH] add size options and size tests --- .vscode/settings.json | 6 ++ bin/JSherlodoc/main.ml | 2 +- bin/index/index.ml | 48 ++++++++--- bin/www/ui.ml | 12 +-- lib/db/db.ml | 2 +- lib/db/elt.ml | 2 +- lib/index_lib/index_lib.ml | 5 +- lib/index_lib/index_lib.mli | 6 +- lib/index_lib/load_doc.ml | 81 ++++++++++-------- lib/index_lib/load_doc.mli | 9 +- lib/index_lib/pretty.ml | 8 +- .../cram/base.t/base_internalhash_types.odocl | Bin 0 -> 3353 bytes test/cram/base.t/caml.odocl | Bin 0 -> 32790 bytes test/cram/base.t/md5_lib.odocl | Bin 0 -> 2391 bytes test/cram/base.t/page-index.odocl | Bin 0 -> 39593 bytes test/cram/base.t/run.t | 28 ++++++ test/cram/base.t/shadow_stdlib.odocl | Bin 0 -> 81028 bytes test/cram/odig/run.t | 76 ---------------- test/cram/{odoc.t => simple.t}/main.ml | 0 test/cram/{odoc.t => simple.t}/page.mld | 0 test/cram/{odoc.t => simple.t}/run.t | 0 21 files changed, 141 insertions(+), 144 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 test/cram/base.t/base_internalhash_types.odocl create mode 100644 test/cram/base.t/caml.odocl create mode 100644 test/cram/base.t/md5_lib.odocl create mode 100644 test/cram/base.t/page-index.odocl create mode 100644 test/cram/base.t/run.t create mode 100644 test/cram/base.t/shadow_stdlib.odocl delete mode 100644 test/cram/odig/run.t rename test/cram/{odoc.t => simple.t}/main.ml (100%) rename test/cram/{odoc.t => simple.t}/page.mld (100%) rename test/cram/{odoc.t => simple.t}/run.t (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..f042043f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "ocaml.sandbox": { + "kind": "opam", + "switch": "sherlodoc" + } +} \ No newline at end of file diff --git a/bin/JSherlodoc/main.ml b/bin/JSherlodoc/main.ml index b784e285..d6baa033 100644 --- a/bin/JSherlodoc/main.ml +++ b/bin/JSherlodoc/main.ml @@ -27,7 +27,7 @@ let search message = Jv.(apply (get global "postMessage")) [| Jv.of_list (fun Db.Elt.{ json_display; _ } -> - json_display |> Jstr.of_string |> Brr.Json.decode |> Result.get_ok) + json_display |> Jstr.of_string |> Brr.Json.decode |> Result.get_ok) results |] diff --git a/bin/index/index.ml b/bin/index/index.ml index c3dd3551..490ae4ec 100644 --- a/bin/index/index.ml +++ b/bin/index/index.ml @@ -1,4 +1,5 @@ -let main files db_filename db_format = +let main files index_docstring index_name type_search empty_payload db_filename + db_format = let index = files |> List.map Fpath.of_string |> List.map Result.get_ok in let optimize, storage = match db_format with @@ -6,20 +7,42 @@ let main files db_filename db_format = | `marshal -> false, (module Storage_marshal : Db.Storage.S) | `js -> false, (module Storage_js : Db.Storage.S) in - let add_entries li e = (Odoc_search.Entry.entries_of_item e) @ li in + let add_entries li e = Odoc_search.Entry.entries_of_item e @ li in let index = - index |> - List.fold_left (fun li file -> - file - |> Odoc_odoc.Indexing.handle_file - ~page:(Odoc_model.Fold.page ~f:add_entries li) - ~unit:(Odoc_model.Fold.unit ~f:add_entries li) - |> Result.get_ok |> Option.value ~default:[]) [] + index + |> List.fold_left + (fun li file -> + file + |> Odoc_odoc.Indexing.handle_file + ~page:(Odoc_model.Fold.page ~f:add_entries li) + ~unit:(Odoc_model.Fold.unit ~f:add_entries li) + |> Result.get_ok |> Option.value ~default:[]) + [] in - Index_lib.main ~index ~db_filename ~optimize storage + Index_lib.main ~index_docstring ~index_name ~type_search ~empty_payload ~index + ~db_filename ~optimize storage open Cmdliner +let index_docstring = + let doc = "Use the docstring to index the results." in + Arg.(value & opt bool true & info ~doc [ "index-docstring" ]) + +let index_name = + let doc = "Use the name to index the results." in + Arg.(value & opt bool true & info ~doc [ "index-name" ]) + +let type_search = + let doc = "Enable type based search" in + Arg.(value & opt bool true & info ~doc [ "type-search" ]) + +let empty_payload = + let doc = + "Dont put anything in the payloads. For testing purposes, will break the \ + UI." + in + Arg.(value & flag & info ~doc [ "empty-payload" ]) + let db_format = let doc = "Database format" in let kind = Arg.enum [ "ancient", `ancient; "marshal", `marshal; "js", `js ] in @@ -34,7 +57,10 @@ let odoc_files = let doc = "Path to a binary odoc index" in Arg.(non_empty & (pos_all file [] @@ info ~doc ~docv:"ODOC_FILE" [])) -let index = Term.(const main $ odoc_files $ db_filename $ db_format) +let index = + Term.( + const main $ odoc_files $ index_docstring $ index_name $ type_search + $ empty_payload $ db_filename $ db_format) let cmd = let doc = "Index odocl files" in diff --git a/bin/www/ui.ml b/bin/www/ui.ml index 54097d0e..4704ce88 100644 --- a/bin/www/ui.ml +++ b/bin/www/ui.ml @@ -15,11 +15,7 @@ let render_elt elt = let link = render_link elt in match elt.kind with | Val { type_; _ } -> - [ txt "val " - ; a ~a:link [ em [ txt elt.name ] ] - ; txt " : " - ; txt type_ - ] + [ txt "val "; a ~a:link [ em [ txt elt.name ] ]; txt " : "; txt type_ ] | Doc -> [ txt "comment "; a ~a:link [ em [ txt elt.name ] ] ] | TypeDecl { type_decl } -> [ txt "type " @@ -44,11 +40,7 @@ let render_elt elt = ; txt type_ ] | Field { type_; _ } -> - [ txt "field " - ; a ~a:link [ em [ txt elt.name ] ] - ; txt " : " - ; txt type_ - ] + [ txt "field "; a ~a:link [ em [ txt elt.name ] ]; txt " : "; txt type_ ] let render_pkg elt = let open Db.Elt in diff --git a/lib/db/db.ml b/lib/db/db.ml index d711e32d..428ace2b 100644 --- a/lib/db/db.ml +++ b/lib/db/db.ml @@ -134,7 +134,7 @@ module Make (Storage : Storage.S) : S with type writer = Storage.writer = struct let ho = Hocc.create 16 in let hs = Hset.create 16 in List.iter - (fun (path, count) -> store ~ho ~hs ~count path elt) + (fun (path, count) -> store ~ho ~hs ~count (Cache_list.memo path) elt) (regroup_chars paths) let store_chars name elt = diff --git a/lib/db/elt.ml b/lib/db/elt.ml index 94177d95..d5f6cf98 100644 --- a/lib/db/elt.ml +++ b/lib/db/elt.ml @@ -56,7 +56,7 @@ module T = struct type t = { name : string ; kind : kind - ; has_doc: bool + ; has_doc : bool ; pkg : package option ; json_display : string } diff --git a/lib/index_lib/index_lib.ml b/lib/index_lib/index_lib.ml index 4edb299c..f4e72d42 100644 --- a/lib/index_lib/index_lib.ml +++ b/lib/index_lib/index_lib.ml @@ -1,6 +1,7 @@ module Storage = Db.Storage -let main ~index ~db_filename ~optimize storage = +let main ~index_docstring ~index_name ~type_search ~empty_payload ~index + ~db_filename ~optimize storage = let module Storage = (val storage : Storage.S) in let module Load_doc = Load_doc.Make (Storage) in let module Db = Load_doc.Db in @@ -10,6 +11,6 @@ let main ~index ~db_filename ~optimize storage = Load_doc.clear () ; Db.export h in - Load_doc.run ~index ; + Load_doc.run ~index_docstring ~index_name ~type_search ~empty_payload ~index ; flush () ; Storage.close_out h diff --git a/lib/index_lib/index_lib.mli b/lib/index_lib/index_lib.mli index d307a4b2..43778502 100644 --- a/lib/index_lib/index_lib.mli +++ b/lib/index_lib/index_lib.mli @@ -1,5 +1,9 @@ val main : - index:Odoc_search.Entry.t list + index_docstring:bool + -> index_name:bool + -> type_search:bool + -> empty_payload:bool + -> index:Odoc_search.Entry.t list -> db_filename:string -> optimize:bool -> (module Db.Storage.S) diff --git a/lib/index_lib/load_doc.ml b/lib/index_lib/load_doc.ml index 4e9686e7..97be9b3b 100644 --- a/lib/index_lib/load_doc.ml +++ b/lib/index_lib/load_doc.ml @@ -216,40 +216,39 @@ module Make (Storage : Db.Storage.S) = struct Cache_list.memo xs) type_paths) - let register_kind elt (kind : Odoc_search.Entry.extra) = + let register_kind ~type_search elt (kind : Odoc_search.Entry.extra) = let open Odoc_search.Entry in let open Odoc_model.Lang in - match kind with - | TypeDecl _ -> () - | Module -> () - | Value { value = _; type_ } -> register_type_expr elt type_ - | Doc _ -> () - | Exception _ -> () - | Class_type _ -> () - | Method _ -> () - | Class _ -> () - | TypeExtension _ -> () - | ExtensionConstructor _ -> () - | ModuleType -> () - | Constructor { args; res } -> - let type_ = searchable_type_of_constructor args res in - register_type_expr elt type_ - | Field { mutable_ = _; parent_type; type_ } -> - let type_ = TypeExpr.Arrow (None, parent_type, type_) in - register_type_expr elt type_ - + if type_search + then + match kind with + | TypeDecl _ -> () + | Module -> () + | Value { value = _; type_ } -> register_type_expr elt type_ + | Doc _ -> () + | Exception _ -> () + | Class_type _ -> () + | Method _ -> () + | Class _ -> () + | TypeExtension _ -> () + | ExtensionConstructor _ -> () + | ModuleType -> () + | Constructor { args; res } -> + let type_ = searchable_type_of_constructor args res in + register_type_expr elt type_ + | Field { mutable_ = _; parent_type; type_ } -> + let type_ = TypeExpr.Arrow (None, parent_type, type_) in + register_type_expr elt type_ - let register_entry + let register_entry ~empty_payload ~index_name ~type_search ~index_docstring (Odoc_search.Entry. - { id : Odoc_model.Paths.Identifier.Any.t - ; doc : Odoc_model.Comment.docs - ; extra : extra - } as entry) = + { id : Odoc_model.Paths.Identifier.Any.t + ; doc : Odoc_model.Comment.docs + ; extra : extra + } as entry) = let open Odoc_search in let open Odoc_search.Entry in - let full_name = - id |> Pretty.fullname |> String.concat "." - in + let full_name = id |> Pretty.fullname |> String.concat "." in let doc = let html = doc |> Render.html_of_doc |> string_of_html and txt = Render.text_of_doc doc in @@ -268,17 +267,25 @@ module Make (Storage : Db.Storage.S) = struct | Doc _ -> Pretty.prefixname id | _ -> full_name in - let json_display = entry |> Json_display.of_entry |> Odoc_html.Json.to_string in + let json_display = + if empty_payload + then "" + else entry |> Json_display.of_entry |> Odoc_html.Json.to_string + in let has_doc = doc.txt <> "" in - let elt = Elt.{ name; kind = kind'; pkg = None ; json_display ; has_doc} in - - register_doc elt doc.txt ; - (match extra with - | Doc _ -> () - | _ -> register_full_name full_name elt) ; - register_kind elt extra + let elt = Elt.{ name; kind = kind'; pkg = None; json_display; has_doc } in + if index_docstring then register_doc elt doc.txt ; + (if index_name + then + match extra with + | Doc _ -> () + | _ -> register_full_name full_name elt) ; + register_kind ~type_search elt extra module Resolver = Odoc_odoc.Resolver - let run ~index = List.iter register_entry index + let run ~index_docstring ~index_name ~type_search ~empty_payload ~index = + List.iter + (register_entry ~index_docstring ~index_name ~type_search ~empty_payload) + index end diff --git a/lib/index_lib/load_doc.mli b/lib/index_lib/load_doc.mli index 747e710d..3ceec4f9 100644 --- a/lib/index_lib/load_doc.mli +++ b/lib/index_lib/load_doc.mli @@ -2,5 +2,12 @@ module Make (Storage : Db.Storage.S) : sig module Db : Db.S with type writer = Storage.writer val clear : unit -> unit - val run : index:Odoc_search.Entry.t list -> unit + + val run : + index_docstring:bool + -> index_name:bool + -> type_search:bool + -> empty_payload:bool + -> index:Odoc_search.Entry.t list + -> unit end diff --git a/lib/index_lib/pretty.ml b/lib/index_lib/pretty.ml index 64d87780..8ddc4100 100644 --- a/lib/index_lib/pretty.ml +++ b/lib/index_lib/pretty.ml @@ -104,9 +104,11 @@ let rec full_name_aux : Paths.Identifier.t -> string list = let fullname : [< Paths.Identifier.t_pv ] Paths.Identifier.id -> string list = fun n -> List.rev @@ full_name_aux (n :> Paths.Identifier.t) - let prefixname : [< Paths.Identifier.t_pv ] Paths.Identifier.id -> string = - fun n -> - match full_name_aux (n :> Paths.Identifier.t) with [] -> "" | _ :: q -> String.concat "." q +let prefixname : [< Paths.Identifier.t_pv ] Paths.Identifier.id -> string = + fun n -> + match full_name_aux (n :> Paths.Identifier.t) with + | [] -> "" + | _ :: q -> String.concat "." q let show_type_name_verbose h : Paths.Path.Type.t -> _ = function | `Resolved t -> diff --git a/test/cram/base.t/base_internalhash_types.odocl b/test/cram/base.t/base_internalhash_types.odocl new file mode 100644 index 0000000000000000000000000000000000000000..61d01f3f946cb0fb80b6d114c142d3aa0b10dfd1 GIT binary patch literal 3353 zcmcguU2GIp6rLGpunRS4umLp)rQQB_cS)f|tUC9$rBF;Ml+sd+!|d*~U6}1GJJZ%; zg$I2=v~(AQ#Nfjv0Spn7Mu;)N05NDZ^3Vi>KPh5V4DwPRFlr#+xpTKOOn=hG2a~;< z{l5L?ob#P~?%g$_Mx@;D-%_`!dEJIazyFQHC(m;nw;R@@u%3riF+5C!%6(5_l7bH_ zOXnCw&JU}mCM>!A`P&5vg?>&~VR%{6`$gk}mkHyc`gOOwhp-v=_! z6H$~yMFoq0ToyhsurIsm@U6E723a-Pog63Z=eVrPuvU_TB#Yxh-2YINYg~LJEoRN$ z%Dl-|M4pgUHELWRZ_yef8CNanN-ScgLPJB5y0-oUzh+&pZaUF?G>4FaW-F@4!l_XI z@b6bX{_Ebzo->zA&K-FwEvJTk#cqRxW-=0_TQEiQ199CK2zD89EvUs~x)y9o8auRz zWd@B1lwv;?RKh(mJsON^9cqtmg)aWNyR71mp<@r-3Gw%Hw!DfUA2}ia1pTi1`RN~s zSf2KqmTGB2(J)RD<&bWqJsN}x_hlK?=F&iarC zQ%6O8ltFPvGys60Bn#y4F=O4GRQ5XMkm<`q1wT^6*V3_O%CMqxz>aHH!`!AHl>mA)q00eJfy8Q7C9-|a)a#Xhg5ZugEc^yWQ z=Db50ym?$C@f;w6+cL4@hDj|*{KJ&PTU}i?AcDh8SDffcCJa+E%WUxi`UQ@-;zfW6 z&dgSx+D!*u;+IegJJTic`G5$9@uKI)Z)v(t`z-OLl*G=2Nqh(p!HJ9&HaikuMJc?? zO9o0TH~1Y4fcvmHCDa?jd-utApn3h1&*C$i282No8+Ralxe6=h7wik4vwr_h>@S%iG(1<(A@7|1D20 z&GYUEn7njjY$K8QuhQj_qz28fiw7@dbFW<-UZE7|(PS;{Pz!X)EO{~&sF{`5Jra6{rF$>|D8i~K-wNRQawOedjN%(;j zf~})-eSu7u88;gf&rQ>47GbgrVcv8u3NnS{?3XIa*ra5Fczp;9y*}#Gfljzl+_Nk! z3Y>z!S-pyvo{byd(#dwbQKoQI=$#euJy}NfD@9T%NoYJYG9nZ4piEN7B%!57w&5lQ zx2*vs5#tOgb+U|Wh&ae#q!zUF**b=I)XNkF7&6wvqnL>2ksa8?vJ8)oFw}>r6w)y` L02dXit&{%+Zw5=$ literal 0 HcmV?d00001 diff --git a/test/cram/base.t/caml.odocl b/test/cram/base.t/caml.odocl new file mode 100644 index 0000000000000000000000000000000000000000..90cc8dd703172b2b220f93ef0f03e964715727bb GIT binary patch literal 32790 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 literal 0 HcmV?d00001 diff --git a/test/cram/base.t/page-index.odocl b/test/cram/base.t/page-index.odocl new file mode 100644 index 0000000000000000000000000000000000000000..894f6c4b95e62971f2de4d4539f4f4876b3f848e GIT binary patch literal 39593 zcmbuo2V7jowLgAYSb7(|F0eF7$i3S!5<)T(G7W80q{mgK zKNy&aciG*lc-8UWd}H^G_uiU& z!L4ndOEZ^wxXy8!4>``!R>zs!ukQQt|J#M$otArFTH3N}DfR9v)~!1)`TvKGLr#$E1aN>=)deiuAM>_GZ=ljRMq0*|%V_v2nJaTDFKjyk6&xUiS<*W5w zYW-&Ax#GEwU;8&;Fggh?Rb8E`Yf^b$KKI|(tK>O5*3Co$iO~2+ED(&uMlSGp-tod) zvwX3U#qdfOYDmjfT`}c(W^C_8%CqKA?|6c))2h0l;<-) zc=k?Q^U^!2HvDg5yIDrU*bO40v+Gjd7MrWwc z7y(^3B>TibsIG|V(;iI356=XGF@0wL+omwy_Fo}gp zZK}IdZ9cM8R&Q7=s|!8Vw^YBdOjZ}JB&+)&tL}|_Z5mg4n1=}J?oQs}84#+QHHRPg zECJouCHuS?gzD}wXKD!0Y2HP2_m*Ur_k&Q~{iaLX%xqvP97u$z=SKv31n% zM+A0@Abtu$b&s2qHTKL>pBD(|jwa9bdl0JoAV0%&B7P_uj%W?|E5Y4~WY3pCsO}ll zQxAwYC6$2gS=+~(k_k$6FYxJHL*h*-AiVpy^eq9Ux}8qbxoIXsH|R~N)>yZ*UV8cf zt;f-2x;Dl~b#W=VJQ#y(!lcylJMEnT{l&L6d>0S<`);6c0zV&Ge?cta>`tHrVt<4$kW-TWmEi@}z&E z@2X{1^P&~3rq`1Vv)QxB+*HfpR4h87mDW>8XwT;4U3p4Dsh(cG{rD`*JKesghQOX} z(y;-Q>KQa0-Nw=DX(PO6m-OubrFw=;R>D;^w5rA9y{x3F(=Zv*AXjRnMI1)jS!& zywax&6WDV|Iz~aM9(Xm^*F4R4CvY9Ijx}{XQQ0-^?)|w=r$K`An)e&D2;59+3a~j zZRu27*ax;B9*@H`2DH=ndfrZqElFqS^}Gj^+QI@~lZZ^m0-=bVeVz{yYl}y`EnZyhY5Z=eMBL7Hdw!(V5vqG&l$ItMB4Z#M&a})bn>xYRgS#Q2mFav*Xk+ z)gf%liRAF7dO@iz&IZ%bK2>V2#P$r)=wsjX~E+e7im z>1ZsHprF8;>L1}2QFO&uU`tIXWgJ)qQ9 z4olj@(a}+ak!HT79w5fnWMJY=jet^HSxl{=@pv@E=Zz7(RYa7EA0AU%mw3F?BLr;~ zkC#f6+G^)VYd9X6nQAr9bgRaDT~fMJ^>(UWJ4+Igj>r*me0uQjBSx>xlGF!5sa_j1 zjz$8ra|yoLGlciLMDRE$)yttt(m|!ZnXq1oOH$tfO7(L5-o)`n>iY@mO-AtE)DMGF zz3d*FrsC!fKS5BhxW&|`L8)GzOXBQPpCzzYCQ|BGL8;y;Bl1PQKK0v#_r^u=KLDkA z*_rug=0av_{FJa>i62vc1xocEVl^@rEcN$<^d6S8{TY<%Wz*^JIj_$sZ*Gt5GFETeQG)t* z$Y|UIO7(I2%ZZXV?KXn?lIgEE?JiKNkNrohj<#C0TTHv3;6CvoX|DyP`Zz!B2#p7( zrXsNpsSN7s9*xhLm_6-F1opX9|7)OBAN!)ls5bIx-yx(= zJW<*YL8-o_o+#~S8r$yD`CqH;P%n6EE_UepM)S_ua5V0zN+_Rx^gpTX+tqg1tA?L_ z>T1L6)Qtb4pKceo?sY(=eay(Xja{%&WN*6a?^OM`5?6-Sw0At6tPFX*^%o~1vA}FJ zJ~cBQo$i>8cZA}Jh-cjo(|(@S5*t~Gxsq;sSE>Fk)z2PtZNKZBbjRK*;`NKu^wxt? z{nlxk$?R<*q+cwycMT}jZ!LBg?o1DW_d+$$sRm(sFFbi2WKwkeKT4Fo&XsCl1FX@K zS?k@gc-CIxX}InecP*Q>m#p|?-Dx>$0QO{2waV+=ss_5%0A}B^a+TNX?=-hLKtCL~ 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 CX))XY literal 0 HcmV?d00001 diff --git a/test/cram/base.t/run.t b/test/cram/base.t/run.t new file mode 100644 index 00000000..858cabb6 --- /dev/null +++ b/test/cram/base.t/run.t @@ -0,0 +1,28 @@ + $ cd base + $ cd .. + $ cat $(find . -name '*.odocl') > megaodocl + $ du -sh megaodocl + 5.1M megaodocl + $ sherlodoc_index --format=js --db=db.js $(find . -name '*.odocl') 2> /dev/null + $ sherlodoc_index --format=js --empty-payload --db=db_empty_payload.js $(find . -name '*.odocl') 2> /dev/null + $ sherlodoc_index --format=js --index-docstring=false --db=db_no_docstring.js $(find . -name '*.odocl') 2> /dev/null + $ sherlodoc_index --format=js --index-name=false --db=db_no_name.js $(find . -name '*.odocl') 2> /dev/null + $ sherlodoc_index --format=js --type-search=false --db=db_no_type.js $(find . -name '*.odocl') 2> /dev/null + $ sherlodoc_index --format=js --type-search=false --empty-payload --index-docstring=false --db=db_only_names.js $(find . -name '*.odocl') 2> /dev/null + + $ du -sh *.js + 20M db.js + 16M db_empty_payload.js + 17M db_no_docstring.js + 15M db_no_name.js + 13M db_no_type.js + 6.4M db_only_names.js + $ for f in $(find . -name '*.odocl'); do + > odoc html-generate --with-search --output-dir html $f 2> /dev/null + > done + $ odoc support-files -o html + $ cat db.js ../../../bin/JSherlodoc/main.bc.js > html/index.js + $ du -sh html/index.js + 23M html/index.js + $ cp -r html /tmp + $ firefox /tmp/html/index.html diff --git a/test/cram/base.t/shadow_stdlib.odocl b/test/cram/base.t/shadow_stdlib.odocl new file mode 100644 index 0000000000000000000000000000000000000000..fa74a5d40a602ab91a9216cfb697400abc651157 GIT binary patch literal 81028 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 /dev/null - $ pwd - $TESTCASE_ROOT - $ cd .. - $ find . -name '*.odocl' - $ odoc compile-index --binary -I dream/_build/default/_doc/_odocls/playground -I dream/_build/default/_doc/_odocls/dream-pure -I dream/_build/default/_doc/_odocls/hello -o index.odoc_bin - odoc: unknown option '--binary'. - Usage: odoc compile-index [OPTION]… - Try 'odoc compile-index --help' or 'odoc --help' for more information. - [2] - $ sherlodoc_index --format=js --odoc=index.odoc_bin --db=db.js - index: option '--odoc': no 'index.odoc_bin' file or directory - Usage: index [--db=DB] [--format=DB_FORMAT] [--odoc=ODOC_FILE] [OPTION]… - Try 'index --help' for more information. - [124] - $ du -sh db.js - du: cannot access 'db.js': No such file or directory - [1] - $ odoc html-generate --with-search --output-dir html dream/_build/default/_doc/_odocls/playground/page-index.odocl - odoc: FILE.odocl argument: no - 'dream/_build/default/_doc/_odocls/playground/page-index.odocl' file or - directory - Usage: odoc html-generate [OPTION]… FILE.odocl - Try 'odoc html-generate --help' or 'odoc --help' for more information. - [2] - $ odoc html-generate --with-search --output-dir html dream/_build/default/_doc/_odocls/dream-pure/page-index.odocl - odoc: FILE.odocl argument: no - 'dream/_build/default/_doc/_odocls/dream-pure/page-index.odocl' file or - directory - Usage: odoc html-generate [OPTION]… FILE.odocl - Try 'odoc html-generate --help' or 'odoc --help' for more information. - [2] - $ odoc html-generate --with-search --output-dir html dream/_build/default/_doc/_odocls/dream-pure/dream_pure.odocl - odoc: FILE.odocl argument: no - 'dream/_build/default/_doc/_odocls/dream-pure/dream_pure.odocl' file or - directory - Usage: odoc html-generate [OPTION]… FILE.odocl - Try 'odoc html-generate --help' or 'odoc --help' for more information. - [2] - $ odoc html-generate --with-search --output-dir html dream/_build/default/_doc/_odocls/hello/page-index.odocl - odoc: FILE.odocl argument: no - 'dream/_build/default/_doc/_odocls/hello/page-index.odocl' file or - directory - Usage: odoc html-generate [OPTION]… FILE.odocl - Try 'odoc html-generate --help' or 'odoc --help' for more information. - [2] - $ ls - html - odig - $ ls dream/_build/default/_doc/_odocls/dream-pure - ls: cannot access 'dream/_build/default/_doc/_odocls/dream-pure': No such file or directory - [2] - $ odoc support-files -o html - $ cat db.js ../../../bin/JSherlodoc/main.bc.js > html/index.js - cat: db.js: No such file or directory - cat: ../../../bin/JSherlodoc/main.bc.js: No such file or directory - [1] - $ du -sh html/index.js - 0 html/index.js - $ ls html - fonts - highlight.pack.js - index.js - katex.min.css - katex.min.js - odoc.css - odoc_search.js - $ ls html/dream-pure - ls: cannot access 'html/dream-pure': No such file or directory - [2] - $ cp -r html /tmp - $ xdg-open /tmp/html/dream-pure/index.html diff --git a/test/cram/odoc.t/main.ml b/test/cram/simple.t/main.ml similarity index 100% rename from test/cram/odoc.t/main.ml rename to test/cram/simple.t/main.ml diff --git a/test/cram/odoc.t/page.mld b/test/cram/simple.t/page.mld similarity index 100% rename from test/cram/odoc.t/page.mld rename to test/cram/simple.t/page.mld diff --git a/test/cram/odoc.t/run.t b/test/cram/simple.t/run.t similarity index 100% rename from test/cram/odoc.t/run.t rename to test/cram/simple.t/run.t