summaryrefslogtreecommitdiffstats
path: root/src/util/trim-valgrind-logs
blob: af6839d918ec27a63d3f075abae00c3ea75581dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh

files=vg.*

logname() {
#	sed -n -e 7p $1 | awk '{print $2}'
#	head -7 $1 | tail -1 | awk '{print $2}'
	awk '{ if (NR == 9) { print $2; exit 0; } }' $1
}

show_names() {
	if test "$*" = "$files" ; then
		return
	fi
	for f in $* ; do
		echo $f : `logname $f`
	done
}

discard_list="/bin/ps /bin/sh /bin/stty /usr/bin/cmp awk cat chmod cmp cp env expr find grep kill mv rev rlogin rm sed sh sleep sort tail test touch wc whoami xargs"
discard_list="$discard_list tcsh tokens"
#discard_list="$discard_list ./rtest ./dbtest"
# The t_inetd program's logs seem to always wind up incomplete for some
# reason.  It's also not terribly important.
discard_list="$discard_list /path/to/.../t_inetd"

filter() {
	if test "$*" = "$files" ; then
		return
	fi
	for f in $* ; do
		n=`logname $f`
		for d in $discard_list; do
			if test "$n" = "$d"; then
				echo rm $f : $n
				rm $f
				break
			fi
		done
	done
}

kill_error_free_logs() {
	if test "$*" = "$files" ; then
		return
	fi
	grep -l "ERROR SUMMARY: 0 errors" $* | while read name ; do
		echo rm $name : no errors in `logname $name`
		rm $name
	done
}

kill_no_leak_logs() {
	if test "$*" = "$files" ; then
	    return
	fi
	grep -l "ERROR SUMMARY: 0 errors" $* | \
	    grep -l "definitely lost: 0 bytes" $* | \
	    xargs grep -l "possibly lost: 0 bytes" | \
	    xargs grep -l "still reachable: 0 bytes in 0 blocks" | \
	    while read name ; do
	    echo rm $name : no leaks or errors in `logname $name`
	    rm $name
	done
}

filter $files
kill_error_free_logs $files
#kill_no_leak_logs $files
echo Remaining files:
show_names $files