Hi, patch's handling of diffs that change the beginning of a file is broken. The moste severe breakage is this, where the diff says to remove a line "aa" but patch removes a line "XX":
# cat diff --- a Wed Jul 8 00:53:09 2015 +++ b Wed Jul 8 00:53:29 2015 @@ -1,3 +1,3 @@ -aa +aa 1 bb cc # cat a XX bb cc # patch < diff Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- a Wed Jul 8 00:53:09 2015 |+++ b Wed Jul 8 00:53:29 2015 -------------------------- Patching file a using Plan A... Hunk #1 succeeded at 1 with fuzz 1. done # cat a aa 1 bb cc Other broken behavior involves diffs that only add at the beginning of a file. This diff can be applied many times without patch noticing: # cat diff --- a Wed Jul 8 00:49:22 2015 +++ b Wed Jul 8 00:49:37 2015 @@ -1,3 +1,4 @@ +00 aa bb cc # cat a aa bb cc # patch < diff Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- a Wed Jul 8 00:49:22 2015 |+++ b Wed Jul 8 00:49:37 2015 -------------------------- Patching file a using Plan A... Hunk #1 succeeded at 1. done # patch < diff Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- a Wed Jul 8 00:49:22 2015 |+++ b Wed Jul 8 00:49:37 2015 -------------------------- Patching file a using Plan A... Hunk #1 succeeded at 2 (offset 1 line). done # patch < diff Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- a Wed Jul 8 00:49:22 2015 |+++ b Wed Jul 8 00:49:37 2015 -------------------------- Patching file a using Plan A... Hunk #1 succeeded at 3 (offset 2 lines). done # cat a 00 00 00 aa bb cc The same goes for diffs that create a file. These can be applied many times without patch complaining. patch says 'Empty context always matches', which seems to indicate that this is a known issue, though the message is misleading. There used to be a second message 'Detection of previously applied patch not possible.' but that message has been removed 12 years ago. # cat diff --- /dev/null Wed Jul 8 00:59:58 2015 +++ b Wed Jul 8 01:00:05 2015 @@ -0,0 +1,3 @@ +aa +bb +cc Cheers, Stefan
