Add error messages

This commit is contained in:
Charles Marsh 2022-08-09 13:43:21 -04:00
parent bd2e159ceb
commit 92238b4138
5 changed files with 37 additions and 25 deletions

View File

@ -3,13 +3,11 @@ use std::time::Instant;
use anyhow::Result; use anyhow::Result;
use clap::{Parser, ValueHint}; use clap::{Parser, ValueHint};
use log::{error, info};
use log::info;
use rayon::prelude::*; use rayon::prelude::*;
use walkdir::{DirEntry, WalkDir};
use rust_python_linter::linter::check_path; use rust_python_linter::linter::check_path;
use rust_python_linter::message::Message; use rust_python_linter::message::Message;
use walkdir::{DirEntry, WalkDir};
fn set_up_logging(verbose: bool) -> Result<()> { fn set_up_logging(verbose: bool) -> Result<()> {
fern::Dispatch::new() fern::Dispatch::new()
@ -74,7 +72,12 @@ fn main() -> Result<()> {
let start = Instant::now(); let start = Instant::now();
let messages: Vec<Message> = files let messages: Vec<Message> = files
.par_iter() .par_iter()
.map(|entry| check_path(entry.path()).unwrap()) .map(|entry| {
check_path(entry.path()).unwrap_or_else(|e| {
error!("Failed to check {}: {e:?}", entry.path().to_string_lossy());
vec![]
})
})
.flatten() .flatten()
.collect(); .collect();
let duration = start.elapsed(); let duration = start.elapsed();

View File

@ -2,6 +2,8 @@ use std::borrow::Cow;
use std::os::unix::fs::MetadataExt; use std::os::unix::fs::MetadataExt;
use std::path::Path; use std::path::Path;
use cacache::Error::EntryNotFound;
use log::error;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::message::Message; use crate::message::Message;
@ -33,19 +35,21 @@ fn cache_key(path: &Path) -> Cow<str> {
} }
pub fn get(path: &Path) -> Option<Vec<Message>> { pub fn get(path: &Path) -> Option<Vec<Message>> {
if let Ok(encoded) = cacache::read_sync(cache_dir(), cache_key(path)) { match cacache::read_sync(cache_dir(), cache_key(path)) {
if let Ok(file_metadata) = path.metadata() { Ok(encoded) => match path.metadata() {
if let Ok(CheckResult { metadata, messages }) = Ok(m) => match bincode::deserialize::<CheckResult>(&encoded[..]) {
bincode::deserialize::<CheckResult>(&encoded[..]) Ok(CheckResult { metadata, messages }) => {
{ if m.size() == metadata.size && m.mtime() == metadata.mtime {
if file_metadata.size() == metadata.size && file_metadata.mtime() == metadata.mtime
{
return Some(messages); return Some(messages);
} }
} }
Err(e) => error!("Failed to deserialize encoded cache entry: {e:?}"),
},
Err(e) => error!("Failed to read metadata from path: {e:?}"),
},
Err(EntryNotFound(_, _)) => {}
Err(e) => error!("Failed to read from cache: {e:?}"),
} }
}
None None
} }
@ -58,10 +62,13 @@ pub fn set(path: &Path, messages: &[Message]) {
}, },
messages, messages,
}; };
let _ = cacache::write_sync( match cacache::write_sync(
cache_dir(), cache_dir(),
cache_key(path), cache_key(path),
bincode::serialize(&check_result).unwrap(), bincode::serialize(&check_result).unwrap(),
); ) {
Ok(_) => {}
Err(e) => error!("Failed to write to cache: {e:?}"),
}
} }
} }

View File

@ -23,9 +23,9 @@ struct CheckResult {
pub fn check_path(path: &Path) -> Result<Vec<Message>> { pub fn check_path(path: &Path) -> Result<Vec<Message>> {
// TODO(charlie): These specific files are causing a stack overflow. // TODO(charlie): These specific files are causing a stack overflow.
if path.to_string_lossy().eq_ignore_ascii_case( if path.to_string_lossy().eq_ignore_ascii_case(
"../../spring-experiments/spr_experiments/spr_experiments/assayworks/experiments/order_20220204/pipeline_steps.py") || "../spring-experiments/spr_experiments/spr_experiments/assayworks/experiments/order_20220204/pipeline_steps.py") ||
path.to_string_lossy().eq_ignore_ascii_case path.to_string_lossy().eq_ignore_ascii_case
( "../../spring-experiments/spr_platform/spr_platform/data_index/bigquery_index.py") ( "../spring-experiments/spr_platform/spr_platform/data_index/bigquery_index.py")
{ {
return Ok(vec![]); return Ok(vec![]);
} }

View File

@ -1,8 +1,9 @@
use std::fmt;
use std::path::PathBuf;
use colored::Colorize; use colored::Colorize;
use rustpython_parser::ast::Location; use rustpython_parser::ast::Location;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fmt;
use std::path::PathBuf;
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
#[serde(remote = "Location")] #[serde(remote = "Location")]

View File

@ -1,10 +1,11 @@
use anyhow::Result;
use rustpython_parser::ast::Suite;
use rustpython_parser::parser;
use std::fs::File; use std::fs::File;
use std::io::{BufReader, Read}; use std::io::{BufReader, Read};
use std::path::Path; use std::path::Path;
use anyhow::Result;
use rustpython_parser::ast::Suite;
use rustpython_parser::parser;
pub fn parse(path: &Path) -> Result<Suite> { pub fn parse(path: &Path) -> Result<Suite> {
let file = File::open(path)?; let file = File::open(path)?;
let mut buf_reader = BufReader::new(file); let mut buf_reader = BufReader::new(file);