diff options
| author | Jeremy Kerr <jk@ozlabs.org> | 2013-10-13 13:40:00 +0800 | 
|---|---|---|
| committer | Jeremy Kerr <jk@ozlabs.org> | 2013-10-13 13:42:37 +0800 | 
| commit | 3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9 (patch) | |
| tree | 70319dbb066258f887d9b628aa0e7ad7020964a9 | |
| parent | 9d22330effa8d433ec39edc37ca4e3a1e3206b85 (diff) | |
| download | patchwork-3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9.tar.bz2 patchwork-3dbec78dbd8e80729cf208d1e68f550b7d7ba5a9.tar.xz  | |
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.py | 21 | ||||
| -rw-r--r-- | apps/patchwork/tests/mail/0008-git-rename.mbox | 24 | ||||
| -rw-r--r-- | apps/patchwork/tests/mail/0009-git-rename-with-diff.mbox | 32 | ||||
| -rw-r--r-- | apps/patchwork/tests/patchparser.py | 21 | 
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'  | 
