[options] Better ambiguous option resolution

Eg: `--write-auto` no longer results in
> ambiguous option: --write-auto (--write-auto-subs, --write-automatic-subs?)
This commit is contained in:
pukkandan 2022-02-10 21:07:08 +05:30
parent 1209b6ca5b
commit db2e129ca0
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39

View File

@ -117,6 +117,19 @@ def parseOpts(overrideArguments=None, ignore_config_files='if_override'):
return parser, opts, args
class _YoutubeDLOptionParser(optparse.OptionParser):
# optparse is deprecated since python 3.2. So assume a stable interface even for private methods
def _match_long_opt(self, opt):
"""Improve ambigious argument resolution by comparing option objects instead of argument strings"""
try:
return super()._match_long_opt(opt)
except optparse.AmbiguousOptionError as e:
if len(set(self._long_opt[p] for p in e.possibilities)) == 1:
return e.possibilities[0]
raise
def create_parser():
def _format_option_string(option):
''' ('-o', '--option') -> -o, --format METAVAR'''
@ -215,7 +228,7 @@ def create_parser():
'conflict_handler': 'resolve',
}
parser = optparse.OptionParser(**compat_kwargs(kw))
parser = _YoutubeDLOptionParser(**compat_kwargs(kw))
general = optparse.OptionGroup(parser, 'General Options')
general.add_option(