Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf build: Add shellcheck to tools/perf scripts

Address shell check errors/warnings in perf-archive.sh and
perf-completion.sh.

Reviewed-by: James Clark <james.clark@arm.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Link: https://lore.kernel.org/r/20240409023216.2342032-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
646e22eb 20b0027c

+31 -8
+14
tools/perf/Build
··· 59 59 perf-y += scripts/ 60 60 61 61 gtk-y += ui/gtk/ 62 + 63 + ifdef SHELLCHECK 64 + SHELL_TESTS := $(wildcard *.sh) 65 + TEST_LOGS := $(SHELL_TESTS:%=%.shellcheck_log) 66 + else 67 + SHELL_TESTS := 68 + TEST_LOGS := 69 + endif 70 + 71 + $(OUTPUT)%.shellcheck_log: % 72 + $(call rule_mkdir) 73 + $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) 74 + 75 + perf-y += $(TEST_LOGS)
+1 -1
tools/perf/perf-archive.sh
··· 34 34 TARGET=`find . -regex "\./perf.*\.tar\.bz2"` 35 35 TARGET_NUM=`echo -n "$TARGET" | grep -c '^'` 36 36 37 - if [ -z "$TARGET" -o $TARGET_NUM -gt 1 ]; then 37 + if [ -z "$TARGET" ] || [ $TARGET_NUM -gt 1 ]; then 38 38 echo -e "Error: $TARGET_NUM files found for unpacking:\n$TARGET" 39 39 echo "Provide the requested file as an argument" 40 40 exit 1
+16 -7
tools/perf/perf-completion.sh
··· 108 108 109 109 __perfcomp () 110 110 { 111 + # Expansion of spaces to array is deliberate. 112 + # shellcheck disable=SC2207 111 113 COMPREPLY=( $( compgen -W "$1" -- "$2" ) ) 112 114 } 113 115 ··· 129 127 130 128 let i=cword-1 131 129 cmds_=$($cmd $1 --list-cmds) 132 - prev_skip_opts=() 130 + prev_skip_opts="" 133 131 while [ $i -ge 0 ]; do 134 - if [[ ${words[i]} == $1 ]]; then 132 + if [[ ${words[i]} == "$1" ]]; then 135 133 return 136 134 fi 137 135 for cmd_ in $cmds_; do 138 - if [[ ${words[i]} == $cmd_ ]]; then 136 + if [[ ${words[i]} == "$cmd_" ]]; then 139 137 prev_skip_opts=${words[i]} 140 138 return 141 139 fi ··· 166 164 $prev_skip_opts == @(record|stat|top) ]]; then 167 165 168 166 local cur1=${COMP_WORDS[COMP_CWORD]} 169 - local raw_evts=$($cmd list --raw-dump hw sw cache tracepoint pmu sdt) 167 + local raw_evts 170 168 local arr s tmp result cpu_evts 171 169 170 + raw_evts=$($cmd list --raw-dump hw sw cache tracepoint pmu sdt) 172 171 # aarch64 doesn't have /sys/bus/event_source/devices/cpu/events 173 172 if [[ `uname -m` != aarch64 ]]; then 174 173 cpu_evts=$(ls /sys/bus/event_source/devices/cpu/events) ··· 178 175 if [[ "$cur1" == */* && ${cur1#*/} =~ ^[A-Z] ]]; then 179 176 OLD_IFS="$IFS" 180 177 IFS=" " 178 + # Expansion of spaces to array is deliberate. 179 + # shellcheck disable=SC2206 181 180 arr=($raw_evts) 182 181 IFS="$OLD_IFS" 183 182 184 - for s in ${arr[@]} 183 + for s in "${arr[@]}" 185 184 do 186 185 if [[ "$s" == *cpu/* ]]; then 187 186 tmp=${s#*cpu/} ··· 205 200 fi 206 201 elif [[ $prev == @("--pfm-events") && 207 202 $prev_skip_opts == @(record|stat|top) ]]; then 208 - local evts=$($cmd list --raw-dump pfm) 203 + local evts 204 + evts=$($cmd list --raw-dump pfm) 209 205 __perfcomp "$evts" "$cur" 210 206 elif [[ $prev == @("-M"|"--metrics") && 211 207 $prev_skip_opts == @(stat) ]]; then 212 - local metrics=$($cmd list --raw-dump metric metricgroup) 208 + local metrics 209 + metrics=$($cmd list --raw-dump metric metricgroup) 213 210 __perfcomp "$metrics" "$cur" 214 211 else 215 212 # List subcommands for perf commands ··· 285 278 let cword=CURRENT-1 286 279 emulate ksh -c __perf_main 287 280 let _ret && _default && _ret=0 281 + # _ret is only assigned 0 or 1, disable inaccurate analysis. 282 + # shellcheck disable=SC2152 288 283 return _ret 289 284 } 290 285