1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0+
3#
4# Invoke a text editor on all console.log files for all runs with diagnostics,
5# that is, on all such files having a console.log.diags counterpart.
6# Note that both console.log.diags and console.log are passed to the
7# editor (currently defaulting to "vi"), allowing the user to get an
8# idea of what to search for in the console.log file.
9#
10# Usage: kvm-find-errors.sh directory
11#
12# The "directory" above should end with the date/time directory, for example,
13# "tools/testing/selftests/rcutorture/res/2018.02.25-14:27:27".
14# Returns error status reflecting the success (or not) of the specified run.
15#
16# Copyright (C) IBM Corporation, 2018
17#
18# Author: Paul E. McKenney <paulmck@linux.ibm.com>
19
20rundir="${1}"
21if test -z "$rundir" -o ! -d "$rundir"
22then
23	echo Directory "$rundir" not found.
24	echo Usage: $0 directory
25	exit 1
26fi
27editor=${EDITOR-vi}
28
29# Find builds with errors
30files=
31for i in ${rundir}/*/Make.out
32do
33	scenariodir="`dirname $i`"
34	scenariobasedir="`echo ${scenariodir} | sed -e 's/\.[0-9]*$//'`"
35	if grep -E -q "error:|warning:|^ld: .*undefined reference to" < $i
36	then
37		grep -E "error:|warning:|^ld: .*undefined reference to" < $i > $i.diags
38		files="$files $i.diags $i"
39	elif ! test -f ${scenariobasedir}/vmlinux && ! test -f ${scenariobasedir}/vmlinux.xz && ! test -f "${rundir}/re-run"
40	then
41		echo No ${scenariobasedir}/vmlinux file > $i.diags
42		files="$files $i.diags $i"
43	fi
44done
45if test -n "$files"
46then
47	$editor $files
48	editorret=1
49else
50	echo No build errors.
51fi
52if grep -q -e "--build-\?only" < ${rundir}/log && ! test -f "${rundir}/remote-log"
53then
54	echo Build-only run, no console logs to check.
55	exit $editorret
56fi
57
58# Find console logs with errors
59files=
60for i in ${rundir}/*/console.log
61do
62	if test -r $i.diags
63	then
64		files="$files $i.diags $i"
65	fi
66done
67if test -n "$files"
68then
69	$editor $files
70	exit 1
71else
72	echo No errors in console logs.
73	if test -n "$editorret"
74	then
75		exit $editorret
76	else
77		exit 0
78	fi
79fi
80