[PATCH] parser: recognise git commit consisting only of empty new file
Andrew Donnellan
andrew.donnellan at au1.ibm.com
Thu Feb 28 15:38:45 AEDT 2019
On 28/2/19 3:29 pm, Daniel Axtens wrote:
> Commits with only an empty new file are liable to be missed.
> The parser state machine doesn't recognise the headers "new
> file mode" and "index": teach it about them.
>
> Add a test to demonstrate.
>
> It's a little bit academic as you don't usually send patches like
> that but sometimes you do, especially if you're a snowpatch dev :)
>
> Closes: #256
> Reported-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> Signed-off-by: Daniel Axtens <dja at axtens.net>
LGTM, thanks for fixing this
Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> ---
>
> Apologies for the long radio silence. I'm now in a job where Patchwork
> is slightly adjacent to my role, so I have a bit more flexibility to work
> on it. The usual lack of promises apply.
> ---
> patchwork/parser.py | 10 +++---
> .../tests/mail/0021-git-empty-new-file.mbox | 32 +++++++++++++++++++
> patchwork/tests/test_parser.py | 5 +++
> 3 files changed, 43 insertions(+), 4 deletions(-)
> create mode 100644 patchwork/tests/mail/0021-git-empty-new-file.mbox
>
> diff --git a/patchwork/parser.py b/patchwork/parser.py
> index 946b66851d7c..712780a498c4 100644
> --- a/patchwork/parser.py
> +++ b/patchwork/parser.py
> @@ -742,7 +742,7 @@ def parse_patch(content):
> # 3: patch header line 2 (+++)
> # 4: patch hunk header line (@@ line)
> # 5: patch hunk content
> - # 6: patch meta header (rename from/rename to)
> + # 6: patch meta header (rename from/rename to/new file/index)
> #
> # valid transitions:
> # 0 -> 1 (diff, Index:)
> @@ -752,7 +752,7 @@ def parse_patch(content):
> # 3 -> 4 (@@ line)
> # 4 -> 5 (patch content)
> # 5 -> 1 (run out of lines from @@-specifed count)
> - # 1 -> 6 (rename from / rename to)
> + # 1 -> 6 (rename from / rename to / new file / index)
> # 6 -> 2 (---)
> # 6 -> 1 (other text)
> #
> @@ -782,7 +782,8 @@ def parse_patch(content):
> if line.startswith('--- '):
> state = 2
>
> - if line.startswith(('rename from ', 'rename to ')):
> + if line.startswith(('rename from ', 'rename to ',
> + 'new file mode ', 'index ')):
> state = 6
> elif state == 2:
> if line.startswith('+++ '):
> @@ -843,7 +844,8 @@ def parse_patch(content):
> else:
> state = 5
> elif state == 6:
> - if line.startswith(('rename to ', 'rename from ')):
> + if line.startswith(('rename to ', 'rename from ',
> + 'new file mode ', 'index ')):
> patchbuf += buf + line
> buf = ''
> elif line.startswith('--- '):
> diff --git a/patchwork/tests/mail/0021-git-empty-new-file.mbox b/patchwork/tests/mail/0021-git-empty-new-file.mbox
> new file mode 100644
> index 000000000000..c3be48e6eb39
> --- /dev/null
> +++ b/patchwork/tests/mail/0021-git-empty-new-file.mbox
> @@ -0,0 +1,32 @@
> +From andrew.donnellan at au1.ibm.com Thu Feb 28 00:37:42 2019
> +Delivered-To: dja at axtens.net
> +Received: by 2002:a4a:2812:0:0:0:0:0 with SMTP id h18csp2242ooa;
> + Wed, 27 Feb 2019 16:37:59 -0800 (PST)
> +From: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> +Subject: [snowpatch] [PATCH 1/3] Test commit; please ignore
> +To: Daniel Axtens <dja at axtens.net>
> +Date: Thu, 28 Feb 2019 11:37:42 +1100
> +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
> + Thunderbird/60.5.1
> +MIME-Version: 1.0
> +Content-Language: en-AU
> +
> +
> +Doing some snowpatching.
> +---
> + banana | 0
> + 1 file changed, 0 insertions(+), 0 deletions(-)
> + create mode 100644 banana
> +
> +diff --git a/banana b/banana
> +new file mode 100644
> +index 000000000000..e69de29bb2d1
> +--
> +2.11.0
> +
> +_______________________________________________
> +snowpatch mailing list
> +snowpatch at lists.ozlabs.org
> +https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.ozlabs.org_listinfo_snowpatch&d=DwIDAg&c=jf_iaSHvJObTbx-siA1ZOg&r=-pHOU8dm1U-U1crivyxKr_-xvZrIBB8YUqvA3el0Ee0&m=VWJFv-r8DBhr5gE3qkDHngtXenfi5deVGQpQcAyKocY&s=pn_W97wan_5Uwi-2wli6N87gaeoNFy7pchZS_cPHtOY&e=
> +
> +
> diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py
> index 664edd5bab44..ddbcf5b15a19 100644
> --- a/patchwork/tests/test_parser.py
> +++ b/patchwork/tests/test_parser.py
> @@ -583,6 +583,11 @@ class PatchParseTest(PatchTest):
> self.assertEqual(diff.count("\nrename to "), 2)
> self.assertEqual(diff.count('\n-a\n+b'), 1)
>
> + def test_git_new_empty_file(self):
> + diff, message = self._find_content('0021-git-empty-new-file.mbox')
> + self.assertTrue(diff is not None)
> + self.assertTrue(message is not None)
> +
> def test_cvs_format(self):
> diff, message = self._find_content('0007-cvs-format-diff.mbox')
> self.assertTrue(diff.startswith('Index'))
>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com IBM Australia Limited
More information about the Patchwork
mailing list