Catala_utils.FileUtility functions used for file manipulation.
val with_out_channel : 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.
val with_in_channel : 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.
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)
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
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.
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 path_to_list : t -> string listEmpty elements or current-directory (".") are 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.