| Index: patch.py
|
| diff --git a/patch.py b/patch.py
|
| index 8fe8b5c20e081aa5bd675d0b8fc8582204811a67..69ba32305bf32a8acfaaa6b9352f06d34d12574d 100644
|
| --- a/patch.py
|
| +++ b/patch.py
|
| @@ -219,19 +219,24 @@ class FilePatchDiff(FilePatchBase):
|
| hunks = []
|
| for line in self.diff_hunks.splitlines(True):
|
| if line.startswith('@@'):
|
| - match = re.match(r'^@@ -(\d+),(\d+) \+([\d,]+) @@.*$', line)
|
| + match = re.match(r'^@@ -([\d,]+) \+([\d,]+) @@.*$', line)
|
| # File add will result in "-0,0 +1" but file deletion will result in
|
| # "-1,N +0,0" where N is the number of lines deleted. That's from diff
|
| # and svn diff. git diff doesn't exhibit this behavior.
|
| + # svn diff for a single line file rewrite "@@ -1 +1 @@". Fun.
|
| if not match:
|
| self._fail('Hunk header is unparsable')
|
| - if ',' in match.group(3):
|
| - start_dst, lines_dst = map(int, match.group(3).split(',', 1))
|
| + if ',' in match.group(1):
|
| + start_src, lines_src = map(int, match.group(1).split(',', 1))
|
| else:
|
| - start_dst = int(match.group(3))
|
| + start_src = int(match.group(1))
|
| + lines_src = 0
|
| + if ',' in match.group(2):
|
| + start_dst, lines_dst = map(int, match.group(2).split(',', 1))
|
| + else:
|
| + start_dst = int(match.group(2))
|
| lines_dst = 0
|
| - new_hunk = Hunk(int(match.group(1)), int(match.group(2)),
|
| - start_dst, lines_dst)
|
| + new_hunk = Hunk(start_src, lines_src, start_dst, lines_dst)
|
| if hunks:
|
| if new_hunk.start_src <= hunks[-1].start_src:
|
| self._fail('Hunks source lines are not ordered')
|
|
|