From d31b6328e180af4b10e2c942a1437d5b8cb2c2e6 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Fri, 29 Dec 2000 02:17:56 +0000 Subject: [PATCH] getopt used to sort the long option names, in an attempt to simplify the logic. That resulted in a bug. My previous getopt checkin repaired the bug but left the sorting. The solution is significantly simpler if we don't bother sorting at all, so this checkin gets rid of the sort and the code that relied on it. --- Lib/getopt.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/Lib/getopt.py b/Lib/getopt.py index c93aad179c5..a8ad645bee6 100644 --- a/Lib/getopt.py +++ b/Lib/getopt.py @@ -65,7 +65,6 @@ def getopt(args, shortopts, longopts = []): longopts = [longopts] else: longopts = list(longopts) - longopts.sort() while args and args[0].startswith('-') and args[0] != '-': if args[0] == '--': args = args[1:] @@ -99,19 +98,10 @@ def do_longs(opts, opt, longopts, args): # Return: # 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: + possibilities = [o for o in longopts if o.startswith(opt)] + if not possibilities: 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