diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-06-23 11:24:37 -0400 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-06-23 11:24:37 -0400 |
commit | 7cfa5164233a84605cfe59e93470f7770301f286 (patch) | |
tree | 135a59c253d61af3469432877f7c98bf98b3e1c2 /src/fs | |
parent | bb758478e5c52bd9cee80d5eb7e92a394b07ae26 (diff) |
fix broken symlinks not appearing
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/entry.rs | 1 | ||||
-rw-r--r-- | 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(); |