Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
compute.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
include Swhid_core.Compute.Make (struct let digest_string_to_hex v = Digestif.SHA1.to_hex @@ Digestif.SHA1.digest_string v end) (struct let contents name = let name = Fpath.v name in match Bos.OS.Dir.contents ~dotfiles:true ~rel:false name with | Ok contents -> Some (List.map Fpath.to_string contents) | Error _e -> None let typ name = let name = Fpath.v name in match Bos.OS.File.exists name with | Ok true -> Some Swhid_core.Compute.File | Ok false | Error _ -> ( match Bos.OS.Dir.exists name with | Ok true -> Some Dir | Ok false | Error _ -> None ) let read_file name = let name = Fpath.v name in match Bos.OS.File.read name with | Ok content -> Some content | _ -> None let permissions name = let name = Fpath.v name in match Bos.OS.Path.stat name with | Ok stat -> begin match stat.st_kind with | S_LNK -> Some 0o120000 (* symlinks *) | S_DIR -> Some 0o040000 (* directories *) | S_REG -> if Bos.OS.File.is_executable name then Some 0o100755 (* executable files *) else Some 0o100644 (* normal files *) | S_CHR | S_BLK | S_FIFO | S_SOCK -> None end | Error _e -> None let base name = let name = Fpath.v name in let name = Fpath.normalize name in let name = Fpath.base name in Fpath.to_string name end)