use std::fs::{File, OpenOptions};
use std::path::Path;
use fs4::fs_std::FileExt;
use crate::error::{ChkpttError, Result};
pub struct ProjectLock {
_file: File,
}
impl ProjectLock {
pub fn acquire(lock_dir: &Path) -> Result<ProjectLock> {
let lock_path = lock_dir.join("project.lock");
let file = OpenOptions::new()
.create(true)
.write(true)
.truncate(false)
.open(&lock_path)?;
let acquired = file.try_lock_exclusive()?;
if !acquired {
return Err(ChkpttError::LockHeld);
}
Ok(ProjectLock { _file: file })
}
}