use super::{Error, Result};
use std::fs::{File, OpenOptions};
use std::io::Write;
use std::path::Path;
pub(crate) fn lock_dir(dir: &Path) -> Result<File> {
std::fs::create_dir_all(dir)?;
graph_r::fsio::try_lock(&dir.join(graph_r::store::LOCK_FILE))?
.ok_or(Error::Graph(graph_r::Error::Locked))
}
pub(crate) fn write_atomic(path: &Path, parts: &[&[u8]]) -> Result<()> {
Ok(graph_r::fsio::write_atomic(path, parts)?)
}
pub(crate) fn append(path: &Path, parts: &[&[u8]]) -> Result<()> {
let mut f = OpenOptions::new().append(true).open(path)?;
for p in parts {
f.write_all(p)?;
}
f.sync_all()?;
Ok(())
}