This repository has no description
828 B
31 lines
1use std::collections::HashSet;
2use std::path::{Path, PathBuf};
3use std::time::Duration;
4
5use knot_types::Oid;
6
7use crate::fsio;
8use crate::{FileCount, MaintError, ObjectCount, PruneReport};
9
10pub fn run(
11 objects_dir: &Path,
12 reachable: &HashSet<Oid>,
13 loose: &[(Oid, PathBuf)],
14 grace: Duration,
15) -> Result<PruneReport, MaintError> {
16 let removed = loose
17 .iter()
18 .filter(|(oid, _)| !reachable.contains(oid))
19 .filter(|(_, path)| fsio::older_than(path, grace))
20 .filter(|(_, path)| std::fs::remove_file(path).is_ok())
21 .count();
22 if removed > 0 {
23 knot_resource::fsync_path(objects_dir)?;
24 }
25 Ok(PruneReport {
26 removed: FileCount::new(removed),
27 removed_packs: FileCount::new(0),
28 crufted: ObjectCount::new(0),
29 ran: true,
30 })
31}