path_ext()
and path_ext_remove()
return
correct extension and path, respectively, when multiple dots are present
in file name (@IndrajeetPatil, #452,
#453).
path_rel()
provides an informative error message
when multiple starting directory paths are specified (@IndrajeetPatil,
#454).
path_ext_set()
can now handle extensions that contain a
.
, e.g. csv.gz
(@mgirlich, #415).No user visible changes.
inputs to path_real()
and path_join()
are coerced to character for consistency with other functions (@raymondben,
#370)
fs uses libuv 1.44.2 now.
file_create()
and dir_create()
now
return the correct path when ...
arguments are used (@davidchall,
#333).
dir_create(recurse = FALSE)
now correctly handles
...
arguments (@davidchall, #333).
file_exists()
now expands ~
again
(#325).
dir_copy()
works when path
has length
>1 (#360).
Gábor Csárdi is now the maintainer.
fs is now licensed as MIT (#301).
dir_create()
now restores the previous umask
(#293)
file_exists()
is now much faster (#295)
options(fs.fs_path.shorten)
can now be used to
control how paths are shortened in tibbles. The default value is
“front”, valid alternatives are “back”, “middle” and “abbreviate”.
(#335)
options(fs.use_tibble = FALSE)
can now be used to
disable use of tibbles (#295).
path_tidy()
now works with non-UTF8 encoded paths
(@shrektan,
#321).
The libuv release used by fs was updated to 1.38.1
dir_create()
now consults the process umask so the
mode during directory creation works like mkdir
does
(#284).
fs_path
, fs_bytes
and
fs_perms
objects are now compatible with vctrs 0.3.0
(#266)
fs_path
objects now sort properly when there is a
mix of ASCII and unicode elements (#279)
file_info(..., follow = TRUE)
,
is_dir()
, and is_file()
follow relative
symlinks in non-current directories (@heavywatal, #280)
dir_map()
now grows its internal list safely, the
1.4.0 release introduced an unsafe regression (#268)
file_info()
returns a tibble if the tibble package
is installed, and subsets work when it is a data.frame
(#265)
path_real()
always fails if the file does not exist.
Thus it can no longer be used to resolve symlinks further up the path
hierarchy for files that do not yet exist. This reverts the feature
introduced in 1.2.7 (#144, #221, #231)
[[.fs_path
, [[.fs_bytes
and
[[.fs_perms
now preserve their classes after subsetting
(#254).
path_has_parent()
now recycles both the
path
and parent
arguments (#253).
path_ext_set()
now recycles both the
path
and ext
arguments (#250).
Internally fs no longer depends on Rcpp
fs now passes along CPPFLAGS
during compilation of
libuv, fixing an issue that could prevent compilation from source on
macOS Catalina. (@kevinushey, #229)
fs now compiles on alpine linux (#210)
dir_create()
now works with absolute paths and
recurse = FALSE
(#204).
dir_tree()
now works with paths that need tilde
expansion (@dmurdoch, @jennybc, #203).
file_info()
now returns file sizes with the proper
classes (“fs_bytes” and “numeric”), rather than just “fs_bytes”
(#239)
get_dirent_type()
gains a fail
argument
(@bellma-lilly,
#219)
is_dir()
, is_file()
,
is_file_empty()
and file_info()
gain a
follow
argument, to follow links and return information
about the linked file rather than the link itself (#198)
path()
now follows “tidy” recycling rules, namely
only consistent or length 1 inputs are recycled. (#238)
path()
now errors if the path given or constructed
will exceed PATH_MAX
(#233).
path_ext_set()
now works with multiple paths (@maurolepore,
#208).
Fix missed test with UTF-8 characters, which now passes on a strict Latin-1 locale.
Fix undefined behavior when casting -1 to
size_t
.
dir_ls()
, dir_map()
,
dir_walk()
, dir_info()
and
dir_tree()
gain a recurse
argument, which can
be either a TRUE
or FALSE
(as was supported
previously) or a number of levels to recurse. The previous
argument recursive
has been deprecated.dir_copy()
gains a overwrite
argument, to
overwrite a given directory (@pasipasi123, #193)dir_create()
now throws a more accurate error
message when you try to create a directory in a non-writeable location
(#196).
fs_path
objects now always show 10 characters by
default when printed in tibbles (#191).
path_file()
, path_dir()
and
path_ext()
now return normal character vectors rather than
tidy paths (#194).
path_package()
now works with paths in development
packages automatically (#175).
tests now pass successfully when run in strict Latin-1 locale
file_size()
function added as a helper for
file_info("file")$size
(#171)
is_file_empty()
function added to test for empty
files` (#171)
dir_tree()
function added to print a command line
representation of a directory tree, analogous to the unix
tree
program (#82).
Add a comparison vignette to quickly compare base R, fs and shell alternatives (@xvrdm, #168).
path_ext_set()
and file_temp()
now
treat extensions with a leading .
and those without
equally. e.g. path_ext_set("foo", ext = "bar")
and
path_ext_set("foo", ext = ".bar")
both result in
“foo.bar”
Tidy paths are now always returned with uppercase drive letters on Windows (#174).
format.bench_bytes()
now works with
str()
in R 3.5.1+ (#155).
path_ext()
, path_ext_remove()
, and
path_ext_set()
now work on paths with no extension, and
file_temp()
now prepends a .
to the file
extension (#153).
Link with -pthread by default and fix on BSD systems (#128, #145, #146).
file_chown()
can now take a group_id
parameter as character (@cderv, #162).
Parameter browser
in file_show()
now
works as described in the documentation (@GegznaV, #154).
path_real()
now works even if the file does not
exist, but there are symlinks further up the path hierarchy
(#144).
colourise_fs_path()
now returns paths uncolored if
the colors argument / LS_COLORS
is malformed
(#135).
This is a small bugfix only release.
file_move()
now fall back to copying, then removing
files when moving files between devices (which would otherwise fail)
(#131, https://github.com/r-lib/usethis/issues/438).
Fix for a double free when using warn = TRUE
(#132)
New path_wd()
generates paths from the current
working directory (#122).
New path_has_parent()
determines if a path has a
given parent (#116).
New file_touch()
used to change access and
modification times for a file (#98).
dir_ls()
, dir_map()
,
dir_walk()
, dir_info()
and
file_info()
gain a fail
parameter, to signal
warnings rather than errors if they are called on a path which is
unavailable due to permissions or locked resources (#105).
path_tidy()
now always includes a trailing slash for
the windows root directory, e.g. C:/
(#124).
path_ext()
, path_ext_set()
and
path_ext_remove()
now handle paths with non-ASCII
characters (#120).
fs_path
objects now print (without colors) even if
the user does not have permission to stat them (#121).
compatibility with upcoming gcc 8 based Windows toolchain (#119)
Experimental support for /
and +
methods for fs_path
objects (#110).
file_create()
and dir_create()
now take
...
, which is passed to path()
to make
construction a little nicer (#80).
path_ext()
, path_ext_set()
and
path_ext_remove()
now handle paths with directories
including hidden files without extensions (#92).
file_copy()
now copies files into the directory if
the target is a directory (#102).
fs_path
fs_bytes
and
fs_perm
objects now use methods::setOldClass()
so that S4 dispatch to their base classes works as intended
(#91).
Fix allocation bug in path_exists()
using
delete []
when we should have used
free()
.
path_abs()
gains a start
argument, to
specify where the absolute path should be calculated from (#87).path_ext()
now returns character()
if
given 0 length inputs (#89)
Fix for a memory issue reported by ASAN and valgrind.
path_expand()
and path_home()
now use
USERPROFILE
or HOMEDRIVE
/HOMEPATH
as the user home directory on Windows. This differs from the definition
used in path.expand()
but is consistent with definitions
from other programming environments such as python and rust. This is
also more compatible with external tools such as git and ssh, both of
which put user-level files in USERPROFILE
by default. To
mimic R’s (and previous) behavior there are functions
path_expand_r()
and path_home_r()
.
Handling missing values are more consistent. In general
is_*
functions always return FALSE
for missing
values, path_*
functions always propagate NA values (NA
inputs become NA outputs) and dir_*
file_*
and
link_*
functions error with NA inputs.
fs functions now preserve tildes in their outputs. Previously
paths were always returned with tildes expanded. Users can use
path_expand()
to expand tildes if desired.
path_norm()
(#63).file_chmod()
is now vectorized over both of its
arguments (#71).link_create()
now fails silently if an identical link
already exists (#77).path_package()
function created as an analog to
system.file()
which always fails if the package or file
does not exist (#75)Tidy paths no longer expand ~
.
Filesystem modification functions now error for NA inputs. (#48)
path()
now returns 0 length output if given any 0
length inputs (#54).
dir_delete()
now correctly expands paths
(#47).
dir_delete()
now correctly deletes hidden files and
directories (#46).
link_path()
now checks for an error before trying to
make a string, avoiding a crash (#43).
libuv return paths now marked as UTF-8 strings in C code, fixing encoding issues on windows. (#42)
dir_copy()
now copies the directory inside the
target if the target is a directory (#51).
dir_copy()
now works correctly with absolute paths
and no longer removes files when overwrite = TRUE
.
NEWS.md
file to track changes to the
package.