gitdataai/libs/git/hook/sync/gc.rs
2026-04-14 19:02:01 +08:00

30 lines
912 B
Rust

use crate::GitError;
use crate::hook::sync::HookMetaDataSync;
use std::process::Command;
impl HookMetaDataSync {
pub async fn run_gc(&self) -> Result<(), GitError> {
let storage_path = self.repo.storage_path.clone();
let logger = self.logger.clone();
tokio::task::spawn_blocking(move || {
let status = Command::new("git")
.arg("-C")
.arg(&storage_path)
.arg("gc")
.arg("--auto")
.arg("--quiet")
.status()
.map_err(|e| GitError::IoError(format!("git gc failed: {}", e)))?;
if !status.success() {
slog::warn!(logger, "git gc exited with {:?}", status.code());
}
Ok::<(), GitError>(())
})
.await
.map_err(|e| GitError::Internal(format!("spawn_blocking join error: {}", e)))?
}
}