Catala_utils.FileUtility functions used for file manipulation.
val with_out_channel : ?bin:bool -> t -> (Stdlib.out_channel -> 'a) -> 'aRuns the given function with the provided file opened, ensuring it is properly closed afterwards. May raise just as open_out. bin is true by default and only for Windows. When set to false, when writing "\n" it will be translated to "\r\n".
val with_in_channel : ?bin:bool -> t -> (Stdlib.in_channel -> 'a) -> 'aRuns the given function with the provided file opened, ensuring it is properly closed afterwards. May raise just as open_in. bin is true by default and only for Windows. When set to false, "\r\n" ends of lines are translated to "\n" upon read.
val with_formatter_of_out_channel :
?nocolor:bool ->
Stdlib.out_channel ->
(Stdlib.Format.formatter -> 'a) ->
'awith_formatter_of_out_channel oc f creates an flushes the formatter used in f from the given out_channel oc.
val with_formatter_of_file : t -> (Stdlib.Format.formatter -> 'a) -> 'awith_formatter_of_file filename f manages the formatter created from the file filename used in f -- i.e. closes the corresponding out_channel and flushes the formatter.
val with_formatter_of_opt_file :
t option ->
(Stdlib.Format.formatter -> 'a) ->
'awith_formatter_of_opt_file filename_opt f manages the formatter created from the file filename_opt if there is some (see with_formatter_of_file), otherwise, uses the Format.std_formatter.
val get_main_out_channel :
source_file:t Global.input_src ->
output_file:t option ->
?ext:string ->
unit ->
t option * ((Stdlib.out_channel -> 'a) -> 'a)get_output ~source_file ~output_file ?ext () returns the inferred filename and its corresponding with_out_channel function. If the output_file is equal to Some "-" returns a wrapper around stdout.
val get_main_out_formatter :
source_file:t Global.input_src ->
output_file:t option ->
?ext:string ->
unit ->
t option * ((Stdlib.Format.formatter -> 'a) -> 'a)get_output_format ~source_file ~output_file ?ext () returns the inferred filename and its corresponding with_formatter_of_out_channel function. If the output_file is equal to Some "-" returns a wrapper around stdout.
val with_secondary_out_channel :
output_file:t option ->
ext:string ->
(t option -> Stdlib.Format.formatter -> 'a) ->
'aUsed to open additional destination files: the main output file is specified, and a different extension must be provided. If the main output file is None, stdout output is assumed and this passes None and a null formatter to the callback. ext specifies the extension of the output file, it is prefixed with a dot unless it already starts with a non-alphanumeric character.
val temp_file : string -> string -> tLike Filename.temp_file, but registers the file for deletion at program exit unless Cli.debug_flag is set.
val with_temp_file : string -> string -> ?contents:string -> (t -> 'a) -> 'aCreates a temp file (with prefix and suffix like temp_file, optionally with the given contents, for the lifetime of the supplied function, then remove it unconditionally
val contents : t -> stringReads the contents of a file as a string
process_out cmd args executes the given command with the specified arguments, and returns the stdout of the process as a string. check_exit is called on the return code of the sub-process, the default is to fail on anything but 0.
File copy. Doesn't copy file attributes, only file content. The destination file is silently overwritten if it exists. Failures may leave a partial copy. dst can not be a directory
Recursively copy a directory with its contents using copy. filter is applied to basenames. Empty directories are not created. Does not care for links or attributes, or file reading errors. If newer_only is set to true, on files for which the destination already exists, the copy is only done if it is older than the source
val remove : t -> unitRecursively removes files and directories. Dangerous!
Does not fail on already non-existent files
Checks if the given directory exists and returns it normalised (as per Unix.realpath).
val ensure_dir : t -> unitCreates the directory (and parents recursively) if it doesn't exist already. Errors out if the file exists but is not a directory
val exists : t -> boolAlias for Sys.file_exists
Returns its argument if it exists and is a plain file, None otherwise. Does not do resolution like check_directory.
Resolves a command:
t is a plain name, resolve in PATHt is relative, returns its absolute patht was not foundFilename.concat: Sugar to allow writing File.("some" / "relative" / "path"). As an exception, if the lhs is ., returns the rhs unchanged.
val extension : t -> stringLike Filename.extension, but without the leading dot (doesn't, therefore, differenciate between empty extension and no extension). It also considers catala + md extensions as a single extension, hence extension "a_file.catala_en.md" will return "catala_en.md"
Similar to dirname, except it strips the last **non-"." or ".."** element in the supplied file name, if it exists
Rewrites a path by removing intermediate relative lookups ("." and ".."). E.g. ../foo/./bar/../baz/ becomes ../foo/baz. No disk lookup is made by this function.
Returns the longuest common prefix of two paths, which are first made absolute
If the given file name is relative, resolve it relative to CWD and clean it up. Also handles Windows drive letters (e.g. turns `\foo\bar` into `C:\foo\bar`)
remove_prefix prefix f removes the prefix path from the beginning of f ; if f doesn't start with prefix, it is returned unchanged. If f is equal to prefix, . is returned.
Makes f relative to dir, using as many ../ as necessary. If there is no common prefix, returns f unchanged
If to_dir is a path to a given directory and f a path to a file as seen from absolute path from_dir, reverse_path ~from_dir ~to_dir f is a path leading to f from to_dir. The results attempts to be relative to to_dir.
val original_cwd : tThe directory the command was originally run from
val rel_original_cwd : unit -> tSame as original_cwd, but if it is a subdirectory of the current dir, a relative path is returned
Checks for the first directory matching the given predicate from cwd upwards (defaults to the current directory). Recursion stops at home. Returns a pair dir, rel_path, where dir is the ancestor directory matching the predicate, and rel_path is a path pointing to it from the current dir.
Extension replacement: chops the given filename extension, and replaces it with the given one (which shouldn't start with a dot). No dot is appended if the provided extension is empty.
val remove_extension : t -> stringremove_extension filename is equivalent to filename -.- ""
val path_to_list : t -> string option * string listReturns a pair of drive letter (e.g. "c:", for windows) and a list of path elements. The returned path starts with an empty string for absolute directories ; empty elements or current-directory (".") are otherwise skipped in the resulting list;
val format : Stdlib.Format.formatter -> t -> unitFormats a filename in a consistent style, with double-quotes and color (when the output supports)
Recursively scans a directory for files. Directories or files matching ".*" or "_*" are ignored. Unreadable files or subdirectories are ignored with a debug message. If t is a plain file, scan just that non-recursively.
The matching results are returned grouped by directory, case-insensitively ordered by filename, as a list of non-empty subdirs and a list of extracted items.
module Tree : sig ... endA lazy tree structure mirroring the filesystem ; uses the comparison from File, so paths are case-insensitive.