Skip to content

Commit 97baaa4

Browse files
committed
chore(util): Make set_file_permissions work for directories as well
1 parent a6c2194 commit 97baaa4

1 file changed

Lines changed: 11 additions & 15 deletions

File tree

src/util/fs.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,48 +118,44 @@ pub fn move_file<S: AsRef<Path>, D: AsRef<Path>>(source: S, destination: D) -> c
118118
Ok(())
119119
}
120120

121-
/// Set file owner.
121+
/// Set file/directory owner and permissions.
122122
#[cfg(unix)]
123123
pub fn set_file_permissions<S: AsRef<Path>>(
124124
source: S,
125125
uid: Option<u32>,
126126
gid: Option<u32>,
127127
mode: Option<u32>,
128128
) -> crate::Result<()> {
129-
unix::fs::chown(&source, uid, gid)?;
129+
let path = source.as_ref();
130+
131+
unix::fs::chown(path, uid, gid)?;
130132
match (uid, gid) {
131133
(Some(owner), Some(group)) => {
132134
log::info!(
133135
"Changed owner/group for {} to {owner}:{group}.",
134-
source.as_ref().display()
136+
path.display()
135137
);
136138
}
137139
(Some(owner), None) => {
138-
log::info!(
139-
"Changed owner for {} to {owner}.",
140-
source.as_ref().display()
141-
);
140+
log::info!("Changed owner for {} to {owner}.", path.display());
142141
}
143142
(None, Some(group)) => {
144-
log::info!(
145-
"Changed group for {} to {group}.",
146-
source.as_ref().display()
147-
);
143+
log::info!("Changed group for {} to {group}.", path.display());
148144
}
149145
_ => (),
150146
}
151147

152148
if let Some(new_mode) = mode {
153-
let file = fs::File::open(&source)?;
154-
let permissions = file.metadata()?.permissions();
149+
let metadata = fs::metadata(path)?;
150+
let permissions = metadata.permissions();
155151
let old_mode = permissions.mode();
156152

157153
if permissions.mode() != new_mode {
158154
let permissions = fs::Permissions::from_mode(new_mode);
159-
file.set_permissions(permissions)?;
155+
fs::set_permissions(path, permissions)?; // ← Works on paths (files & directories)
160156
log::info!(
161157
"Permission for {} changed from {old_mode:o} to {new_mode:o}.",
162-
source.as_ref().display()
158+
path.display()
163159
);
164160
}
165161
}

0 commit comments

Comments
 (0)