]> granicus.if.org Git - python/commitdiff
getopt used to sort the long option names, in an attempt to simplify
authorTim Peters <tim.peters@gmail.com>
Fri, 29 Dec 2000 02:17:56 +0000 (02:17 +0000)
committerTim Peters <tim.peters@gmail.com>
Fri, 29 Dec 2000 02:17:56 +0000 (02:17 +0000)
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

index c93aad179c5d580c7dd614094b1634883486f9a0..a8ad645bee6480a371883beba1d424bf83a93013 100644 (file)
@@ -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