[Python-checkins] CVS: python/dist/src/Lib getopt.py,1.11,1.12
Tim Peters
python-dev@python.org
Wed, 27 Dec 2000 00:05:07 -0800
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv796/python/dist/src/lib
Modified Files:
getopt.py
Log Message:
Fix for SF bug
https://sourceforge.net/bugs/?func=detailbug&bug_id=126863&group_id=5470
"getopt long option handling broken". Tossed the excruciating logic in
long_has_args in favor of something obviously correct.
Index: getopt.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/getopt.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** getopt.py 2000/02/25 16:34:11 1.11
--- getopt.py 2000/12/27 08:05:05 1.12
***************
*** 67,71 ****
longopts = list(longopts)
longopts.sort()
! while args and args[0][:1] == '-' and args[0] != '-':
if args[0] == '--':
args = args[1:]
--- 67,71 ----
longopts = list(longopts)
longopts.sort()
! while args and args[0].startswith('-') and args[0] != '-':
if args[0] == '--':
args = args[1:]
***************
*** 81,87 ****
try:
i = opt.index('=')
- opt, optarg = opt[:i], opt[i+1:]
except ValueError:
optarg = None
has_arg, opt = long_has_args(opt, longopts)
--- 81,88 ----
try:
i = opt.index('=')
except ValueError:
optarg = None
+ else:
+ opt, optarg = opt[:i], opt[i+1:]
has_arg, opt = long_has_args(opt, longopts)
***************
*** 99,115 ****
# has_arg?
# full option name
def long_has_args(opt, longopts):
- optlen = len(opt)
for i in range(len(longopts)):
! x, y = longopts[i][:optlen], longopts[i][optlen:]
! if opt != x:
! continue
! if y != '' and y != '=' and i+1 < len(longopts):
! if opt == longopts[i+1][:optlen]:
! raise GetoptError('option --%s not a unique prefix' % opt, opt)
! if longopts[i][-1:] in ('=', ):
! return 1, longopts[i][:-1]
! return 0, longopts[i]
! raise GetoptError('option --%s not recognized' % opt, opt)
def do_shorts(opts, optstring, shortopts, args):
--- 100,132 ----
# has_arg?
# full option name
+ # Assumes longopts has been sorted (ASCII order).
def long_has_args(opt, longopts):
for i in range(len(longopts)):
! if longopts[i].startswith(opt):
! break
! else:
! raise GetoptError('option --%s not recognized' % opt, opt)
! # opt is a prefix of longopts[i]; find j s.t. opt is a prefix of
! # each possibility in longopts[i:j]
! j = i+1
! while j < len(longopts) and longopts[j].startswith(opt):
! j += 1
! possibilities = longopts[i:j]
! # Is there an exact match?
! if opt in possibilities:
! return 0, opt
! elif opt + '=' in possibilities:
! return 1, opt
! # No exact match, so better be unique.
! if len(possibilities) > 1:
! # XXX since possibilities contains all valid continuations, might be
! # nice to work them into the error msg
! raise GetoptError('option --%s not a unique prefix' % opt, opt)
! assert len(possibilities) == 1
! unique_match = possibilities[0]
! has_arg = unique_match.endswith('=')
! if has_arg:
! unique_match = unique_match[:-1]
! return has_arg, unique_match
def do_shorts(opts, optstring, shortopts, args):