[PATCH v2] Improve pull request URL matching regex

Konstantin Ryabitsev konstantin at linuxfoundation.org
Sun Nov 17 03:16:00 AEDT 2019


When git-request-pull output is pasted into a mail client instead of
mailed directly, the ref part of the pull URL may end up wrapped to the
next line.

Example: https://lore.kernel.org/r/294422a4-37b2-def5-5d32-8988f27c3a5b@gmail.com/

This change properly parses URLs both with and without newlines.

Signed-off-by: Konstantin Ryabitsev <konstantin at linuxfoundation.org>
---
 patchwork/parser.py                           |  4 +-
 .../0023-git-pull-request-newline-in-url.mbox | 48 +++++++++++++++++++
 patchwork/tests/test_parser.py                |  9 ++++
 3 files changed, 59 insertions(+), 2 deletions(-)
 create mode 100644 patchwork/tests/mail/0023-git-pull-request-newline-in-url.mbox

diff --git a/patchwork/parser.py b/patchwork/parser.py
index c794f09..d25c0df 100644
--- a/patchwork/parser.py
+++ b/patchwork/parser.py
@@ -939,11 +939,11 @@ def parse_patch(content):
 def parse_pull_request(content):
     git_re = re.compile(r'^The following changes since commit.*'
                         r'^are available in the git repository at:\n'
-                        r'^\s*([\S]+://[^\n]+)$',
+                        r'^\s*([\w+-]+(?:://|@)[\w/.@:~-]+[\s\\]*[\w/._-]*)\s*$',
                         re.DOTALL | re.MULTILINE | re.IGNORECASE)
     match = git_re.search(content)
     if match:
-        return match.group(1)
+        return re.sub('\s+', ' ', match.group(1)).strip()
     return None
 
 
diff --git a/patchwork/tests/mail/0023-git-pull-request-newline-in-url.mbox b/patchwork/tests/mail/0023-git-pull-request-newline-in-url.mbox
new file mode 100644
index 0000000..74c29ce
--- /dev/null
+++ b/patchwork/tests/mail/0023-git-pull-request-newline-in-url.mbox
@@ -0,0 +1,48 @@
+From mboxrd at z Thu Jan  1 00:00:00 1970
+To: soc at kernel.org
+From: Matthias Brugger <matthias.bgg at gmail.com>
+Subject: [GIT PULL] soc: updates for v5.5
+Message-ID: <294422a4-37b2-def5-5d32-8988f27c3a5b at gmail.com>
+Date: Mon, 11 Nov 2019 13:23:51 +0100
+
+Hi Olof and Arnd,
+
+Please have a look on the following updates of drivers/soc for v5.5
+
+Thanks a lot,
+Matthias
+
+---
+
+The following changes since commit 54ecb8f7028c5eb3d740bb82b0f1d90f2df63c5c:
+
+  Linux 5.4-rc1 (2019-09-30 10:35:40 -0700)
+
+are available in the Git repository at:
+
+  https://git.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/linux.git/
+tags/v5.4-next-soc
+
+for you to fetch changes up to 662c9d55c5ccb37f3920ecab9720f2ebf2a6ca18:
+
+  soc: mediatek: Refactor bus protection control (2019-11-07 10:11:04 +0100)
+
+----------------------------------------------------------------
+refactor code of mtk-scpsys
+
+----------------------------------------------------------------
+Weiyi Lu (5):
+      soc: mediatek: Refactor polling timeout and documentation
+      soc: mediatek: Refactor regulator control
+      soc: mediatek: Refactor clock control
+      soc: mediatek: Refactor sram control
+      soc: mediatek: Refactor bus protection control
+
+ drivers/soc/mediatek/mtk-scpsys.c | 214 ++++++++++++++++++++++++++------------
+ 1 file changed, 146 insertions(+), 68 deletions(-)
+
+_______________________________________________
+linux-arm-kernel mailing list
+linux-arm-kernel at lists.infradead.org
+http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+
diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py
index 85c6c52..0bf7158 100644
--- a/patchwork/tests/test_parser.py
+++ b/patchwork/tests/test_parser.py
@@ -630,6 +630,15 @@ class PatchParseTest(PatchTest):
             diff.startswith('diff --git a/arch/x86/include/asm/smp.h'),
             diff)
 
+    def test_git_pull_newline_in_url(self):
+        diff, message = self._find_content(
+            '0023-git-pull-request-newline-in-url.mbox')
+        pull_url = parse_pull_request(message)
+        self.assertEqual(
+            'https://git.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/'
+            'linux.git/ tags/v5.4-next-soc',
+            pull_url)
+
     def test_git_rename(self):
         diff, _ = self._find_content('0008-git-rename.mbox')
         self.assertTrue(diff is not None)

base-commit: 239fbd2ca1bf140bc61fdee922944624b23c812c
-- 
2.17.1



More information about the Patchwork mailing list