More informative error messages when "rm" fails (#2109)

* add a nicer error message

* small fix to message and remove log
This commit is contained in:
Arash Outadi 2020-07-04 18:03:12 -07:00 committed by GitHub
parent bbc5a28fe9
commit 8ea2307815
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,6 +15,7 @@ use crate::utils::FileStructure;
use rustyline::completion::FilenameCompleter;
use rustyline::hint::{Hinter, HistoryHinter};
use std::collections::HashMap;
use std::io::{Error, ErrorKind};
use std::path::{Path, PathBuf};
#[cfg(unix)]
@ -587,25 +588,27 @@ impl Shell for FilesystemShell {
.map(|val| val.is_true())
.unwrap_or(false);
result = if _trash.item || (rm_always_trash && !_permanent.item) {
trash::remove(&f).map_err(|_| f.to_string_lossy())
trash::remove(&f).map_err(|e: trash::Error| {
Error::new(ErrorKind::Other, format!("{:?}", e))
})
} else if metadata.is_file() {
std::fs::remove_file(&f).map_err(|_| f.to_string_lossy())
std::fs::remove_file(&f)
} else {
std::fs::remove_dir_all(&f).map_err(|_| f.to_string_lossy())
std::fs::remove_dir_all(&f)
};
}
#[cfg(not(feature = "trash-support"))]
{
result = if metadata.is_file() {
std::fs::remove_file(&f).map_err(|_| f.to_string_lossy())
std::fs::remove_file(&f)
} else {
std::fs::remove_dir_all(&f).map_err(|_| f.to_string_lossy())
std::fs::remove_dir_all(&f)
};
}
if let Err(e) = result {
let msg = format!("Could not delete {:}", e);
Err(ShellError::labeled_error(msg, e, tag))
let msg = format!("Could not delete because: {:}", e);
Err(ShellError::labeled_error(msg, e.to_string(), tag))
} else {
let val = format!("deleted {:}", f.to_string_lossy()).into();
Ok(ReturnSuccess::Value(val))