Files
codeql/rust/extractor/src/archive.rs
2025-02-12 10:27:29 +01:00

29 lines
745 B
Rust

use codeql_extractor::file_paths;
use std::fs;
use std::path::{Path, PathBuf};
use tracing::{debug, warn};
pub struct Archiver {
pub root: PathBuf,
}
impl Archiver {
pub fn archive(&self, source: &Path) {
if let Err(e) = self.try_archive(source) {
warn!("unable to archive {}: {e}", source.display());
}
}
fn try_archive(&self, source: &Path) -> std::io::Result<()> {
let dest = file_paths::path_for(&self.root, source, "");
if fs::metadata(&dest).is_ok() {
return Ok(());
}
let parent = dest.parent().unwrap();
fs::create_dir_all(parent)?;
fs::copy(source, dest)?;
debug!("archived {}", source.display());
Ok(())
}
}