Skip to content

Commit 4e577b2

Browse files
committed
Merge pull request #2 from thoward/bugfix/parsing_fails_for_oneliners
Bug fix for one-liner diffs
2 parents 0eed107 + aedb0fe commit 4e577b2

File tree

5 files changed

+101
-2
lines changed

5 files changed

+101
-2
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
diff --git a/oneline.txt b/oneline.txt
2+
new file mode 100644
3+
index 0000000..f56f98d
4+
--- /dev/null
5+
+++ b/oneline.txt
6+
@@ -0,0 +1 @@
7+
+Adding a one-line file.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
diff --git a/oneline.txt b/oneline.txt
2+
index f56f98d..169ceeb 100644
3+
--- a/oneline.txt
4+
+++ b/oneline.txt
5+
@@ -1 +1 @@
6+
-Adding a one-line file.
7+
+Changed a one-line file.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
diff --git a/oneline.txt b/oneline.txt
2+
deleted file mode 100644
3+
index 169ceeb..0000000
4+
--- a/oneline.txt
5+
+++ /dev/null
6+
@@ -1 +0,0 @@
7+
-Changed a one-line file.

tests/test_patch.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,84 @@ def test_git_patch(self):
509509

510510
self.assertEqual(results, expected)
511511

512+
def test_git_oneline_add(self):
513+
with open('tests/casefiles/git-oneline-add.diff') as f:
514+
text = f.read()
515+
516+
lines = text.splitlines()
517+
518+
expected = [
519+
wtp.patch.diffobj(
520+
header=wtp.patch.header(
521+
index_path=None,
522+
old_path='/dev/null',
523+
old_version='0000000',
524+
new_path='oneline.txt',
525+
new_version='f56f98d'
526+
),
527+
changes=[
528+
(None, 1, 'Adding a one-line file.')
529+
],
530+
text='\n'.join(lines[:34]) + '\n'
531+
)
532+
]
533+
534+
results = list(wtp.parse_patch(text))
535+
536+
self.assertEqual(results, expected)
537+
538+
def test_git_oneline_change(self):
539+
with open('tests/casefiles/git-oneline-change.diff') as f:
540+
text = f.read()
541+
542+
lines = text.splitlines()
543+
544+
expected = [
545+
wtp.patch.diffobj(
546+
header=wtp.patch.header(
547+
index_path=None,
548+
old_path='oneline.txt',
549+
old_version='f56f98d',
550+
new_path='oneline.txt',
551+
new_version='169ceeb'
552+
),
553+
changes=[
554+
(1, None, 'Adding a one-line file.'),
555+
(None, 1, 'Changed a one-line file.')
556+
],
557+
text='\n'.join(lines[:34]) + '\n'
558+
)
559+
]
560+
561+
results = list(wtp.parse_patch(text))
562+
print results
563+
self.assertEqual(results, expected)
564+
565+
def test_git_oneline_rm(self):
566+
with open('tests/casefiles/git-oneline-rm.diff') as f:
567+
text = f.read()
568+
569+
lines = text.splitlines()
570+
571+
expected = [
572+
wtp.patch.diffobj(
573+
header=wtp.patch.header(
574+
index_path=None,
575+
old_path='oneline.txt',
576+
old_version='169ceeb',
577+
new_path='/dev/null',
578+
new_version='0000000'
579+
),
580+
changes=[
581+
(1, None, 'Changed a one-line file.')
582+
],
583+
text='\n'.join(lines[:34]) + '\n'
584+
)
585+
]
586+
587+
results = list(wtp.parse_patch(text))
588+
print results
589+
self.assertEqual(results, expected)
512590

513591
def test_git_header(self):
514592
text = """

whatthepatch/patch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,10 @@ def parse_unified_diff(text):
537537
line = c.group(2)
538538
c = None
539539

540-
if kind == '-' and r != old_len:
540+
if kind == '-' and (r != old_len or r == 0):
541541
changes.append((old + r, None, line))
542542
r += 1
543-
elif kind == '+' and i != new_len:
543+
elif kind == '+' and (i != new_len or i == 0):
544544
changes.append((None, new + i, line))
545545
i += 1
546546
elif kind == ' ' and r != old_len and i != new_len:

0 commit comments

Comments
 (0)