From b39c91ca73b9d91a3c3fce33bb738b41228811da Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Tue, 9 Apr 2024 09:52:01 -0400 Subject: [PATCH] Fix argument parsing in newer Python. 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 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/colcon_core/command.py b/colcon_core/command.py index fd159be1..413ae563 100644 --- a/colcon_core/command.py +++ b/colcon_core/command.py @@ -226,7 +226,14 @@ class CustomArgumentParser(argparse.ArgumentParser): 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