perf tools: Initial bash completion support
This implements bash completion for perf subcommands such as record, report, script, probe, etc... Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1344522713-27951-2-git-send-email-fweisbec@gmail.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
d25dcba854
commit
98a4179c9a
@@ -951,6 +951,7 @@ install: all
|
|||||||
$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
|
$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
|
||||||
$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'
|
$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'
|
||||||
$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
|
$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
|
||||||
|
$(INSTALL) -m 755 bash_completion $(DESTDIR_SQ)/etc/bash_completion.d/perf
|
||||||
|
|
||||||
install-python_ext:
|
install-python_ext:
|
||||||
$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
|
$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
|
||||||
|
22
tools/perf/bash_completion
Normal file
22
tools/perf/bash_completion
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# perf completion
|
||||||
|
|
||||||
|
have perf &&
|
||||||
|
_perf()
|
||||||
|
{
|
||||||
|
local cur cmd
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
_get_comp_words_by_ref cur
|
||||||
|
|
||||||
|
cmd=${COMP_WORDS[0]}
|
||||||
|
|
||||||
|
# List perf subcommands
|
||||||
|
if [ $COMP_CWORD -eq 1 ]; then
|
||||||
|
cmds=$($cmd --list-cmds)
|
||||||
|
COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
|
||||||
|
# Fall down to list regular files
|
||||||
|
else
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
} &&
|
||||||
|
complete -F _perf perf
|
@@ -24,6 +24,37 @@ const char perf_more_info_string[] =
|
|||||||
int use_browser = -1;
|
int use_browser = -1;
|
||||||
static int use_pager = -1;
|
static int use_pager = -1;
|
||||||
|
|
||||||
|
struct cmd_struct {
|
||||||
|
const char *cmd;
|
||||||
|
int (*fn)(int, const char **, const char *);
|
||||||
|
int option;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct cmd_struct commands[] = {
|
||||||
|
{ "buildid-cache", cmd_buildid_cache, 0 },
|
||||||
|
{ "buildid-list", cmd_buildid_list, 0 },
|
||||||
|
{ "diff", cmd_diff, 0 },
|
||||||
|
{ "evlist", cmd_evlist, 0 },
|
||||||
|
{ "help", cmd_help, 0 },
|
||||||
|
{ "list", cmd_list, 0 },
|
||||||
|
{ "record", cmd_record, 0 },
|
||||||
|
{ "report", cmd_report, 0 },
|
||||||
|
{ "bench", cmd_bench, 0 },
|
||||||
|
{ "stat", cmd_stat, 0 },
|
||||||
|
{ "timechart", cmd_timechart, 0 },
|
||||||
|
{ "top", cmd_top, 0 },
|
||||||
|
{ "annotate", cmd_annotate, 0 },
|
||||||
|
{ "version", cmd_version, 0 },
|
||||||
|
{ "script", cmd_script, 0 },
|
||||||
|
{ "sched", cmd_sched, 0 },
|
||||||
|
{ "probe", cmd_probe, 0 },
|
||||||
|
{ "kmem", cmd_kmem, 0 },
|
||||||
|
{ "lock", cmd_lock, 0 },
|
||||||
|
{ "kvm", cmd_kvm, 0 },
|
||||||
|
{ "test", cmd_test, 0 },
|
||||||
|
{ "inject", cmd_inject, 0 },
|
||||||
|
};
|
||||||
|
|
||||||
struct pager_config {
|
struct pager_config {
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
int val;
|
int val;
|
||||||
@@ -160,6 +191,14 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
|||||||
fprintf(stderr, "dir: %s\n", debugfs_mountpoint);
|
fprintf(stderr, "dir: %s\n", debugfs_mountpoint);
|
||||||
if (envchanged)
|
if (envchanged)
|
||||||
*envchanged = 1;
|
*envchanged = 1;
|
||||||
|
} else if (!strcmp(cmd, "--list-cmds")) {
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(commands); i++) {
|
||||||
|
struct cmd_struct *p = commands+i;
|
||||||
|
printf("%s ", p->cmd);
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unknown option: %s\n", cmd);
|
fprintf(stderr, "Unknown option: %s\n", cmd);
|
||||||
usage(perf_usage_string);
|
usage(perf_usage_string);
|
||||||
@@ -245,12 +284,6 @@ const char perf_version_string[] = PERF_VERSION;
|
|||||||
*/
|
*/
|
||||||
#define NEED_WORK_TREE (1<<2)
|
#define NEED_WORK_TREE (1<<2)
|
||||||
|
|
||||||
struct cmd_struct {
|
|
||||||
const char *cmd;
|
|
||||||
int (*fn)(int, const char **, const char *);
|
|
||||||
int option;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
|
static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
@@ -296,30 +329,6 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
|
|||||||
static void handle_internal_command(int argc, const char **argv)
|
static void handle_internal_command(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
const char *cmd = argv[0];
|
const char *cmd = argv[0];
|
||||||
static struct cmd_struct commands[] = {
|
|
||||||
{ "buildid-cache", cmd_buildid_cache, 0 },
|
|
||||||
{ "buildid-list", cmd_buildid_list, 0 },
|
|
||||||
{ "diff", cmd_diff, 0 },
|
|
||||||
{ "evlist", cmd_evlist, 0 },
|
|
||||||
{ "help", cmd_help, 0 },
|
|
||||||
{ "list", cmd_list, 0 },
|
|
||||||
{ "record", cmd_record, 0 },
|
|
||||||
{ "report", cmd_report, 0 },
|
|
||||||
{ "bench", cmd_bench, 0 },
|
|
||||||
{ "stat", cmd_stat, 0 },
|
|
||||||
{ "timechart", cmd_timechart, 0 },
|
|
||||||
{ "top", cmd_top, 0 },
|
|
||||||
{ "annotate", cmd_annotate, 0 },
|
|
||||||
{ "version", cmd_version, 0 },
|
|
||||||
{ "script", cmd_script, 0 },
|
|
||||||
{ "sched", cmd_sched, 0 },
|
|
||||||
{ "probe", cmd_probe, 0 },
|
|
||||||
{ "kmem", cmd_kmem, 0 },
|
|
||||||
{ "lock", cmd_lock, 0 },
|
|
||||||
{ "kvm", cmd_kvm, 0 },
|
|
||||||
{ "test", cmd_test, 0 },
|
|
||||||
{ "inject", cmd_inject, 0 },
|
|
||||||
};
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
static const char ext[] = STRIP_EXTENSION;
|
static const char ext[] = STRIP_EXTENSION;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user