Crates.io | bsdiff |
lib.rs | bsdiff |
version | 0.2.0 |
source | src |
created_at | 2017-06-24 17:13:50.887827 |
updated_at | 2024-04-11 15:58:51.724342 |
description | Rust port of the bsdiff binary diffing algorithm. |
homepage | https://lib.rs/bsdiff |
repository | https://github.com/space-wizards/bsdiff-rs |
max_upload_size | |
id | 20486 |
size | 20,439 |
Bsdiff is a method of diffing files. This crate is a port of a bsdiff library. High performance patching. All written in safe Rust.
It is usually a good idea to use bsdiff alongside a compression algorithm like bzip2.
fn main() {
let one = vec![1, 2, 3, 4, 5];
let two = vec![1, 2, 4, 6];
let mut patch = Vec::new();
bsdiff::diff(&one, &two, &mut patch).unwrap();
let mut patched = Vec::with_capacity(two.len());
bsdiff::patch(&one, &mut patch.as_slice(), &mut patched).unwrap();
assert_eq!(patched, two);
}
fn diff_files(file_a: &str, file_b: &str, patch_file: &str) -> std::io::Result<()> {
let old = std::fs::read(file_a)?;
let new = std::fs::read(file_b)?;
let mut patch = Vec::new();
bsdiff::diff(&old, &new, &mut patch)?;
// TODO: compress `patch` here
std::fs::write(patch_file, &patch)
}
fn patch_file(file_a: &str, patch_file: &str, file_b: &str) -> std::io::Result<()> {
let old = std::fs::read(file_a)?;
let patch = std::fs::read(patch_file)?;
// TODO: decompress `patch` here
let mut new = Vec::new();
bsdiff::patch(&old, &mut patch.as_slice(), &mut new)?;
std::fs::write(file_b, &new)
}