aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-10-13 13:40:00 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-10-13 13:42:37 +0800
commit3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9 (patch)
tree70319dbb066258f887d9b628aa0e7ad7020964a9
parent9d22330effa8d433ec39edc37ca4e3a1e3206b85 (diff)
downloadpatchwork-3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9.tar
patchwork-3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9.tar.gz
parser: Add support for rename-only patches
Yann E. MORIN reported a problem where patchwork drops patches with only renames: http://lists.busybox.net/pipermail/buildroot/2013-October/079999.html This change fixes the issue by adding a new state for patch 'meta' headers: header test which is not parsed as a hunk, but has the same behaviour as a hunk in that it will cause the patchbuf to be populated. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r--apps/patchwork/parser.py21
-rw-r--r--apps/patchwork/tests/mail/0008-git-rename.mbox24
-rw-r--r--apps/patchwork/tests/mail/0009-git-rename-with-diff.mbox32
-rw-r--r--apps/patchwork/tests/patchparser.py21
4 files changed, 98 insertions, 0 deletions
diff --git a/apps/patchwork/parser.py b/apps/patchwork/parser.py
index f460566..8295980 100644
--- a/apps/patchwork/parser.py
+++ b/apps/patchwork/parser.py
@@ -45,6 +45,7 @@ def parse_patch(text):
# 3: patch header line 2 (+++)
# 4: patch hunk header line (@@ line)
# 5: patch hunk content
+ # 6: patch meta header (rename from/rename to)
#
# valid transitions:
# 0 -> 1 (diff, ===, Index:)
@@ -54,6 +55,9 @@ def parse_patch(text):
# 3 -> 4 (@@ line)
# 4 -> 5 (patch content)
# 5 -> 1 (run out of lines from @@-specifed count)
+ # 1 -> 6 (rename from / rename to)
+ # 6 -> 2 (---)
+ # 6 -> 1 (other text)
#
# Suspected patch header is stored into buf, and appended to
# patchbuf if we find a following hunk. Otherwise, append to
@@ -85,6 +89,9 @@ def parse_patch(text):
if line.startswith('--- '):
state = 2
+ if line.startswith('rename from ') or line.startswith('rename to '):
+ state = 6
+
elif state == 2:
if line.startswith('+++ '):
state = 3
@@ -148,6 +155,20 @@ def parse_patch(text):
else:
state = 5
+ elif state == 6:
+ if line.startswith('rename to ') or line.startswith('rename from '):
+ patchbuf += buf + line
+ buf = ''
+
+ elif line.startswith('--- '):
+ patchbuf += buf + line
+ buf = ''
+ state = 2
+
+ else:
+ buf += line
+ state = 1
+
else:
raise Exception("Unknown state %d! (line '%s')" % (state, line))
diff --git a/apps/patchwork/tests/mail/0008-git-rename.mbox b/apps/patchwork/tests/mail/0008-git-rename.mbox
new file mode 100644
index 0000000..8277049
--- /dev/null
+++ b/apps/patchwork/tests/mail/0008-git-rename.mbox
@@ -0,0 +1,24 @@
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Subject: [Buildroot] [PATCH 01/11] package/rpi-userland: rename patches
+Date: Tue, 8 Oct 2013 22:09:47 +0000
+
+Rename patches to follow standard naming scheme.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+---
+ ...d-pkgconfig-files.patch => rpi-userland-000-add-pkgconfig-files.patch} | 0
+ ...erland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch} | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+ rename package/rpi-userland/{rpi-userland-add-pkgconfig-files.patch => rpi-userland-000-add-pkgconfig-files.patch} (100%)
+ rename package/rpi-userland/{rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch => rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch} (100%)
+
+diff --git a/package/rpi-userland/rpi-userland-add-pkgconfig-files.patch b/package/rpi-userland/rpi-userland-000-add-pkgconfig-files.patch
+similarity index 100%
+rename from package/rpi-userland/rpi-userland-add-pkgconfig-files.patch
+rename to package/rpi-userland/rpi-userland-000-add-pkgconfig-files.patch
+diff --git a/package/rpi-userland/rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch b/package/rpi-userland/rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+similarity index 100%
+rename from package/rpi-userland/rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+rename to package/rpi-userland/rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+--
+1.8.1.2
diff --git a/apps/patchwork/tests/mail/0009-git-rename-with-diff.mbox b/apps/patchwork/tests/mail/0009-git-rename-with-diff.mbox
new file mode 100644
index 0000000..761cfc1
--- /dev/null
+++ b/apps/patchwork/tests/mail/0009-git-rename-with-diff.mbox
@@ -0,0 +1,32 @@
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Subject: [Buildroot] [PATCH 01/11] package/rpi-userland: rename patches
+Date: Tue, 8 Oct 2013 22:09:47 +0000
+
+Rename patches to follow standard naming scheme.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+---
+ ...d-pkgconfig-files.patch => rpi-userland-000-add-pkgconfig-files.patch} | 0
+ ...erland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch} | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+ rename package/rpi-userland/{rpi-userland-add-pkgconfig-files.patch => rpi-userland-000-add-pkgconfig-files.patch} (100%)
+ rename package/rpi-userland/{rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch => rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch} (100%)
+
+diff --git a/package/rpi-userland/rpi-userland-add-pkgconfig-files.patch b/package/rpi-userland/rpi-userland-000-add-pkgconfig-files.patch
+similarity index 100%
+rename from package/rpi-userland/rpi-userland-add-pkgconfig-files.patch
+rename to package/rpi-userland/rpi-userland-000-add-pkgconfig-files.patch
+@@ -100,7 +100,7 @@
+ a
+ a
+-a
++b
+ c
+ c
+ c
+diff --git a/package/rpi-userland/rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch b/package/rpi-userland/rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+similarity index 100%
+rename from package/rpi-userland/rpi-userland-makefiles-0001-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+rename to package/rpi-userland/rpi-userland-001-makefiles-cmake-vmcs.cmake-allow-to-override-VMCS_IN.patch
+--
+1.8.1.2
diff --git a/apps/patchwork/tests/patchparser.py b/apps/patchwork/tests/patchparser.py
index 523b9c0..5662389 100644
--- a/apps/patchwork/tests/patchparser.py
+++ b/apps/patchwork/tests/patchparser.py
@@ -392,6 +392,27 @@ class GitPullSSHUrlTest(GitPullTest):
class GitPullHTTPUrlTest(GitPullTest):
mail_file = '0006-git-pull-request-http.mbox'
+class GitRenameOnlyTest(MBoxPatchTest):
+ mail_file = '0008-git-rename.mbox'
+
+ def testGitRename(self):
+ (patch, comment) = find_content(self.project, self.mail)
+ self.assertTrue(patch is not None)
+ self.assertTrue(comment is not None)
+ self.assertEqual(patch.content.count("\nrename from "), 2)
+ self.assertEqual(patch.content.count("\nrename to "), 2)
+
+class GitRenameWithDiffTest(MBoxPatchTest):
+ mail_file = '0009-git-rename-with-diff.mbox'
+
+ def testGitRename(self):
+ (patch, comment) = find_content(self.project, self.mail)
+ self.assertTrue(patch is not None)
+ self.assertTrue(comment is not None)
+ self.assertEqual(patch.content.count("\nrename from "), 2)
+ self.assertEqual(patch.content.count("\nrename to "), 2)
+ self.assertEqual(patch.content.count('\n-a\n+b'), 1)
+
class CVSFormatPatchTest(MBoxPatchTest):
mail_file = '0007-cvs-format-diff.mbox'