--- a/mercurial/patch.py Wed Dec 23 23:28:53 2009 +0100
+++ b/mercurial/patch.py Thu Dec 24 00:01:13 2009 +0100
@@ -294,6 +294,7 @@
self.hash = {}
self.dirty = 0
self.offset = 0
+ self.skew = 0
self.rej = []
self.fileprinted = False
self.printfile(False)
@@ -449,7 +450,10 @@
else:
start = h.starta + self.offset - 1
orig_start = start
- if diffhelpers.testhunk(old, self.lines, start) == 0:
+ # if there's skew we want to emit the "(offset %d lines)" even
+ # when the hunk cleanly applies at start + skew, so skip the
+ # fast case code
+ if self.skew == 0 and diffhelpers.testhunk(old, self.lines, start) == 0:
if h.rmfile():
self.unlink(self.fname)
else:
@@ -465,7 +469,7 @@
# override the start line and use eof here
search_start = len(self.lines)
else:
- search_start = orig_start
+ search_start = orig_start + self.skew
for fuzzlen in xrange(3):
for toponly in [ True, False ]:
@@ -477,6 +481,7 @@
newlines = h.new(fuzzlen, toponly)
self.lines[l : l + len(old)] = newlines
self.offset += len(newlines) - len(old)
+ self.skew = l - orig_start
self.dirty = 1
if fuzzlen:
fuzzstr = "with fuzz %d " % fuzzlen