Skip to content

Removes changes in your git diffs if they match a regular expression

License

Notifications You must be signed in to change notification settings

FlxB2/patchmatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Patchmatch

Removes changes in your git diffs if they match a regular expression

foo@bar:~$ git diff | ./patchmatch "long"
Before After
diff --git a/file.txt b/file.txt
index abcdef1..1234567 100644
--- a/file.txt
+++ b/file.txt
@@ -1,4 +1,2 @@
 Some input
-Very long input
 Another line
-Fourth line
diff --git a/file.txt b/file.txt
index abcdef1..1234567 100644
--- a/file.txt
+++ b/file.txt
@@ -1,4 +1,3 @@
 Some input
 Very long input
 Another line
-Fourth line

Usage

./patchmatch [-k] <regex>
  • <regex>: The regular expression pattern, following RE2 Syntax
  • -k: An optional flag that, if provided, keeps the changes that match the regex. Everything else is removed.

Installation

For OSX and Linux, simply run make install. This will add the binary to /usr/local/bin.
You can compile it yourself using make build.
Run tests using make tests.

Which changes are removed?

Because splitting changed lines is hard, Patchmatch removes blocks of changes entirely if they match the regular expression.
Similar to existing visual tools, e.g. VSCodes diff view.

For example:

foo@bar:~$ git diff | patchmatch "((m|M)odified|(r|R)ewritten|(u|U)pdated)"
Before After
diff --git a/complex b/complex
index 04ab2d9..9701e89 100644
--- a/complex
+++ b/complex
@@ -1,27 +1,26 @@
 # Introduction
-This is the initial content of the test file.
+This is the modified content of the test file.
 It includes multiple sections and lines of text.
-All sections follow a consistent structure.
+Some lines were changed.
 
 # Section 1
-The quick brown fox jumps over the lazy dog.
-This sentence contains all letters of the alphabet.
-Numbers follow: 1234567890.
-Special characters: !@#$%^&*()_+.
+The quick brown fox jumps over the lazy cat.
+This sentence contains all letters of the alphabet.
+Numbers have been updated: 9876543210.
+Special characters removed.
 
 # Section 2
 More content in section 2.
-This section has fewer sentences.
-Yet, it is important for the test.
+This section has been shortened.
 End of section 2.
 
 # Section 3
-Section 3 has some lines that will be changed.
-Here we go with the modifications.
-The quick brown fox jumps over something new.
+Section 3 has been completely rewritten.
+These lines are entirely different from the original.
+Expect significant changes here.
 End of section 3.
 
 # Conclusion
-This is the end of the file.
-It will be modified in the new version.
-End of baseline version.
+This is the conclusion of the modified file.
+It has some additional notes.
+End of modified version.
diff --git a/complex b/complex
index 04ab2d9..9701e89 100644
--- a/complex
+++ b/complex
@@ -1,27 +1,26 @@
 # Introduction
 This is the initial content of the test file.
 It includes multiple sections and lines of text.
-All sections follow a consistent structure.
+Some lines were changed.
 
 # Section 1
 The quick brown fox jumps over the lazy dog.
 This sentence contains all letters of the alphabet.
 Numbers follow: 1234567890.
 Special characters: !@#$%^&*()_+.
 
 # Section 2
 More content in section 2.
-This section has fewer sentences.
-Yet, it is important for the test.
+This section has been shortened.
 End of section 2.
 
 # Section 3
 Section 3 has some lines that will be changed.
 Here we go with the modifications.
 The quick brown fox jumps over something new.
 End of section 3.
 
 # Conclusion
 This is the end of the file.
 It will be modified in the new version.
 End of baseline version.

About

Removes changes in your git diffs if they match a regular expression

Resources

License

Stars

Watchers

Forks

Packages

No packages published