]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
parser: fix parsing of patches with headings
authorJiri Benc <jbenc@redhat.com>
Thu, 28 Jun 2018 19:42:11 +0000 (15:42 -0400)
committerStephen Finucane <stephen@that.guru>
Sun, 14 Oct 2018 13:42:39 +0000 (14:42 +0100)
Some people tend to use lines full of '=' as a fancy way to format headings
in their commit messages in a rst-like style. However, the current parser
treats such lines as a beginning of a diff.

The only currently used tool that produces diffs with '=' lines is quilt in
the default configuration. However, even with quilt, the diff looks this
way:

    Index: dir/file
    ===================================================================
    --- dir.orig/file
    +++ dir/file
    @@ ...etc...

It's enough to match on the "Index:" line. The state of the state machine is
kept at 1 when it encounters the '=' line, thus it's safe to remove the
match on '=' completely.

[This prevents us from properly parsing metadata out of the changelog. -dcz ]

Signed-off-by: Jiri Benc <jbenc@redhat.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
(cherry picked from commit 67faf96ab96d93252c89967ef766bcbe8214c0fc)

patchwork/parser.py

index a40f9314a8252d0f56663adb1c2397f38a089831..a2db40373039f7d96b860281678795865a7e694c 100644 (file)
@@ -745,7 +745,7 @@ def parse_patch(content):
     # state specified the line we just saw, and what to expect next
     state = 0
     # 0: text
-    # 1: suspected patch header (diff, ====, Index:)
+    # 1: suspected patch header (diff, Index:)
     # 2: patch header line 1 (---)
     # 3: patch header line 2 (+++)
     # 4: patch hunk header line (@@ line)
@@ -753,7 +753,7 @@ def parse_patch(content):
     # 6: patch meta header (rename from/rename to)
     #
     # valid transitions:
-    #  0 -> 1 (diff, ===, Index:)
+    #  0 -> 1 (diff, Index:)
     #  0 -> 2 (---)
     #  1 -> 2 (---)
     #  2 -> 3 (+++)
@@ -776,7 +776,7 @@ def parse_patch(content):
         line += '\n'
 
         if state == 0:
-            if line.startswith('diff ') or line.startswith('===') \
+            if line.startswith('diff ') \
                     or line.startswith('Index: '):
                 state = 1
                 buf += line