]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
[3.8] bpo-39546: argparse: Honor allow_abbrev=False for specified prefix_chars (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 18 Feb 2020 11:14:07 +0000 (03:14 -0800)
committerGitHub <noreply@github.com>
Tue, 18 Feb 2020 11:14:07 +0000 (03:14 -0800)
commite412cbba52e7cf6699720d99a4b88baef92db7b2
treeb7c980cf29ccfbfec340dfd059bec1392e4f8cf0
parent7fd752c1bc637aeca2bd122d07c0ebc379d0d8ca
[3.8] bpo-39546: argparse: Honor allow_abbrev=False for specified prefix_chars (GH-18337) (GH-18543)

When `allow_abbrev` was first added, disabling the abbreviation of
long options broke the grouping of short flags ([bpo-26967](https://bugs.python.org/issue26967)).  As a fix,
b1e4d1b603 (contained in v3.8) ignores `allow_abbrev=False` for a
given argument string if the string does _not_ start with "--"
(i.e. it doesn't look like a long option).

This fix, however, doesn't take into account that long options can
start with alternative characters specified via `prefix_chars`,
introducing a regression: `allow_abbrev=False` has no effect on long
options that start with an alternative prefix character.

The most minimal fix would be to replace the "starts with --" check
with a "starts with two prefix_chars characters".  But
`_get_option_tuples` already distinguishes between long and short
options, so let's instead piggyback off of that check by moving the
`allow_abbrev` condition into `_get_option_tuples`.

https://bugs.python.org/issue39546
(cherry picked from commit 8edfc47baec7ff4cb1b9db83dd35c8ffc1d498a4)

Co-authored-by: Kyle Meyer <kyle@kyleam.com>
https://bugs.python.org/issue39546

Automerge-Triggered-By: @encukou
Lib/argparse.py
Lib/test/test_argparse.py
Misc/ACKS
Misc/NEWS.d/next/Library/2020-02-03-15-12-51.bpo-39546._Kj0Pn.rst [new file with mode: 0644]