From 7cfa5164233a84605cfe59e93470f7770301f286 Mon Sep 17 00:00:00 2001 From: Jeff Zhao Date: Wed, 23 Jun 2021 11:24:37 -0400 Subject: fix broken symlinks not appearing --- src/fs/entry.rs | 1 + src/fs/metadata.rs | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/fs/entry.rs b/src/fs/entry.rs index 1069081..082a6c0 100644 --- a/src/fs/entry.rs +++ b/src/fs/entry.rs @@ -20,6 +20,7 @@ impl JoshutoDirEntry { let path = direntry.path(); let metadata = JoshutoMetadata::from(&path)?; + let name = direntry .file_name() .as_os_str() diff --git a/src/fs/metadata.rs b/src/fs/metadata.rs index b3f6492..60e81f8 100644 --- a/src/fs/metadata.rs +++ b/src/fs/metadata.rs @@ -34,17 +34,24 @@ impl JoshutoMetadata { use std::os::unix::fs::MetadataExt; let symlink_metadata = fs::symlink_metadata(path)?; - let metadata = fs::metadata(path)?; - - let _len = metadata.len(); - let _modified = metadata.modified()?; - let _permissions = metadata.permissions(); - let (_file_type, _directory_size) = if metadata.file_type().is_dir() { - let _directory_size = fs::read_dir(path).map(|s| s.count()).ok(); - (FileType::Directory, _directory_size) - } else { - (FileType::File, None) + let metadata = fs::metadata(path); + let (_len, _modified, _permissions) = match metadata.as_ref() { + Ok(m) => (m.len(), m.modified()?, m.permissions()), + Err(_) => ( + symlink_metadata.len(), + symlink_metadata.modified()?, + symlink_metadata.permissions(), + ), }; + + let (_file_type, _directory_size) = match metadata.as_ref() { + Ok(m) if m.file_type().is_dir() => { + let _directory_size = fs::read_dir(path).map(|s| s.count()).ok(); + (FileType::Directory, _directory_size) + } + _ => (FileType::File, None), + }; + let _link_type = match symlink_metadata.file_type().is_symlink() { true => { let mut link = "".to_string(); -- cgit v1.2.3