perf tools: Improve ambiguous option help message

Currently if an option name is ambiguous it only prints first two
matched option names but no help.  It'd be better it could show all
possible names and help messages too.

Before:
  $ perf report --show
    Error: Ambiguous option: show (could be --show-total-period or
                                            --show-ref-call-graph)
   Usage: perf report [<options>]

After:
  $ perf report --show
    Error: Ambiguous option: show (could be --show-total-period or
                                            --show-ref-call-graph)
   Usage: perf report [<options>]

      -n, --show-nr-samples
                              Show a column with the number of samples
          --showcpuutilization
                              Show sample percentage for different cpu modes
      -I, --show-info         Display extended information about perf.data file
          --show-total-period
                              Show a column with the sum of periods
          --show-ref-call-graph
                              Show callgraph from reference event

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1445701767-12731-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Namhyung Kim 2015-10-25 00:49:24 +09:00 committed by Arnaldo Carvalho de Melo
parent 4341801873
commit a5f4a6932e
1 changed files with 8 additions and 9 deletions

View File

@ -770,24 +770,23 @@ int parse_options_usage(const char * const *usagestr,
opt: opt:
for ( ; opts->type != OPTION_END; opts++) { for ( ; opts->type != OPTION_END; opts++) {
if (short_opt) { if (short_opt) {
if (opts->short_name == *optstr) if (opts->short_name == *optstr) {
print_option_help(opts, 0);
break; break;
}
continue; continue;
} }
if (opts->long_name == NULL) if (opts->long_name == NULL)
continue; continue;
if (!prefixcmp(optstr, opts->long_name)) if (!prefixcmp(opts->long_name, optstr))
break; print_option_help(opts, 0);
if (!prefixcmp(optstr, "no-") && if (!prefixcmp("no-", optstr) &&
!prefixcmp(optstr + 3, opts->long_name)) !prefixcmp(opts->long_name, optstr + 3))
break; print_option_help(opts, 0);
} }
if (opts->type != OPTION_END)
print_option_help(opts, 0);
return PARSE_OPT_HELP; return PARSE_OPT_HELP;
} }