flickzeug
A Rust library for computing diffs, parsing and applying patches, and performing three-way merges.
Note: This is a fork of diffy maintained by prefix.dev.
Highlights
- Fuzzy patch application: Apply patches even when line numbers have drifted or context has slightly changed — essential for real-world patching scenarios
- Battle-tested: Used in production with thousands of real-world patches from conda-forge, the community-driven collection of conda packages
Features
- Diff creation: Compute differences between texts using Myers' diff algorithm, producing minimal edit sequences
- Patch parsing & formatting: Read and write unified diff format (compatible with
git diff,diff -u, etc.) - Fuzzy patch application: Apply patches with configurable fuzzy matching when line numbers don't align exactly, using similarity-based line matching
- Three-way merge: Merge changes from two sources against a common ancestor, with conflict detection and multiple conflict marker styles
- Binary support: All major APIs have
*_bytesvariants for working with non-UTF-8 content
Usage
Add flickzeug to your Cargo.toml:
[]
= "0.4"
Creating a diff
use create_patch;
let original = "The quick brown fox\njumps over\nthe lazy dog.\n";
let modified = "The quick brown cat\njumps over\nthe sleepy dog.\n";
let patch = create_patch;
println!;
Applying a patch
use ;
let original = "The quick brown fox\njumps over\nthe lazy dog.\n";
let patch_text = "..."; // unified diff format
let patch = from_str.unwrap;
let result = apply.unwrap;
Three-way merge
use merge;
let base = "line1\nline2\nline3\n";
let ours = "line1\nmodified by us\nline3\n";
let theirs = "line1\nline2\nline3 changed\n";
let merged = merge.unwrap;
License
This project is available under the terms of either the Apache 2.0 license or the MIT license.
Acknowledgments
This project is a fork of diffy by Brandon Williams. We thank the original author for their excellent work.