33 lines
833 B
Rust
33 lines
833 B
Rust
use std::fs;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
/// The [`PathBuf`] which points to a `*.keep` file, which should correspond to
|
|
/// a packfile.
|
|
///
|
|
/// Upon drop, it attempts to remove the [`PathBuf`] to release the lock on the
|
|
/// packfile index, allowing it to be garbage collected.
|
|
#[derive(Clone, Debug)]
|
|
pub struct Keepfile {
|
|
path: PathBuf,
|
|
}
|
|
|
|
impl Keepfile {
|
|
pub fn new<P: AsRef<Path>>(path: P) -> Option<Self> {
|
|
let path = path.as_ref();
|
|
match path.extension() {
|
|
Some(ext) if ext == "keep" => Some(Self {
|
|
path: path.to_path_buf(),
|
|
}),
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Drop for Keepfile {
|
|
fn drop(&mut self) {
|
|
if let Err(e) = fs::remove_file(&self.path) {
|
|
log::warn!("Failed to remove {:?}: {e}", self.path);
|
|
}
|
|
}
|
|
}
|