OpamFilename
Higher level file and directory name manipulation AND file operations, wrappers on OpamSystem using the filename type
module Base : sig ... end
Basenames
module Dir : OpamStd.ABSTRACT
Directory names
val cwd : unit -> Dir.t
Return the current working directory
val rmdir : Dir.t -> unit
Remove a directory
val cleandir : Dir.t -> unit
Cleans the contents of a directory, but keeps the directory in place.
val rmdir_cleanup : Dir.t -> unit
Removes an empty directory, as well as any empty leading path components. Must be called only on a directory that is known to not have empty parents, only internal opam directory (and not tmp dir).
val mkdir : Dir.t -> unit
Create a directory
val dir_is_empty : Dir.t -> bool
val in_dir : Dir.t -> (unit -> 'a) -> 'a
Evaluate a function in a given directory
Turns an assoc list into an array suitable to be provided as environment
val exec : Dir.t -> ?env:(string * string) list -> ?name:string ->
?metadata:(string * string) list -> ?keep_going:bool -> string list list -> unit
Execute a list of commands in a given directory
Copy directory src
to dst
, that is, recursively copy the contents of src
into dst
, overwriting any existing files.
val exists_dir : Dir.t -> bool
Does the directory exist?
val raw_dir : string -> Dir.t
Creation from a raw string, without resolving symlinks etc.
val with_tmp_dir : (Dir.t -> 'a) -> 'a
Execute a function in a temp directory
val with_tmp_dir_job : (Dir.t -> 'a OpamProcess.job) -> 'a OpamProcess.job
Provide an automatically cleaned up temp directory to a job
val mk_tmp_dir : unit -> Dir.t
Raw function to create a temporary directory. No automatic cleanup
include OpamStd.ABSTRACT
val of_string : string -> t
val to_string : t -> string
val to_json : t -> OpamJson.t
val of_json : OpamJson.t -> t option
module Set : OpamStd.SET with type elt = t
module Map : OpamStd.MAP with type key = t
Create a file from a basename and the current working directory as dirname
val raw : string -> t
Creation from a raw string, without resolving symlinks, etc.
val prettify : t -> string
Prettify a filename:
val prettify_dir : Dir.t -> string
Prettify a dirname.
val read : t -> string
Retrieves the contents from the hard disk.
val open_in : t -> in_channel
Open a channel from a given file.
val open_in_bin : t -> in_channel
val open_out : t -> out_channel
val open_out_bin : t -> out_channel
val remove : t -> unit
Removes everything in filename
if existed.
val write : t -> string -> unit
Removes everything in filename
if existed, then write contents
instead.
val exists : t -> bool
Returns true if the file exists and is a regular file or a symlink to one
Returns the argument as option if it exists and is either a regular file or a symlink to one
val check_suffix : t -> string -> bool
Check whether a file has a given suffix
val with_contents : (string -> 'a) -> t -> 'a
Apply a function on the contents of a file
Copy a file in a directory. If root
is set, copy also the sub-directories. For instance, copy_in ~root:"/foo" "/foo/bar/gni"
"/toto"
creates "/toto/bar/gni"
.
val is_symlink : t -> bool
Is a symlink?
val is_symlink_dir : Dir.t -> bool
val is_exec : t -> bool
Is an executable?
val install : ?warning:OpamSystem.install_warning_fn -> ?exec:bool -> src:t -> dst:t -> unit -> unit
Installs a file to a destination. Optionally set if the destination should be set executable
Symlink a file. If symlink is not possible on the system, use copy instead. With relative
, creates a relative link through the closest common ancestor directory if possible. Otherwise, the symlink is absolute.
val is_archive : t -> bool
Returns true if the given file is an archive (zip or tar)
Extract an archive in a given directory (it rewrites the root to match Dir.t
dir if needed)
val extract_job : t -> Dir.t -> exn option OpamProcess.job
Same as extract
, as an OpamProcess.job
val extract_in_job : t -> Dir.t -> exn option OpamProcess.job
val make_tar_gz_job : t -> Dir.t -> exn option OpamProcess.job
val extract_generic_file : generic_file -> Dir.t -> unit
Extract a generic file
val ends_with : string -> t -> bool
Check whether a filename ends with a given suffix
dir starts_with pfx dir
Check whether dir
starts with pfx
val dir_ends_with : string -> Dir.t -> bool
Check whether a dirname ends with a given suffix
val patch : ?preprocess:bool -> t -> Dir.t -> exn option OpamProcess.job
Apply a patch in a directory. If preprocess
is set to false, there is no CRLF translation. Returns None
on success, the process error otherwise
val touch : t -> unit
Create an empty file
val chmod : t -> int -> unit
Change file permissions
val written_since : t -> float
Returns delay since last file update, based on mtime
Returns the closest parent of a directory (including itself) for which the predicate holds, if any
val flock : [< OpamSystem.lock_flag ] -> ?dontblock:bool -> t -> OpamSystem.lock
See OpamSystem.flock
. Prefer the higher level with_flock
functions when possible
val with_flock : [< OpamSystem.lock_flag ] -> ?dontblock:bool -> t -> (Unix.file_descr -> 'a) -> 'a
Calls f
while holding a lock file. Ensures the lock is properly released on f
exit. Raises OpamSystem.Locked
if dontblock
is set and the lock can't be acquired. f
is passed the file_descr of the lock.
val with_flock_upgrade : [< OpamSystem.actual_lock_flag ] -> ?dontblock:bool -> OpamSystem.lock -> (Unix.file_descr -> 'a) -> 'a
Calls f
with the file lock upgraded to at least flag
, then restores the previous lock level. Upgrade to `Lock_write
should never be used in blocking mode as it would deadlock. Raises OpamSystem.Locked
(but keeps the lock as is) if dontblock
is set and the lock can't be upgraded.
val with_flock_write_then_read : ?dontblock:bool -> t -> (Unix.file_descr -> 'a) -> ('a -> 'b) -> 'b
Runs first function with a write lock on the given file, then releases it to a read lock and runs the second function.
module Op : sig ... end
module Attribute : sig ... end
Simple structure to handle file attributes
val to_attribute : Dir.t -> t -> Attribute.t
Convert a filename to an attribute, relatively to a root