Deprecate std::fs::soft_link in favor of platform-specific versions
On Windows, when you create a symbolic link you must specify whether it points to a directory or a file, even if it is created dangling, while on Unix, the same symbolic link could point to a directory, a file, or nothing at all. Furthermore, on Windows special privilege is necessary to use a symbolic link, while on Unix, you can generally create a symbolic link in any directory you have write privileges to. This means that it is unlikely to be able to use symbolic links purely portably; anyone who uses them will need to think about the cross platform implications. This means that using platform-specific APIs will make it easier to see where code will need to differ between the platforms, rather than trying to provide some kind of compatibility wrapper. Furthermore, `soft_link` has no precedence in any other API, so to avoid confusion, move back to the more standard `symlink` terminology. Create a `std::os::unix::symlink` for the Unix version that is destination type agnostic, as well as `std::os::windows::{symlink_file, symlink_dir}` for Windows. Because this is a stable API, leave a compatibility wrapper in `std::fs::soft_link`, which calls `symlink` on Unix and `symlink_file` on Windows, preserving the existing behavior of `soft_link`.
This commit is contained in:
parent
a691f1eefe
commit
3cc84efcdd
5 changed files with 104 additions and 8 deletions
|
@ -700,7 +700,7 @@ pub fn remove_file<P: AsRef<Path>>(path: P) -> io::Result<()> {
|
|||
/// Given a path, query the file system to get information about a file,
|
||||
/// directory, etc.
|
||||
///
|
||||
/// This function will traverse soft links to query information about the
|
||||
/// This function will traverse symbolic links to query information about the
|
||||
/// destination file.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -814,9 +814,13 @@ pub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(src: P, dst: Q) -> io::Result<(
|
|||
fs_imp::link(src.as_ref(), dst.as_ref())
|
||||
}
|
||||
|
||||
/// Creates a new soft link on the filesystem.
|
||||
/// Creates a new symbolic link on the filesystem.
|
||||
///
|
||||
/// The `dst` path will be a soft link pointing to the `src` path.
|
||||
/// The `dst` path will be a symbolic link pointing to the `src` path.
|
||||
/// On Windows, this will be a file symlink, not a directory symlink;
|
||||
/// for this reason, the platform-specific `std::os::unix::fs::symlink`
|
||||
/// and `std::os::windows::fs::{symlink_file, symlink_dir}` should be
|
||||
/// used instead to make the intent explicit.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
@ -828,17 +832,20 @@ pub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(src: P, dst: Q) -> io::Result<(
|
|||
/// # Ok(())
|
||||
/// # }
|
||||
/// ```
|
||||
#[deprecated(since = "1.0.0",
|
||||
reason = "replaced with std::os::unix::fs::symlink and \
|
||||
std::os::windows::fs::{symlink_file, symlink_dir}")]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn soft_link<P: AsRef<Path>, Q: AsRef<Path>>(src: P, dst: Q) -> io::Result<()> {
|
||||
fs_imp::symlink(src.as_ref(), dst.as_ref())
|
||||
}
|
||||
|
||||
/// Reads a soft link, returning the file that the link points to.
|
||||
/// Reads a symbolic link, returning the file that the link points to.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This function will return an error on failure. Failure conditions include
|
||||
/// reading a file that does not exist or reading a file that is not a soft
|
||||
/// reading a file that does not exist or reading a file that is not a symbolic
|
||||
/// link.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -931,8 +938,8 @@ pub fn remove_dir<P: AsRef<Path>>(path: P) -> io::Result<()> {
|
|||
/// Removes a directory at this path, after removing all its contents. Use
|
||||
/// carefully!
|
||||
///
|
||||
/// This function does **not** follow soft links and it will simply remove the
|
||||
/// soft link itself.
|
||||
/// This function does **not** follow symbolic links and it will simply remove the
|
||||
/// symbolic link itself.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue