]> git.ozlabs.org Git - patchwork/commitdiff
parser: Fix parsing of patches with a trailing no-newline marker
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 18 Mar 2015 03:39:24 +0000 (14:39 +1100)
committerJeremy Kerr <jk@ozlabs.org>
Sun, 22 Mar 2015 13:27:09 +0000 (21:27 +0800)
If a patch ends with a "No newline at end of file" marker, it is
incorrectly considered part of the comment.

Add a testcase which shows the bug, and then fix the parser. The parser
fix is hopefully sufficiently specific so as to not break any other
unrelated case. But ..

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
apps/patchwork/parser.py
apps/patchwork/tests/mail/0011-no-newline-at-end-of-file.mbox [new file with mode: 0644]
apps/patchwork/tests/test_patchparser.py

index 76f409cd5b4aa66b9e22856717fed2bdba83ff68..a51a7b609af0c1df36a85f0d9fac4670efd9322e 100644 (file)
@@ -126,6 +126,11 @@ def parse_patch(text):
                 buf = ''
                 state = 2
 
+            elif hunk and line.startswith('\ No newline at end of file'):
+                # If we had a hunk and now we see this, it's part of the patch,
+                # and we're still expecting another @@ line.
+                patchbuf += line
+
             elif hunk:
                 state = 1
                 buf += line
diff --git a/apps/patchwork/tests/mail/0011-no-newline-at-end-of-file.mbox b/apps/patchwork/tests/mail/0011-no-newline-at-end-of-file.mbox
new file mode 100644 (file)
index 0000000..3ed0597
--- /dev/null
@@ -0,0 +1,45 @@
+Subject: [PATCH v3 5/5] selftests, powerpc: Add test for VPHN
+From: Greg Kurz <gkurz@linux.vnet.ibm.com>
+To: Michael Ellerman <mpe@ellerman.id.au>
+Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
+ linuxppc-dev@lists.ozlabs.org
+Date: Mon, 23 Feb 2015 16:14:44 +0100
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+The goal is to verify vphn_unpack_associativity() parses VPHN numbers
+correctly. We feed it with a variety of input values and compare with
+expected results.
+
+diff --git a/tools/testing/selftests/powerpc/Makefile b/tools/testing/selftests/powerpc/Makefile
+index 1d5e7ad..476b8dd 100644
+--- a/tools/testing/selftests/powerpc/Makefile
++++ b/tools/testing/selftests/powerpc/Makefile
+@@ -13,7 +13,7 @@ CFLAGS := -Wall -O2 -flto -Wall -Werror -DGIT_VERSION='"$(GIT_VERSION)"' -I$(CUR
+ export CC CFLAGS
+-TARGETS = pmu copyloops mm tm primitives stringloops
++TARGETS = pmu copyloops mm tm primitives stringloops vphn
+ endif
+diff --git a/tools/testing/selftests/powerpc/vphn/vphn.c b/tools/testing/selftests/powerpc/vphn/vphn.c
+new file mode 120000
+index 0000000..186b906
+--- /dev/null
++++ b/tools/testing/selftests/powerpc/vphn/vphn.c
+@@ -0,0 +1 @@
++../../../../../arch/powerpc/mm/vphn.c
+\ No newline at end of file
+diff --git a/tools/testing/selftests/powerpc/vphn/vphn.h b/tools/testing/selftests/powerpc/vphn/vphn.h
+new file mode 120000
+index 0000000..7131efe
+--- /dev/null
++++ b/tools/testing/selftests/powerpc/vphn/vphn.h
+@@ -0,0 +1 @@
++../../../../../arch/powerpc/mm/vphn.h
+\ No newline at end of file
+
+
index d9a24c1933b866d1397c5b5a8658c4f7b881980a..119936acab1e44519f0e32afa970ebb3cbb0361a 100644 (file)
@@ -433,6 +433,21 @@ class CharsetFallbackPatchTest(MBoxPatchTest):
         self.assertTrue(patch is not None)
         self.assertTrue(comment is not None)
 
+class NoNewlineAtEndOfFilePatchTest(MBoxPatchTest):
+    mail_file = '0011-no-newline-at-end-of-file.mbox'
+
+    def testPatch(self):
+        (patch, comment) = find_content(self.project, self.mail)
+        self.assertTrue(patch is not None)
+        self.assertTrue(comment is not None)
+        self.assertTrue(patch.content.startswith('diff --git a/tools/testing/selftests/powerpc/Makefile'))
+        # Confirm the trailing no newline marker doesn't end up in the comment
+        self.assertFalse(comment.content.rstrip().endswith('\ No newline at end of file'))
+        # Confirm it's instead at the bottom of the patch
+        self.assertTrue(patch.content.rstrip().endswith('\ No newline at end of file'))
+        # Confirm we got both markers
+        self.assertEqual(2, patch.content.count('\ No newline at end of file'))
+
 class DelegateRequestTest(TestCase):
     patch_filename = '0001-add-line.patch'
     msgid = '<1@example.com>'