v0.2
This commit is contained in:
@@ -14,7 +14,13 @@ async fn create_tmp_dir(dir_name: String) -> Result<String, io::Error> {
|
||||
Ok(name)
|
||||
}
|
||||
|
||||
async fn extract_files(zsdiff: &Zsdiff, filename: &String) -> Result<String, io::Error> {
|
||||
async fn load_file(filename: String) -> Result<Zsdiff, io::Error> {
|
||||
let filename = &format!("{}.zdiff", filename);
|
||||
let parts = utils::decompress_parts(read(filename)?).await?;
|
||||
Ok(Zsdiff::from_vec(parts).await?)
|
||||
}
|
||||
|
||||
async fn extract_files(zsdiff: &Zsdiff, filename: String) -> Result<String, io::Error> {
|
||||
let tmp_dir_name = create_tmp_dir(filename.to_string()).await?;
|
||||
let path = Path::new(&tmp_dir_name);
|
||||
fs::remove_dir_all(path).ok();
|
||||
@@ -38,9 +44,7 @@ async fn check_hash(filename: String) -> Result<(), io::Error> {
|
||||
}
|
||||
|
||||
async fn zspatch(filename: String, dest_dir: String) -> Result<(), io::Error> {
|
||||
let filename = &format!("{}.zdiff", filename);
|
||||
let parts = utils::decompress_parts(read(filename)?).await?;
|
||||
let diff = Zsdiff::from_vec(parts).await?;
|
||||
let diff = load_file(filename.clone()).await?;
|
||||
let tmp_dir_name = extract_files(&diff, filename).await?;
|
||||
let now = time::Instant::now();
|
||||
for name in diff.content.keys().collect::<Vec<&String>>() {
|
||||
@@ -55,6 +59,11 @@ async fn zspatch(filename: String, dest_dir: String) -> Result<(), io::Error> {
|
||||
fs::remove_file(path).ok();
|
||||
}
|
||||
|
||||
for folder in diff.metadata.remove_folders {
|
||||
let path = Path::new(&dest_dir).join(folder);
|
||||
fs::remove_dir_all(path).ok();
|
||||
}
|
||||
|
||||
for (k, hash) in diff.metadata.hashes {
|
||||
let path = Path::new(&dest_dir).join(k);
|
||||
let content = read(path)?;
|
||||
@@ -76,6 +85,8 @@ struct Args {
|
||||
#[arg(short, long)]
|
||||
dest_dir: String,
|
||||
#[arg(short, long)]
|
||||
metadata: bool,
|
||||
#[arg(short, long)]
|
||||
hash_check: bool,
|
||||
}
|
||||
|
||||
@@ -85,5 +96,10 @@ async fn main() -> io::Result<()> {
|
||||
if args.hash_check {
|
||||
check_hash(args.filename.clone()).await?;
|
||||
}
|
||||
if args.metadata {
|
||||
let diff = load_file(args.filename).await?;
|
||||
println!("{}", serde_json::to_string(&diff.metadata)?);
|
||||
return Ok(());
|
||||
}
|
||||
zspatch(args.filename, args.dest_dir).await
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user