]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: sort best-matched commond by req argument count 28510/head
authorChang Liu <liuchang0812@gmail.com>
Wed, 12 Jun 2019 11:54:17 +0000 (19:54 +0800)
committerChang Liu <liuchang0812@gmail.com>
Thu, 13 Jun 2019 08:15:58 +0000 (16:15 +0800)
Fixes: http://tracker.ceph.com/issues/40292
Signed-off-by: Chang Liu <liuchang0812@gmail.com>
src/pybind/ceph_argparse.py

index aedbcb02e20c132852b0dfb32c1330bf907d02da..2e5b7f363c1bc90858b6ba72964fbb9630683852 100644 (file)
@@ -1154,10 +1154,15 @@ def validate_command(sigdict, args, verbose=False):
         else:
             bestcmds.append(cmd)
 
-    # Sort bestcmds by number of args so we can try shortest first
+    # Sort bestcmds by number of req args so we can try shortest first
     # (relies on a cmdsig being key,val where val is a list of len 1)
-    bestcmds_sorted = sorted(bestcmds, key=lambda c: len(c['sig']))
 
+    def grade(cmd):
+      # prefer optional arguments over required ones
+      sigs = cmd['sig']
+      return sum(map(lambda sig: sig.req, sigs))
+
+    bestcmds_sorted = sorted(bestcmds, key=grade)
     if verbose:
         print("bestcmds_sorted: ", file=sys.stderr)
         pprint.PrettyPrinter(stream=sys.stderr).pprint(bestcmds_sorted)