automatically find coverage file

pull/10758/head
Dustin Lagoy 2024-05-15 06:45:30 -07:00 committed by Dustin Lagoy
parent c81ae710b5
commit 8a4c19ceb9
3 changed files with 21 additions and 3 deletions

1
Cargo.lock generated
View File

@ -1567,6 +1567,7 @@ dependencies = [
"tokio-stream", "tokio-stream",
"toml", "toml",
"url", "url",
"walkdir",
] ]
[[package]] [[package]]

View File

@ -52,6 +52,7 @@ log = "~0.4"
parking_lot.workspace = true parking_lot.workspace = true
thiserror.workspace = true thiserror.workspace = true
quick-xml = { version = "0.31.0", features = ["serialize"] } quick-xml = { version = "0.31.0", features = ["serialize"] }
walkdir = "2.5.0"
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]
clipboard-win = { version = "5.4", features = ["std"] } clipboard-win = { version = "5.4", features = ["std"] }

View File

@ -4,6 +4,7 @@ use std::collections::HashMap;
use std::fs::File; use std::fs::File;
use std::io::BufReader; use std::io::BufReader;
use std::time::SystemTime; use std::time::SystemTime;
use walkdir;
#[derive(Debug)] #[derive(Debug)]
pub struct Coverage { pub struct Coverage {
@ -81,9 +82,9 @@ struct Line {
/// function will return None if the coverage file is not found, invalid, does /// function will return None if the coverage file is not found, invalid, does
/// not contain the document, or if it is out of date compared to the document. /// not contain the document, or if it is out of date compared to the document.
pub fn get_coverage(document_path: &std::path::PathBuf) -> Option<FileCoverage> { pub fn get_coverage(document_path: &std::path::PathBuf) -> Option<FileCoverage> {
let coverage_path = std::env::var("HELIX_COVERAGE_FILE").ok()?; let coverage_path = find_coverage_file()?;
log::debug!("coverage file is {}", coverage_path); log::debug!("coverage file is {:?}", coverage_path);
let coverage = read_cobertura_coverage(&std::path::PathBuf::from(coverage_path))?; let coverage = read_cobertura_coverage(&coverage_path)?;
log::debug!("coverage is valid"); log::debug!("coverage is valid");
log::debug!("document path: {:?}", document_path); log::debug!("document path: {:?}", document_path);
@ -106,6 +107,21 @@ pub fn get_coverage(document_path: &std::path::PathBuf) -> Option<FileCoverage>
} }
} }
fn find_coverage_file() -> Option<std::path::PathBuf> {
if let Some(coverage_path) = std::env::var("HELIX_COVERAGE_FILE").ok() {
return Some(std::path::PathBuf::from(coverage_path));
}
for entry in walkdir::WalkDir::new(".")
.into_iter()
.filter_map(|e| e.ok())
{
if entry.file_name() == "coverage.xml" || entry.file_name() == "cobertura.xml" {
return Some(entry.path().to_path_buf());
}
}
return None;
}
fn read_cobertura_coverage(path: &std::path::PathBuf) -> Option<Coverage> { fn read_cobertura_coverage(path: &std::path::PathBuf) -> Option<Coverage> {
let file = File::open(path).ok()?; let file = File::open(path).ok()?;
let metadata = file.metadata().ok()?; let metadata = file.metadata().ok()?;