mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 06:30:08 +02:00
Accept filenames in other plugin management commands (#12639)
# Description This allows the following commands to all accept a filename instead of a plugin name: - `plugin use` - `plugin rm` - `plugin stop` Slightly complicated because of the need to also check against `NU_PLUGIN_DIRS`, but I also fixed some issues with that at the same time Requested by @fdncred # User-Facing Changes The new commands are updated as described. # Tests + Formatting Tests for `NU_PLUGIN_DIRS` handling also made more robust. - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting - [ ] Double check new docs to make sure they describe this capability
This commit is contained in:
@ -92,3 +92,35 @@ where
|
||||
let path = expand_tilde(path);
|
||||
expand_ndots(path)
|
||||
}
|
||||
|
||||
/// Attempts to canonicalize the path against the current directory. Failing that, if
|
||||
/// the path is relative, it attempts all of the dirs in `dirs`. If that fails, it returns
|
||||
/// the original error.
|
||||
pub fn locate_in_dirs<I, P>(
|
||||
filename: impl AsRef<Path>,
|
||||
cwd: impl AsRef<Path>,
|
||||
dirs: impl FnOnce() -> I,
|
||||
) -> std::io::Result<PathBuf>
|
||||
where
|
||||
I: IntoIterator<Item = P>,
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let filename = filename.as_ref();
|
||||
let cwd = cwd.as_ref();
|
||||
match canonicalize_with(filename, cwd) {
|
||||
Ok(path) => Ok(path),
|
||||
Err(err) => {
|
||||
// Try to find it in `dirs` first, before giving up
|
||||
let mut found = None;
|
||||
for dir in dirs() {
|
||||
if let Ok(path) =
|
||||
canonicalize_with(dir, cwd).and_then(|dir| canonicalize_with(filename, dir))
|
||||
{
|
||||
found = Some(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
found.ok_or(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ mod helpers;
|
||||
mod tilde;
|
||||
mod util;
|
||||
|
||||
pub use expansions::{canonicalize_with, expand_path_with, expand_to_real_path};
|
||||
pub use expansions::{canonicalize_with, expand_path_with, expand_to_real_path, locate_in_dirs};
|
||||
pub use helpers::{config_dir, config_dir_old, home_dir};
|
||||
pub use tilde::expand_tilde;
|
||||
pub use util::trim_trailing_slash;
|
||||
|
Reference in New Issue
Block a user