show contents for symlink folders(fix #345)

This commit is contained in:
Abin Simon 2020-08-22 00:13:03 +05:30
parent 87d1520763
commit cffda506f1
3 changed files with 24 additions and 2 deletions

View file

@ -66,7 +66,10 @@ fn inner_display_grid(
// print the files first.
for meta in metas {
// Maybe skip showing the directory meta now; show its contents later.
if let (true, FileType::Directory { .. }) = (skip_dirs, meta.file_type) {
if skip_dirs
&& (matches!(meta.file_type, FileType::Directory{..})
|| matches!(meta.file_type, FileType::SymLink { is_dir: true }))
{
continue;
}
@ -221,7 +224,10 @@ fn should_display_folder_path(depth: usize, metas: &[Meta]) -> bool {
} else {
let folder_number = metas
.iter()
.filter(|x| matches!(x.file_type, FileType::Directory { .. }))
.filter(|x| {
matches!(x.file_type, FileType::Directory { .. })
|| matches!(x.file_type, FileType::SymLink { is_dir: true })
})
.count();
folder_number > 1 || folder_number < metas.len()

View file

@ -63,6 +63,7 @@ impl Meta {
match self.file_type {
FileType::Directory { .. } => (),
FileType::SymLink { is_dir: true } => (),
_ => return Ok(None),
}

View file

@ -204,6 +204,21 @@ fn test_dereference_link_right_type_and_no_link() {
.stdout(predicate::str::contains(link_icon).not());
}
#[cfg(unix)]
#[test]
fn test_show_folder_content_of_symlink() {
let dir = tempdir();
dir.child("target").child("inside").touch().unwrap();
let link = dir.path().join("link");
fs::symlink("target", &link).unwrap();
cmd()
.arg(link)
.assert()
.stdout(predicate::str::starts_with("link").not())
.stdout(predicate::str::starts_with("inside"));
}
fn cmd() -> Command {
Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap()
}