OpamFilenameSourceHigher level file and directory name manipulation AND file operations, wrappers on OpamSystem using the filename type
Directory names
Cleans the contents of a directory, but keeps the directory in place. Noop if directory doesn't exists.
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).
Returns whether a directory is empty. Returns None if the directory could not be found.
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 ->
unitExecute 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.
Same as copy_dir except it avoids copying VCS directories (.git, .hg, _darcs)
Provide an automatically cleaned up temp directory to a job
Raw function to create a temporary directory. No automatic cleanup
Create a file from a basename and the current working directory as dirname
Prettify a filename:
Open a channel from a given file.
with_open_out_bin filename f opens f and passes the out_channel to f. If f raises an exception, then filename is deleted and then exception is propagated. The out_channel does not have to be closed by f.
with_open_out_bin_atomic filename f opens f and passes the out_channel to f. If f raises an exception, then filename will be unaltered and then exception is propagated. The out_channel does not have to be closed by f.
Removes everything in filename if existed, then write contents instead.
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
Execute a function with a file in a temp directory. It is always cleaned up afterwards.
Provide an automatically cleaned up file in temp directory to a job
Returns alll the files, including dangling symlinks (which means that not all entries will satisfy exists).
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 install :
?warning:OpamSystem.install_warning_fn ->
?exec:bool ->
src:t ->
dst:t ->
unit ->
unitInstalls 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.
Extract an archive in a given directory (it rewrites the root to match Dir.t dir if needed)
Same as extract, as an OpamProcess.job
Extract a generic file
dir starts_with pfx dir Check whether dir starts with pfx
val patch :
allow_unclean:bool ->
[ `Patch_file of t | `Patch_diffs of Patch.t list ] ->
Dir.t ->
(Patch.operation list, exn) resultpatch ~allow_unclean patch_source dir applies a patch to directory dir. The patch source can be either `Patch_file filename for a patch file, or `Patch_diffs diffs for a list of file-level changes.
parse_patch ~dir patch_file processes and parses a patch file. Returns the parsed patch diffs or raises an exception if the patch file doesn't exist or can't be parsed.
Returns the closest parent of a directory (including itself) for which the predicate holds, if any
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) ->
'aCalls f while holding a lock file. Ensures the lock is properly released on f exit. 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) ->
'aCalls 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.
val with_flock_write_then_read :
?dontblock:bool ->
t ->
(Unix.file_descr -> 'a) ->
('a -> 'b) ->
'bRuns first function with a write lock on the given file, then releases it to a read lock and runs the second function.
Convert a filename to an attribute, relatively to a root