diff options
author | Lars Wirzenius <liw@liw.fi> | 2020-12-12 11:44:50 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2020-12-12 11:44:50 +0200 |
commit | 79183fab131b0e426abf647472469aed160e66f7 (patch) | |
tree | 156f23311b1e2ceabb069dd46bd4af871f5005d3 /src | |
parent | 0e3bec381d9c1a04448b62483d1635961ca3b3d3 (diff) | |
download | summain-rs-79183fab131b0e426abf647472469aed160e66f7.tar.gz |
feat: support symbolic links
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -31,8 +31,8 @@ use serde::Serialize; use sha2::{Digest, Sha256}; -use std::fs::symlink_metadata; use std::fs::File; +use std::fs::{read_link, symlink_metadata}; use std::io::{BufReader, Read}; use std::os::linux::fs::MetadataExt; use std::path::{Path, PathBuf}; @@ -50,6 +50,7 @@ pub struct ManifestEntry { nlink: u64, size: Option<u64>, sha256: Option<String>, + target: Option<PathBuf>, } impl ManifestEntry { @@ -66,6 +67,11 @@ impl ManifestEntry { } else { None }; + let target = if m.file_type().is_symlink() { + Some(read_link(path)?) + } else { + None + }; Ok(Self { path: path.to_path_buf(), mode: m.st_mode(), @@ -74,6 +80,7 @@ impl ManifestEntry { nlink: m.st_nlink(), size: if m.is_dir() { None } else { Some(m.st_size()) }, sha256: hash, + target, }) } } |