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 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
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.
For illustration, see the different edit stages of my patch on a separate page.