new blag post: Splitting overly large hunks in patches
[www-rohieb-name.git] / blag / post / splitting-overly-large-hunks-in-patches.mdwn
diff --git a/blag/post/splitting-overly-large-hunks-in-patches.mdwn b/blag/post/splitting-overly-large-hunks-in-patches.mdwn
new file mode 100644 (file)
index 0000000..809be3c
--- /dev/null
@@ -0,0 +1,36 @@
+[[!meta title="Splitting overly large hunks in patches"]]
+[[!meta author="rohieb"]]
+[[!meta license="CC-BY-SA 3.0"]]
+[[!img defaults size=x200]]
+
+Today I stumbled over a lengthy patch on my harddisk. It was about half a year
+old, and consisted of only one hunk, which was about 1000 lines in length. Most
+of the contents were indentation changes from tabs to spaces, but I knew that
+the patch contained a small useful portion, which I wanted to extract. What was
+slightly more annoying was the fact the the patch did not apply cleanly to the
+file it was supposed to change, and `patch` only applies hunks atomically, the
+whole patch was rejected.
+
+Since I did not want to compare each of the lines in the patch visually and
+decide whether they changed only whitespace, I tried to look for a way to split
+the patch into smaller hunks. My first try was looking at the useful tool in the
+[patchutils](http://cyberelk.net/tim/software/patchutils/) package, but none of
+them did what I wanted, they only allowed me to split patches into single hunks
+(but my patch already had only one hunk).
+
+But after a bit of googling, I found out that Emacs has a
+[`diff-split-hunk`][emacs-dsh] command, so I installed Emacs (for the first time
+in my life), opened my patch, selected Emacs' Diff mode with `M-x diff-mode`,
+and split the patch into smaller hunks by pressing `C-x C-s` on appropriate
+context lines. After saving, the patch applied cleanly except for two smaller
+hunks, which I could easily identify as containing only whitespace changes. Then
+I could compare my patched file with the original file, this time ignoring
+whitespace changes with `diff -w`, and, voilĂ , I got the seven useful lines I
+wanted.
+
+[emacs-dsh]: https://www.gnu.org/software/emacs/manual/html_node/emacs/Diff-Mode.html
+
+For illustration, see the different [[edit stages of my patch|edit-stages]] on a
+separate page.
+
+[[!tag patch patchutils diff GNU Emacs QDjango C++ howto]]
This page took 0.021979 seconds and 4 git commands to generate.