Browse Source

Fix issue #3 Broken at strange hunk head in a valid git patch

Matthew Wang 12 years ago
parent
commit
1126142d21
3 changed files with 20 additions and 3 deletions
  1. 1
    1
      Makefile
  2. 6
    2
      src/cdiff.py
  3. 13
    0
      tests/strange.diff

+ 1
- 1
Makefile View File

@@ -1,6 +1,6 @@
1 1
 # Makefile for testing
2 2
 
3
-TESTS = git svn crlf
3
+TESTS = git svn crlf strange
4 4
 
5 5
 .PHONY: dogfood test $(TESTS)
6 6
 

+ 6
- 2
src/cdiff.py View File

@@ -51,7 +51,7 @@ class Hunk(object):
51 51
     def __init__(self, hunk_header, old_addr, new_addr):
52 52
         self._hunk_header = hunk_header
53 53
         self._old_addr = old_addr   # tuple (start, offset)
54
-        self._new_addr = new_addr   # tuple group (start, offset)
54
+        self._new_addr = new_addr   # tuple (start, offset)
55 55
         self._hunk_list = []        # list of tuple (attr, line)
56 56
 
57 57
     def get_header(self):
@@ -396,7 +396,11 @@ class DiffParser(object):
396 396
                     a = hunk_header.split()[1].split(',')   # -3 7
397 397
                     old_addr = (int(a[0][1:]), int(a[1]))
398 398
                     b = hunk_header.split()[2].split(',')   # +3 6
399
-                    new_addr = (int(b[0][1:]), int(b[1]))
399
+                    if len(b) > 1:
400
+                        new_addr = (int(b[0][1:]), int(b[1]))
401
+                    else:
402
+                        # @@ -0,0 +1 @@
403
+                        new_addr = (int(b[0][1:]), 0)
400 404
                     hunk = Hunk(hunk_header, old_addr, new_addr)
401 405
 
402 406
             elif Udiff.is_old(stream[0]) or Udiff.is_new(stream[0]) or \

+ 13
- 0
tests/strange.diff View File

@@ -0,0 +1,13 @@
1
+commit 57263369bd810ba3a2c2dfd32a905f1e7d59cc6d
2
+Author: Matthew Wang <XXXXXXX@gmail.com>
3
+Date:   Sun Jan 6 21:56:54 2013 +0800
4
+
5
+    simplify with seperate node.py
6
+
7
+diff --git a/.gitignore b/.gitignore
8
+new file mode 100644
9
+index 0000000..0d20b64
10
+--- /dev/null
11
++++ b/.gitignore
12
+@@ -0,0 +1 @@
13
++*.pyc