From 9823f646cd1a147c1ce3c0d4384aa48cde48d8fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sun, 20 Sep 2020 17:17:43 +0200 Subject: [PATCH] move all reimport db writes into a transaction --- src/filesystem.rs | 57 +++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/filesystem.rs b/src/filesystem.rs index 611c3bf..6d281ef 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -5,7 +5,7 @@ use crate::database::{ }; use crate::hash::{ComputeHash, HasherWorker}; use crate::models; -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, Error, Result}; use log::{error, info, trace}; use serde::export::Formatter; use serde_json::Value; @@ -363,25 +363,6 @@ async fn _process_directory_entry, P: AsRef>(); let (filename, dir_path) = components.split_last().unwrap(); - let file_address = Address::UUID(Uuid::new_v4()); - - let name_entry = InnerEntry { - target: file_address.clone(), - key: FILENAME_KEY.to_string(), - value: EntryValue::Value(Value::String( - filename.as_os_str().to_string_lossy().to_string(), - )), - }; - let _ = insert_entry(connection, name_entry)?; - - let identity_entry = InnerEntry { - target: file_address.clone(), - key: FILE_IDENTITY_KEY.to_string(), - value: EntryValue::Address(Address::Hash(digest.clone())), - }; - - let _ = insert_entry(connection, identity_entry)?; - let upath = UPath( iter::once(UDirectory { name: "NATIVE".to_string(), @@ -393,14 +374,36 @@ async fn _process_directory_entry, P: AsRef(|| { + let file_address = Address::UUID(Uuid::new_v4()); + + let name_entry = InnerEntry { + target: file_address.clone(), + key: FILENAME_KEY.to_string(), + value: EntryValue::Value(Value::String( + filename.as_os_str().to_string_lossy().to_string(), + )), + }; + let _ = insert_entry(connection, name_entry)?; + + let identity_entry = InnerEntry { + target: file_address.clone(), + key: FILE_IDENTITY_KEY.to_string(), + value: EntryValue::Address(Address::Hash(digest.clone())), + }; + + let _ = insert_entry(connection, identity_entry)?; + + let dir_has_entry = InnerEntry { + target: parent_dir.clone(), + key: DIR_HAS_KEY.to_string(), + value: EntryValue::Address(file_address), + }; + let _ = insert_entry(connection, dir_has_entry)?; + + Ok(()) + }) } #[cfg(test)]