From: tip-bot for Yunlong Song <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@kernel.org, paulus@samba.org, wangnan0@huawei.com,
mingo@redhat.com, linux-kernel@vger.kernel.org, acme@redhat.com,
yunlong.song@huawei.com, a.p.zijlstra@chello.nl,
tglx@linutronix.de, hpa@zytor.com
Subject: [tip:perf/core] perf tools: Fix the bash completion problem of ' perf --*'
Date: Sat, 28 Feb 2015 01:34:37 -0800 [thread overview]
Message-ID: <tip-7335399a6a4bead9ef8b59ce7d811fc4e99ca98c@git.kernel.org> (raw)
In-Reply-To: <1425032491-20224-8-git-send-email-yunlong.song@huawei.com>
Commit-ID: 7335399a6a4bead9ef8b59ce7d811fc4e99ca98c
Gitweb: http://git.kernel.org/tip/7335399a6a4bead9ef8b59ce7d811fc4e99ca98c
Author: Yunlong Song <yunlong.song@huawei.com>
AuthorDate: Fri, 27 Feb 2015 18:21:31 +0800
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 27 Feb 2015 15:52:28 -0300
perf tools: Fix the bash completion problem of 'perf --*'
The perf-completion.sh uses a predefined string '--help --version
--exec-path --html-path --paginate --no-pager --perf-dir --work-tree
--debugfs-dir' for the bash completion of 'perf --*', which has two
problems:
Problem 1: If the options of perf are changed (see handle_options() in
perf.c), the perf-completion.sh has to be changed at the same time. If
not, the bash completion of 'perf --*' and the options which perf
really supports will be inconsistent.
Problem 2: When typing another single character after 'perf --', e.g.
'h', and hit TAB key to get the bash completion of 'perf --h', the
character 'h' disappears at once. This is not what we want, we wish the
bash completion can return '--help --html-path' and then we can
continue to choose one.
To solve this problem, we add '--list-opts' to perf, which now supports
'perf --list-opts' directly, and its result can be used in bash
completion now.
Example:
Before this patch:
$ perf --h <-- hit TAB key after character 'h'
$ perf -- <-- 'h' disappears and no required result
After this patch:
$ perf --h <-- hit TAB key after character 'h'
--help --html-path <-- the required result
Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ingo Molnar <mingo@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/1425032491-20224-8-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/perf-completion.sh | 6 ++----
tools/perf/perf.c | 27 +++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/tools/perf/perf-completion.sh b/tools/perf/perf-completion.sh
index 3356984..c2595e9 100644
--- a/tools/perf/perf-completion.sh
+++ b/tools/perf/perf-completion.sh
@@ -110,13 +110,11 @@ __perf_main ()
# List perf subcommands or long options
if [ $cword -eq 1 ]; then
if [[ $cur == --* ]]; then
- __perfcomp '--help --version \
- --exec-path --html-path --paginate --no-pager \
- --perf-dir --work-tree --debugfs-dir' -- "$cur"
+ cmds=$($cmd --list-opts)
else
cmds=$($cmd --list-cmds)
- __perfcomp "$cmds" "$cur"
fi
+ __perfcomp "$cmds" "$cur"
# List possible events for -e option
elif [[ $prev == "-e" && "${words[1]}" == @(record|stat|top) ]]; then
evts=$($cmd list --raw-dump)
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 3df2665..b857fcb 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -13,6 +13,7 @@
#include "util/quote.h"
#include "util/run-command.h"
#include "util/parse-events.h"
+#include "util/parse-options.h"
#include "util/debug.h"
#include <api/fs/debugfs.h>
#include <pthread.h>
@@ -125,6 +126,23 @@ static void commit_pager_choice(void)
}
}
+struct option options[] = {
+ OPT_ARGUMENT("help", "help"),
+ OPT_ARGUMENT("version", "version"),
+ OPT_ARGUMENT("exec-path", "exec-path"),
+ OPT_ARGUMENT("html-path", "html-path"),
+ OPT_ARGUMENT("paginate", "paginate"),
+ OPT_ARGUMENT("no-pager", "no-pager"),
+ OPT_ARGUMENT("perf-dir", "perf-dir"),
+ OPT_ARGUMENT("work-tree", "work-tree"),
+ OPT_ARGUMENT("debugfs-dir", "debugfs-dir"),
+ OPT_ARGUMENT("buildid-dir", "buildid-dir"),
+ OPT_ARGUMENT("list-cmds", "list-cmds"),
+ OPT_ARGUMENT("list-opts", "list-opts"),
+ OPT_ARGUMENT("debug", "debug"),
+ OPT_END()
+};
+
static int handle_options(const char ***argv, int *argc, int *envchanged)
{
int handled = 0;
@@ -225,6 +243,15 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
}
putchar('\n');
exit(0);
+ } else if (!strcmp(cmd, "--list-opts")) {
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(options)-1; i++) {
+ struct option *p = options+i;
+ printf("--%s ", p->long_name);
+ }
+ putchar('\n');
+ exit(0);
} else if (!strcmp(cmd, "--debug")) {
if (*argc < 2) {
fprintf(stderr, "No variable specified for --debug.\n");
next prev parent reply other threads:[~2015-02-28 9:35 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-27 10:21 [PATCH v3 0/7] perf core: Make some improvements and fixes Yunlong Song
2015-02-27 10:21 ` [PATCH v3 1/7] perf list: Sort the output of 'perf list' to view more clearly Yunlong Song
2015-02-27 13:57 ` Arnaldo Carvalho de Melo
2015-02-28 9:32 ` [tip:perf/core] " tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 2/7] perf list: Fix some inaccuracy problem when parsing the argument Yunlong Song
2015-02-28 9:33 ` [tip:perf/core] perf list: Allow listing events with 'tracepoint' prefix tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 3/7] perf list: Clean up the printing functions of hardware/software events Yunlong Song
2015-02-28 9:34 ` [tip:perf/core] " tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 4/7] perf list: Extend raw-dump to certain kind of events Yunlong Song
2015-02-27 15:20 ` Arnaldo Carvalho de Melo
2015-02-27 15:23 ` Arnaldo Carvalho de Melo
2015-02-28 9:34 ` [tip:perf/core] " tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 5/7] perf list: Avoid confusion of perf output and the next command prompt Yunlong Song
2015-02-28 9:33 ` [tip:perf/core] " tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 6/7] perf record: Remove the '--(null)' long_name for --list-opts Yunlong Song
2015-02-28 9:33 ` [tip:perf/core] perf tools: " tip-bot for Yunlong Song
2015-02-27 10:21 ` [PATCH v3 7/7] perf core: Fix the bash completion problem of 'perf --*' Yunlong Song
2015-02-28 9:34 ` tip-bot for Yunlong Song [this message]
2015-02-27 15:27 ` [PATCH v3 0/7] perf core: Make some improvements and fixes Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-7335399a6a4bead9ef8b59ce7d811fc4e99ca98c@git.kernel.org \
--to=tipbot@zytor.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=tglx@linutronix.de \
--cc=wangnan0@huawei.com \
--cc=yunlong.song@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.