mirror of
https://github.com/nushell/nushell
synced 2025-01-15 14:44:14 +00:00
a7b281292d
It turns out that my previous PR, https://github.com/nushell/nushell/pull/11999, didn't properly canonicalize `$nu.default-config-dir` in a scenario where `XDG_CONFIG_HOME` (or the equivalent on each platform) was a symlink. To remedy that, this PR makes `nu_path::config_dir()` return a canonicalized path. This probably shouldn't break anything (except maybe tests relying on the old behavior), since the canonical path will be equivalent to non-canonical paths. # User-Facing Changes A user may get a path with symlinks resolved and `..`s replaced where they previously didn't. I'm not sure where this would happen, though, and anyway, the canonical path is probably the "correct" thing to present to the user. We're using `omnipath` to make the path presentable to the user on Windows, so there's no danger of someone getting an path with `\\?` there. # Tests + Formatting The tests for config files have been updated to run the binary using the `Director` so that it has access to the `XDG_CONFIG_HOME`/`HOME` environment variables to be able to change the config directory.
30 lines
785 B
Rust
30 lines
785 B
Rust
#[cfg(windows)]
|
|
use omnipath::WinPathExt;
|
|
use std::path::PathBuf;
|
|
|
|
pub fn home_dir() -> Option<PathBuf> {
|
|
dirs_next::home_dir()
|
|
}
|
|
|
|
pub fn config_dir() -> Option<PathBuf> {
|
|
dirs_next::config_dir().map(|path| canonicalize(&path).unwrap_or(path))
|
|
}
|
|
|
|
#[cfg(windows)]
|
|
pub fn canonicalize(path: &std::path::Path) -> std::io::Result<std::path::PathBuf> {
|
|
path.canonicalize()?.to_winuser_path()
|
|
}
|
|
#[cfg(not(windows))]
|
|
pub fn canonicalize(path: &std::path::Path) -> std::io::Result<std::path::PathBuf> {
|
|
path.canonicalize()
|
|
}
|
|
|
|
#[cfg(windows)]
|
|
pub fn simiplified(path: &std::path::Path) -> PathBuf {
|
|
path.to_winuser_path()
|
|
.unwrap_or_else(|_| path.to_path_buf())
|
|
}
|
|
#[cfg(not(windows))]
|
|
pub fn simiplified(path: &std::path::Path) -> PathBuf {
|
|
path.to_path_buf()
|
|
}
|