diff --git a/crates/binstalk-manifests/src/helpers.rs b/crates/binstalk-manifests/src/helpers.rs index 029564c9..4b2f3f8e 100644 --- a/crates/binstalk-manifests/src/helpers.rs +++ b/crates/binstalk-manifests/src/helpers.rs @@ -1,7 +1,9 @@ use std::{fs, io, path::Path}; -/// Returned file is readable and writable. -pub(crate) fn create_if_not_exist(path: &Path) -> io::Result { +use fs_lock::FileLock; + +/// Return exclusively locked file that is readable and writable. +pub(crate) fn create_if_not_exist(path: &Path) -> io::Result { let mut options = fs::File::options(); options.read(true).write(true); @@ -10,4 +12,6 @@ pub(crate) fn create_if_not_exist(path: &Path) -> io::Result { .create_new(true) .open(path) .or_else(|_| options.open(path)) + .and_then(FileLock::new_exclusive) + .map(|file_lock| file_lock.set_file_path(path)) }