From 58e5286a1f1cb72bb3cfd1f1f6f415a4b80bdef2 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 22 Jul 2020 01:26:48 +0200 Subject: Try modifying diff hunk with 'unidiff' Testing out 'unidiff' to build the patch. Trying to see if it will adjust the line numbers automatically when the patch is modified. Doesn't look like it. Seems like it has a nice interface, though. Still having trouble applying the patch due to complaints of patch format errors. --- src/lib.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 6db5c67..5ac1a74 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -147,4 +147,56 @@ mod tests { "#, ); } + + #[test] + fn unified_diff() { + use unidiff::PatchSet; + + let diff = r#"--- a/command/pr.go ++++ b/command/pr.go +@@ -1,9 +1,11 @@ + package command + + import ( ++ "bufio" // used to input comment + "errors" + "fmt" + "io" ++ "os" // used to input comment +"#; + + let mut patch = PatchSet::new(); + patch.parse(diff).unwrap(); + + println!("{:?}", patch); + println!("{}", patch); + + let lines = patch.files_mut()[0].hunks_mut()[0].lines_mut(); + + // for line in &lines { + // if line.is_removed() { + // } else if line.is_added() { + // line.line_type = unidiff::LINE_TYPE_CONTEXT.to_owned(); + // } + // } + + lines + .iter_mut() + .filter(|l| !l.is_removed()) + // .map(|l| { + .for_each(|l| { + if l.is_added() { + l.line_type = unidiff::LINE_TYPE_CONTEXT.to_owned(); + } + }); + + lines[lines.len() - 2].line_type = unidiff::LINE_TYPE_REMOVED.to_owned(); + + patch.files_mut()[0].hunks_mut()[0].append(unidiff::Line::new( + r#" "os""#, + unidiff::LINE_TYPE_ADDED, + )); + + println!("{}", patch); + } } -- cgit v1.2.3