Model of the file system
Local paths
External paths
The Path.t type
module Local_gen : sig ... end
Relative path relative to the root tracked by the type system.
module Unspecified : sig ... end
module Local : sig ... end
Relative path with unspecified root.
module Source : sig ... end
In the source section of the current workspace.
module External : sig ... end
module Build : sig ... end
val hash : t -> int
val to_string : t -> string
val of_string : string -> t
val parse_string_exn : loc:Stdune__Loc0.t -> string -> t
a directory is smaller than its descendants
include Comparator.S with type t := t
val compare : t -> t -> Ordering.t
val extension : t -> string
val basename : t -> string
val basename_opt : t -> string option
module Set : sig ... end
val to_string_maybe_quoted : t -> string
val is_root : t -> bool
val hash : t -> int
val to_string_maybe_quoted : t -> string
to_string_maybe_quoted t
is maybe_quoted (to_string t)
val root : t
val external_ : External.t -> t
val is_root : t -> bool
val is_managed : t -> bool
val of_filename_relative_to_initial_cwd : string -> t
Create an external path. If the argument is relative, assume it is relative to the initial directory dune was launched in.
val to_absolute_filename : t -> string
Convert a path to an absolute filename. Must be called after the workspace root has been set. root
is the root directory of local paths
Reach a given path from
a directory. For example, let p
be a path to the file some/dir/file
and d
be a path to the directory some/another/dir
. Then reach p ~from:d
evaluates to ../../dir/file
.
Extract the build context from a path. For instance, representing paths as strings:
extract_build_context "_build/blah/foo/bar" = Some ("blah", "foo/bar")
It doesn't work correctly (doesn't return a sensible source path) for build directories that are not build contexts, e.g. "_build/install" and "_build/.aliases".
Same as extract_build_context
but return the build context as a path:
extract_build_context "_build/blah/foo/bar"
= Some ("_build/blah", "foo/bar")
Drop the "_build/blah" prefix if present, return t
otherwise
Drop the "_build/blah" prefix if present, return t
if it's a source file, otherwise fail.
val explode : t -> string list option
val explode_exn : t -> string list
val build_dir : t
The build directory
val is_in_build_dir : t -> bool
is_in_build_dir t = is_descendant t ~of:build_dir
val is_in_source_tree : t -> bool
is_in_source_tree t = is_managed t && not (is_in_build_dir t)
val is_strict_descendant_of_build_dir : t -> bool
is_strict_descendant_of_build_dir t = is_in_build_dir t && t <> build_dir
val exists : t -> bool
val readdir_unsorted : t -> (string list, Unix.error) Result.t
val is_directory : t -> bool
val is_file : t -> bool
val rmdir : t -> unit
val unlink : t -> unit
val unlink_no_err : t -> unit
val rm_rf : ?allow_external:bool -> t -> unit
val mkdir_p : ?perms:int -> t -> unit
val touch : ?create:bool -> t -> unit
val in_source : string -> t
paths guaranteed to be in the source directory
val set_root : External.t -> unit
Set the workspace root. Can only be called once and the path must be absolute
module L : sig ... end
Return the "local part" of a path. For local paths (in build directory or source tree), this returns the path itself. For external paths, it returns a path that is relative to the current directory. For example, the local part of /a/b
is ./a/b
.
val stat : t -> Unix.stats
val set_of_source_paths : Source.Set.t -> Set.t
val string_of_file_kind : Unix.file_kind -> string
temp_dir prefix suffix returns the name of a fresh temporary directory in the temporary directory. The base name of the temporary directory is formed by concatenating prefix, then a suitably chosen integer number, then suffix. The optional argument temp_dir indicates the temporary directory to use, defaulting to the current result of Filename.get_temp_dir_name. The temporary directory is created with permissions mode
, defaulting to 0700. The directory is guaranteed to be different from any other directory that existed when temp_dir was called.
Rename a file. rename oldpath newpath renames the file called oldpath, giving it newpath as its new name, moving it between directories if needed. If newpath already exists, its contents will be replaced with those of oldpath.
val chmod : mode:int -> ?stats:Unix.stats option -> ?op:[ `Add | `Remove | `Set ] -> t -> unit
Set permissions on the designed files. op
is `Set
by default, which sets the permissions exactly to mode
, while `Add
will add the given mode
to the current permissions and `Remove
remove them. path
will be stat'd in the `Add and `Remove case to determine the current premission, unless the already computed stats are passed as stats
to save a system call.