diff --git a/src/backend/ignore.rs b/src/backend/ignore.rs index 8cb4ef6..65f372e 100644 --- a/src/backend/ignore.rs +++ b/src/backend/ignore.rs @@ -183,7 +183,7 @@ fn map_entry(entry: DirEntry, with_atime: bool, cache: &UsersCache) -> Result<(P mtime, atime, ctime, - mode, + mode: Some(mode), uid: Some(uid), gid: Some(gid), user, diff --git a/src/backend/local.rs b/src/backend/local.rs index 620a022..61068bd 100644 --- a/src/backend/local.rs +++ b/src/backend/local.rs @@ -240,8 +240,10 @@ impl LocalBackend { pub fn set_permission(&self, item: impl AsRef, meta: &Metadata) -> Result<()> { let filename = self.path.join(item); - let mode = map_mode_from_go(*meta.mode()); - std::fs::set_permissions(&filename, fs::Permissions::from_mode(mode))?; + if let Some(mode) = meta.mode() { + let mode = map_mode_from_go(*mode); + std::fs::set_permissions(&filename, fs::Permissions::from_mode(mode))?; + } Ok(()) } diff --git a/src/backend/node.rs b/src/backend/node.rs index 54b3a65..28f1a19 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -45,8 +45,8 @@ pub enum NodeType { #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, Getters)] pub struct Metadata { - #[serde(default, skip_serializing_if = "is_default")] - pub mode: u32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub mtime: Option>, #[serde(default, skip_serializing_if = "Option::is_none")]