| Index: patch.py | 
| diff --git a/patch.py b/patch.py | 
| index 90886e9a0fc23ae142e1f524ecee7f18f83d39fe..b8325da482a841742658e7ec5ab8e985be3ed79f 100644 | 
| --- a/patch.py | 
| +++ b/patch.py | 
| @@ -135,6 +135,11 @@ class Hunk(object): | 
| self.variation = self.lines_dst - self.lines_src | 
| self.text = [] | 
|  | 
| +  def __repr__(self): | 
| +    return '%s<(%d, %d) to (%d, %d)>' % ( | 
| +        self.__class__.__name__, | 
| +        self.start_src, self.lines_src, self.start_dst, self.lines_dst) | 
| + | 
|  | 
| class FilePatchDiff(FilePatchBase): | 
| """Patch for a single file.""" | 
| @@ -235,18 +240,26 @@ class FilePatchDiff(FilePatchBase): | 
| # "-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. | 
| +        # "@@ -1 +1,N @@" is also valid where N is the length of the new file. | 
| if not match: | 
| self._fail('Hunk header is unparsable') | 
| -        if ',' in match.group(1): | 
| +        count = match.group(1).count(',') | 
| +        if not count: | 
| +          start_src = int(match.group(1)) | 
| +          lines_src = 1 | 
| +        elif count == 1: | 
| start_src, lines_src = map(int, match.group(1).split(',', 1)) | 
| else: | 
| -          start_src = int(match.group(1)) | 
| -          lines_src = 0 | 
| -        if ',' in match.group(2): | 
| +          self._fail('Hunk header is malformed') | 
| + | 
| +        count = match.group(2).count(',') | 
| +        if not count: | 
| +          start_dst = int(match.group(2)) | 
| +          lines_dst = 1 | 
| +        elif count == 1: | 
| start_dst, lines_dst = map(int, match.group(2).split(',', 1)) | 
| else: | 
| -          start_dst = int(match.group(2)) | 
| -          lines_dst = 0 | 
| +          self._fail('Hunk header is malformed') | 
| new_hunk = Hunk(start_src, lines_src, start_dst, lines_dst) | 
| if hunks: | 
| if new_hunk.start_src <= hunks[-1].start_src: | 
| @@ -273,8 +286,8 @@ class FilePatchDiff(FilePatchBase): | 
| len([1 for i in hunk.text if i.startswith('-')])) | 
| if variation != hunk.variation: | 
| self._fail( | 
| -              'Hunk header is incorrect: %d vs %d' % ( | 
| -                variation, hunk.variation)) | 
| +              'Hunk header is incorrect: %d vs %d; %r' % ( | 
| +                variation, hunk.variation, hunk)) | 
| if not hunk.start_src: | 
| self._fail( | 
| 'Hunk header start line is incorrect: %d' % hunk.start_src) | 
|  |