catar: implement create
This commit is contained in:
		| @ -8,10 +8,11 @@ use proxmox_backup::api::router::*; | ||||
|  | ||||
| use serde_json::{Value}; | ||||
|  | ||||
| use std::io::Read; | ||||
| use std::io::{Read, Write}; | ||||
| use std::path::PathBuf; | ||||
|  | ||||
| use proxmox_backup::catar::format_definition::*; | ||||
| use proxmox_backup::catar::encoder::*; | ||||
| use proxmox_backup::catar::decoder::*; | ||||
|  | ||||
| use proxmox_backup::tools::*; | ||||
| @ -115,11 +116,26 @@ fn dump_archive(param: Value, _info: &ApiMethod) -> Result<Value, Error> { | ||||
|     Ok(Value::Null) | ||||
| } | ||||
|  | ||||
| fn create_backup(param: Value, _info: &ApiMethod) -> Result<Value, Error> { | ||||
| fn create_archive(param: Value, _info: &ApiMethod) -> Result<Value, Error> { | ||||
|  | ||||
|     let _archive = required_string_param(¶m, "archive"); | ||||
|     let _source = required_string_param(¶m, "source"); | ||||
|     let archive = required_string_param(¶m, "archive"); | ||||
|     let source = required_string_param(¶m, "source"); | ||||
|  | ||||
|     let source = std::path::PathBuf::from(source); | ||||
|  | ||||
|     let mut dir = nix::dir::Dir::open( | ||||
|         &source, nix::fcntl::OFlag::O_NOFOLLOW, nix::sys::stat::Mode::empty())?; | ||||
|  | ||||
|     let file = std::fs::OpenOptions::new() | ||||
|         .create_new(true) | ||||
|         .write(true) | ||||
|         .open(archive)?; | ||||
|  | ||||
|     let mut writer = std::io::BufWriter::with_capacity(1024*1024, file); | ||||
|  | ||||
|     CaTarEncoder::encode(source, &mut dir, &mut writer)?; | ||||
|  | ||||
|     writer.flush()?; | ||||
|  | ||||
|     Ok(Value::Null) | ||||
| } | ||||
| @ -129,7 +145,7 @@ fn main() { | ||||
|     let cmd_def = CliCommandMap::new() | ||||
|         .insert("create", CliCommand::new( | ||||
|             ApiMethod::new( | ||||
|                 create_backup, | ||||
|                 create_archive, | ||||
|                 ObjectSchema::new("Create new catar archive.") | ||||
|                     .required("archive", StringSchema::new("Archive name")) | ||||
|                     .required("source", StringSchema::new("Source directory.")) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user