Skip to content

Commit a949ae8

Browse files
committed
Issue #1: Fixes parsing of lines that shouldn't exist in context diffs
1 parent a907509 commit a949ae8

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
[wheel]
1+
[bdist_wheel]
22
universal = 1

whatthepatch/patch.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -620,11 +620,13 @@ def parse_context_diff(text):
620620
del old_hunk[0]
621621
if o:
622622
old = int(o.group(1))
623+
old_len = int(o.group(2)) + 1 - old
623624
while len(new_hunk) > 0:
624625
n = context_hunk_new.match(new_hunk[0])
625626
del new_hunk[0]
626627
if n:
627628
new = int(n.group(1))
629+
new_len = int(n.group(2)) + 1 - new
628630
break
629631
break
630632

@@ -638,15 +640,16 @@ def parse_context_diff(text):
638640
kind = c.group(1)
639641
line = c.group(2)
640642

641-
if kind == '-':
643+
if kind == '-' and (j != old_len or j == 0):
642644
changes.append((old + j, None, line))
643645
j += 1
644-
elif kind == ' ':
646+
elif kind == ' ' and ((j != old_len and k != new_len)
647+
or (j == 0 or k == 0)):
645648
changes.append((old + j, new + k, line))
646649
j += 1
647650
k += 1
648651
elif kind == '+' or kind == '!':
649-
raise ValueError("Wat1" + kind)
652+
raise ValueError("Got unexpected change in removal hunk: " + kind)
650653

651654
elif len(old_hunk) == 0 and len(new_hunk) > 0:
652655
# only insertions left?
@@ -657,15 +660,16 @@ def parse_context_diff(text):
657660
kind = c.group(1)
658661
line = c.group(2)
659662

660-
if kind == '+':
663+
if kind == '+' and (k != new_len or k == 0):
661664
changes.append((None, new + k, line))
662665
k += 1
663-
elif kind == ' ':
666+
elif kind == ' ' and ((j != old_len and k != new_len)
667+
or (j == 0 or k == 0)):
664668
changes.append((old + j, new + k, line))
665669
j += 1
666670
k += 1
667671
elif kind == '-' or kind == '!':
668-
raise ValueError("Wat2" + kind)
672+
raise ValueError("Got unexpected change in insertion hunk: " + kind)
669673
else:
670674
# both
671675
while len(old_hunk) > 0 and len(new_hunk) > 0:
@@ -691,11 +695,11 @@ def parse_context_diff(text):
691695
k += 1
692696
del old_hunk[0]
693697
del new_hunk[0]
694-
elif okind == '-' or okind == '!':
698+
elif okind == '-' or okind == '!' and (j != old_len or j == 0):
695699
changes.append((old + j, None, oline))
696700
j += 1
697701
del old_hunk[0]
698-
elif nkind == '+' or nkind == '!':
702+
elif nkind == '+' or nkind == '!' and (k != old_len or k == 0):
699703
changes.append((None, new + k, nline))
700704
k += 1
701705
del new_hunk[0]

0 commit comments

Comments
 (0)