From b04d936fc1b509c29c0da96877cc84872d223431 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Tue, 9 Apr 2024 12:23:31 -0400 Subject: [PATCH] Fix argument parsing in newer Python. (#635) The comment in the code has more details, but as of https://github.com/python/cpython/pull/114180 we need to check for both a 3-tuple and a 4-tuple. Signed-off-by: Chris Lalancette --- colcon_core/command.py | 10 +++++++++- test/spell_check.words | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/colcon_core/command.py b/colcon_core/command.py index fd159be10591..228d3b369099 100644 --- a/colcon_core/command.py +++ b/colcon_core/command.py @@ -226,7 +226,15 @@ def create_parser(environment_variables_group_name): def _parse_optional(self, arg_string): result = super()._parse_optional(arg_string) - if result == (None, arg_string, None): + # Up until https://github.com/python/cpython/pull/114180 , + # _parse_optional() returned a 3-tuple when it couldn't classify + # the option. As of that PR (which is in Python 3.13, and + # backported to Python 3.12), it returns a 4-tuple. Check for + # either here. + if result in ( + (None, arg_string, None), + (None, arg_string, None, None), + ): # in the case there the arg is classified as an unknown 'O' # override that and classify it as an 'A' return None diff --git a/test/spell_check.words b/test/spell_check.words index 96051a0ff2c3..83548464c76a 100644 --- a/test/spell_check.words +++ b/test/spell_check.words @@ -3,6 +3,7 @@ apache argparse asyncio autouse +backported basepath bazqux blocklist @@ -17,6 +18,7 @@ configparser contextlib coroutine coroutines +cpython datetime debian debinfo -- 2.42.0