From 36ad312ae16f75deea3ab711a237cc3ff7cb001f Mon Sep 17 00:00:00 2001 From: hkctkuy Date: Sat, 23 Dec 2023 15:09:12 +0300 Subject: [PATCH] Add bad rep handler --- casr/src/bin/casr-cluster.rs | 23 ++++++++--------------- casr/src/util.rs | 22 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/casr/src/bin/casr-cluster.rs b/casr/src/bin/casr-cluster.rs index db60dcd5..cb2c395f 100644 --- a/casr/src/bin/casr-cluster.rs +++ b/casr/src/bin/casr-cluster.rs @@ -60,18 +60,9 @@ fn make_clusters( // Get casreps with stacktraces and crashlines let (casreps, badreports) = util::reports_from_paths(casreps, jobs); + // Handle bad reports if !badreports.is_empty() { - fs::create_dir_all(format!("{}/clerr", &outpath.display()))?; - for report in badreports { - fs::copy( - &report, - format!( - "{}/clerr/{}", - &outpath.display(), - &report.file_name().unwrap().to_str().unwrap() - ), - )?; - } + util::save_badreports(badreports, format!("{}/clerr", &outpath.display()))?; } if casreps.len() < 2 { @@ -417,10 +408,12 @@ fn update_clusters( let (moved, removed) = merge_clusters(&mut clusters, &mut deviant_clusters, oldpath, dedup)?; // Adjust stat - added += moved; - deduplicated += removed; - before = 0; // Impossible to know (proofed by @hkctkuy) - after -= moved + removed; + if moved != 0 || removed != 0 { + added += moved; + deduplicated += removed; + before = 0; // Impossible to know (proofed by @hkctkuy) + after -= moved + removed; + } } // Save deviant clusters util::save_clusters(&deviant_clusters, oldpath)?; diff --git a/casr/src/util.rs b/casr/src/util.rs index 809505a5..cc2a84f6 100644 --- a/casr/src/util.rs +++ b/casr/src/util.rs @@ -512,7 +512,7 @@ pub fn cluster_from_dir(dir: &Path, jobs: usize) -> Result { Ok(Cluster::new(i, Vec::new(), stacktraces, crashlines)) } -/// Save clusters to directory +/// Save clusters to given directory /// /// # Arguments /// @@ -536,3 +536,23 @@ pub fn save_clusters(clusters: &HashMap, dir: &Path) -> Result<( } Ok(()) } + +/// Save invalid CASR reports to given directory +/// +/// # Arguments +/// +/// * `badreports` - A vector of invalid CASR reports +/// +/// * `dir` - out directory +pub fn save_badreports(badreports: Vec, dir: String) -> Result<()> { + if !Path::new(&dir).exists() { + fs::create_dir_all(&dir)?; + } + for report in badreports { + fs::copy( + &report, + format!("{}/{}", dir, &report.file_name().unwrap().to_str().unwrap()), + )?; + } + Ok(()) +}