perf tools: Fix the bash completion for listing options of perf subcommand
authorYunlong Song <yunlong.song@huawei.com>
Wed, 18 Mar 2015 13:35:46 +0000 (21:35 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 19 Mar 2015 16:48:56 +0000 (13:48 -0300)
The bash completion does not support listing options for 'perf
kvm|kmem|mem|lock|sched --<TAB>', where 'kvm|kmem|mem|lock|sched' are
all subcommands of perf.

Example:

Before this patch:

 $ perf kvm --<TAB>
 $

As shown above, the options of perf kvm does not come out.

After this patch:

 $ perf kvm --<TAB>
 --alloc    --caller   --input    --line     --raw-ip   --sort
 --verbose

As shown above, the options of perf kvm can come out now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1426685758-25488-2-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/perf-completion.sh

index c2595e9..4822ed3 100644 (file)
@@ -119,15 +119,18 @@ __perf_main ()
        elif [[ $prev == "-e" && "${words[1]}" == @(record|stat|top) ]]; then
                evts=$($cmd list --raw-dump)
                __perfcomp_colon "$evts" "$cur"
-       # List subcommands for perf commands
-       elif [[ $prev == @(kvm|kmem|mem|lock|sched) ]]; then
-               subcmds=$($cmd $prev --list-cmds)
-               __perfcomp_colon "$subcmds" "$cur"
-       # List long option names
-       elif [[ $cur == --* ]];  then
-               subcmd=${words[1]}
-               opts=$($cmd $subcmd --list-opts)
-               __perfcomp "$opts" "$cur"
+       else
+               # List subcommands for perf commands
+               if [[ $prev == @(kvm|kmem|mem|lock|sched) ]]; then
+                       subcmds=$($cmd $prev --list-cmds)
+                       __perfcomp_colon "$subcmds" "$cur"
+               fi
+               # List long option names
+               if [[ $cur == --* ]];  then
+                       subcmd=${words[1]}
+                       opts=$($cmd $subcmd --list-opts)
+                       __perfcomp "$opts" "$cur"
+               fi
        fi
 }