aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2020-07-22 01:26:48 +0200
committerTeddy Wing2020-07-22 01:26:48 +0200
commit58e5286a1f1cb72bb3cfd1f1f6f415a4b80bdef2 (patch)
tree385f08e45cc78157d94e7aee99f8f53b574f030e
parent848ecbcdf2ae15a6b74bb348385709098f2c700a (diff)
downloadgit-suggestion-58e5286a1f1cb72bb3cfd1f1f6f415a4b80bdef2.tar.bz2
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.
-rw-r--r--Cargo.lock21
-rw-r--r--Cargo.toml1
-rw-r--r--src/lib.rs52
3 files changed, 74 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index ce31c89..bb425da 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -161,6 +161,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
[[package]]
+name = "encoding_rs"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ac63f94732332f44fe654443c46f6375d1939684c17b0afb6cb56b0456e171"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
name = "error-chain"
version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -223,6 +232,7 @@ dependencies = [
"serde",
"serde_json",
"thiserror",
+ "unidiff",
]
[[package]]
@@ -1018,6 +1028,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
+name = "unidiff"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8a62719acf1933bfdbeb73a657ecd9ecece70b405125267dd549e2e2edc232c"
+dependencies = [
+ "encoding_rs",
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
name = "untrusted"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index f00d14f..eef7b03 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,3 +9,4 @@ regex = "1.3.9"
serde = { version = "1.0.114", features = ["derive"] }
serde_json = "1.0.56"
thiserror = "1.0.20"
+unidiff = "0.3.3"
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);
+ }
}