aboutsummaryrefslogtreecommitdiff
blob: c6d4de13f5d11afbee0b7de8f71ae8aff246e5f4 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

# This is a script to read portage log items from einfo, ewarn etc, new in the
# portage-2.1 series.
#
# Author: Donnie Berkholz <spyderous@gentoo.org>
# Updated by: Uwe Klosa <uwe.klosa@gmail.com>

# set decent PATH for bug 172969

PATH=/usr/bin:/bin:${PATH}

# Set ELOGDIR
PORT_LOGDIR="$(portageq envvar PORT_LOGDIR)"
[ "$PORT_LOGDIR" = "" ] && PORT_LOGDIR="/var/log/portage"
ELOGDIR="$PORT_LOGDIR/elog"

# Verify that ELOGDIR exists
if [ ! -d "$ELOGDIR" ]; then
	echo "ELOG directory: $ELOGDIR does not exist!"
	exit 1
fi

# Use the pager from the users environment
[ -z "$PAGER" ] && PAGER="less"

# Set up select prompt
PS3="Choice? "

select_loop() {
	ANY_FILES=$(find . -type f)
	ANY_FILES=$(echo ${ANY_FILES} | sed -e "s:\./::g")

	if [[ -z ${ANY_FILES} ]]; then
		echo "No log items to read"
		break
	fi

	echo
	echo "This is a list of portage log items. Choose a number to view that file or type q to quit."
	echo

	# Pick which file to read
	select FILE in ${ANY_FILES}; do
		case ${REPLY} in
			q)
				echo "Quitting"
				QUIT="yes"
				break
				;;
			*)
				if [ -f "$FILE" ]; then
					${PAGER} ${FILE}
					read -p "Delete file? [y/N] " DELETE
					case ${DELETE} in
						q)
							echo "Quitting"
							QUIT="yes"
							break
							;;
						y|Y)
							rm -f ${FILE}
							SUCCESS=$?
							if [[ ${SUCCESS} = 0 ]]; then
								echo "Deleted ${FILE}"
							else
								echo "Unable to delete ${FILE}"
							fi
							;;
						# Empty string defaults to N (save file)
						n|N|"")
							echo "Saving ${FILE}"
							;;
						*)
							echo "Invalid response. Saving ${FILE}"
							;;
					esac
				else
					echo
					echo "Invalid response."
				fi
				;;
		esac
		break
	done
}

pushd ${ELOGDIR} > /dev/null

until [[ -n ${QUIT} ]]; do
	select_loop
done

popd > /dev/null