diff --git a/src/filesystem.rs b/src/filesystem.rs index beb1642..55a57e9 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -1,18 +1,3 @@ -use anyhow::{anyhow, Error, Result}; -use chrono::prelude::*; -use diesel::sqlite::Sqlite; -use diesel::Connection; -use log::{error, info, trace}; -use rayon::prelude::*; -use serde_json::Value; -use std::convert::TryFrom; -use std::path::{Component, Path, PathBuf}; -use std::sync::{Arc, RwLock}; -use std::time::{Instant, UNIX_EPOCH}; -use std::{fs, iter}; -use uuid::Uuid; -use walkdir::WalkDir; - use crate::addressing::Address; use crate::database::{ bulk_retrieve_objects, file_set_valid, insert_entry, insert_file, query, retrieve_all_files, @@ -23,6 +8,20 @@ use crate::hash::Hashable; use crate::jobs::{Job, JobContainer, JobId}; use crate::models; use crate::models::File; +use anyhow::{anyhow, Error, Result}; +use chrono::prelude::*; +use diesel::sqlite::Sqlite; +use diesel::Connection; +use log::{error, info, trace, warn}; +use rayon::prelude::*; +use serde_json::Value; +use std::convert::TryFrom; +use std::path::{Component, Path, PathBuf}; +use std::sync::{Arc, RwLock}; +use std::time::{Instant, UNIX_EPOCH}; +use std::{fs, iter}; +use uuid::Uuid; +use walkdir::WalkDir; const DIR_TYPE: &str = "FS_DIR"; const DIR_KEY: &str = "DIR"; @@ -447,9 +446,40 @@ fn _rescan_vault>( }) .collect(); + let mut failed: Vec<&Error> = vec![]; + let mut created = 0; + let mut unchanged = 0; + let mut deleted = 0; + + for result in &path_results { + match result { + Ok(result) => match result { + UpdatePathOutcome::Added(_) => created += 1, + UpdatePathOutcome::Unchanged(_) => unchanged += 1, + UpdatePathOutcome::Removed(_) => deleted += 1, + }, + Err(err) => failed.push(err), + } + } + + if !failed.is_empty() { + warn!( + "{} path updates failed! ({})", + failed.len(), + failed + .iter() + .map(|e| e.to_string()) + .collect::>() + .join(", ") + ) + } + info!( - "Finished updating {}. Took {}s.", + "Finished updating {} ({} created, {} deleted, {} left unchanged). Took {}s.", directory.as_ref().display(), + created, + deleted, + unchanged, start.elapsed().as_secs() );