6.9 API for Relative Paths
The Racket installation tree can usually be moved around the filesystem. To support this, care must be taken to avoid absolute paths. The following two APIs cover two aspects of this: a way to convert a path to a value that is relative to the "collets" tree, and a way to display such paths (e.g., in error messages).
6.9.1 Representing Collection-Based Paths
(require setup/collects) | package: base |
procedure
(path->collects-relative path #:cache cache) → (or/c path-string? (cons/c 'collects (listof bytes?))) path : path-string? cache : (or/c #f (and/c hash? (not/c immutable?)))
The cache argument is used with path->pkg, if needed.
procedure
(collects-relative->path rel) → path-string?
rel :
(or/c path-string? (cons/c 'collects bytes? bytes? (listof bytes?)))
procedure
(path->module-path path #:cache cache)
→ (or/c path-string? module-path?) path : path-string? cache : (or/c #f (and/c hash? (not/c imutable?)))
6.9.2 Representing Paths Relative to "collects"
(require setup/main-collects) | package: base |
procedure
(path->main-collects-relative path)
→ (or/c path? (cons/c 'collects (listof bytes?))) path : (or/c bytes? path-string?)
The path argument should be a complete path. Applying simplify-path before path->main-collects-relative is usually a good idea.
For historical reasons, path can be a byte string, which is converted to a path using bytes->path.
See also collects-relative->path.
procedure
(main-collects-relative->path rel) → path?
rel :
(or/c bytes? path-string? (cons/c 'collects (listof bytes?)))
For historical reasons, if rel is any kind of value other than specified in the contract above, it is returned as-is.
6.9.3 Displaying Paths Relative to a Common Root
(require setup/path-to-relative) | package: base |
procedure
(path->relative-string/library path [ default #:cache cache]) → any/c path : path-string?
default : (or/c (-> path-string? any/c) any/c) = (lambda (x) (if (path? x) (path->string x) x)) cache : (or/c #f (and/c hash? (not/c immutable?))) = #f
If cache is not #f, it is used as a cache argument for pkg->path to speed up detection and conversion of package paths.
If the path is not absolute, or if it is not in any of these, it is returned as-is (converted to a string if needed). If default is given, it specifies the return value instead: it can be a procedure that is applied onto the path to get the result, or the result itself.
Note that this function can return a non-string only if default is given and it does not return a string.
procedure
(path->relative-string/setup path [ default #:cache cache]) → any/c path : path-string?
default : (or/c (-> path-string? any/c) any/c) = (lambda (x) (if (path? x) (path->string x) x)) cache : (or/c #f (and/c hash? (not/c immutable?))) = #f
procedure
(make-path->relative-string dirs [default])
→ (path-string? any/c . -> . any) dirs : (listof (cons (-> path?) string?))
default : (or/c (-> path-string? any/c) any/c) = (lambda (x) (if (path? x) (path->string x) x))
The dirs argument determines the prefix substitutions. It must be an association list mapping a path-producing thunk to a prefix string for paths in the specified path.
default determines the default for the resulting function (which can always be overridden by an additional argument to this function).