diff --git a/.gitignore b/.gitignore index bebe109..aabe58b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ upend.sqlite3 /.pnpm /.cargo -example_vault/zb* \ No newline at end of file +example_vault/zb* +example_vault/_up_data diff --git a/db/src/stores/fs/mod.rs b/db/src/stores/fs/mod.rs index ae5f452..4ce787f 100644 --- a/db/src/stores/fs/mod.rs +++ b/db/src/stores/fs/mod.rs @@ -35,6 +35,7 @@ mod db; pub const FILE_MIME_KEY: &str = "FILE_MIME"; const FILE_SIZE_KEY: &str = "FILE_SIZE"; +const INCOMING_DIRECTORY: &str = "_up_data"; pub struct FsStore { path: PathBuf, @@ -396,8 +397,13 @@ impl FsStore { Ok(Some(upath)) } BlobMode::Mirror => { - let normalized_path = self.normalize_path(path).unwrap(); - let path = normalized_path.parent().unwrap(); + let path = self.normalize_path(path).unwrap(); + let path = path.parent().unwrap(); + let path = if path.ends_with(INCOMING_DIRECTORY) { + path.parent().unwrap_or(path) + } else { + path + }; let upath = iter::once("NATIVE".parse().unwrap()) @@ -687,7 +693,9 @@ impl UpStore for FsStore { addr_str }; - let final_path = self.path.join(final_name); + let incoming_path = self.path.join(INCOMING_DIRECTORY); + fs::create_dir_all(&incoming_path).map_err(|e| StoreError::Unknown(e.to_string()))?; + let final_path = incoming_path.join(final_name); blob.copy_to(&final_path) .map_err(|e| StoreError::Unknown(e.to_string()))?;