From f69ca010b80703389fffe75fc6dca907e53df74d Mon Sep 17 00:00:00 2001 From: diogo464 Date: Mon, 11 Aug 2025 13:40:27 +0100 Subject: basic file upload --- src/main.rs | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 00091e6..39785fc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -99,9 +99,20 @@ pub fn blob_import_file( std::fs::create_dir_all(parent)?; } match mode { - ImportMode::Move => { - std::fs::rename(file_path, blob_path)?; - } + ImportMode::Move => match std::fs::rename(&file_path, &blob_path) { + Ok(()) => {} + Err(err) if err.kind() == std::io::ErrorKind::CrossesDevices => { + let blob_tmp_path = { + let mut p = blob_path.clone(); + p.set_file_name(format!("{blob_id}.tmp")); + p + }; + std::fs::copy(&file_path, &blob_tmp_path)?; + std::fs::rename(&blob_tmp_path, blob_path)?; + std::fs::remove_file(&file_path)?; + } + Err(err) => return Err(err), + }, ImportMode::Copy => { let blob_tmp_path = { let mut p = blob_path.clone(); @@ -759,8 +770,7 @@ struct RemoveArgs { #[clap(long)] email: String, - #[clap(long)] - path: DrivePath, + path: Vec, } #[derive(Debug, Args)] @@ -899,16 +909,18 @@ fn cmd_remove(args: RemoveArgs) { let timestamp = args.timestamp.unwrap_or_else(get_timestamp); let revision = get_next_revision(&ops); - let new_op = Operation { - header: OperationHeader { - timestamp, - revision, - email: args.email, - }, - data: OperationData::Remove(OperationRemove { path: args.path }), - }; - apply(&mut fs, &new_op).unwrap(); - ops.push(new_op); + for path in args.path { + let new_op = Operation { + header: OperationHeader { + timestamp, + revision, + email: args.email.clone(), + }, + data: OperationData::Remove(OperationRemove { path }), + }; + apply(&mut fs, &new_op).unwrap(); + ops.push(new_op); + } common_write_log_file(&args.common, &ops); } -- cgit