9 releases (breaking)

0.7.0 Dec 28, 2022
0.6.0 Jan 12, 2022
0.5.0 Feb 13, 2019
0.4.2 Sep 7, 2017
0.4.1 Nov 25, 2016

#806 in Parser implementations

Download history 491/week @ 2023-12-10 1125/week @ 2023-12-17 675/week @ 2023-12-24 655/week @ 2023-12-31 1409/week @ 2024-01-07 1639/week @ 2024-01-14 1605/week @ 2024-01-21 1438/week @ 2024-01-28 1631/week @ 2024-02-04 1659/week @ 2024-02-11 1858/week @ 2024-02-18 1660/week @ 2024-02-25 2008/week @ 2024-03-03 1535/week @ 2024-03-10 2174/week @ 2024-03-17 1818/week @ 2024-03-24

7,726 downloads per month
Used in 11 crates (9 directly)

MIT license

36KB
697 lines

Patch

Checks Crates.io Badge docs.rs Lines of Code

Rust crate for parsing and producing patch files in the Unified Format.

The parser attempts to be forgiving enough to be compatible with diffs produced by programs like git. It accomplishes this by ignoring the additional code context and information provided in the diff by those programs.

See the Documentation for more information and for examples.


lib.rs:

Parse and produce patch files (diffs) in the Unified Format.

The format is not fully specified, but people like Guido van Rossum have done the work to figure out the details.

The parser attempts to be forgiving enough to be compatible with diffs produced by programs like git. It accomplishes this by ignoring the additional code context and information provided in the diff by those programs.

Example

// Make sure you add the `patch` crate to the `[dependencies]` key of your Cargo.toml file.
use patch::Patch;

let sample = "\
--- before.py
+++ path/to/after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido\n";

let patch = Patch::from_single(sample)?;
assert_eq!(&patch.old.path, "before.py");
assert_eq!(&patch.new.path, "path/to/after.py");

// Print out the parsed patch file in its Rust representation
println!("{:#?}", patch);

// Print out the parsed patch file in the Unified Format. For input that was originally in the
// Unified Format, this will produce output identical to that original input.
println!("{}", patch); // use format!("{}\n", patch) to get this as a String

Dependencies

~2.5MB
~38K SLoC