about summary refs log tree commit diff
path: root/ci/util/extract-trash-dirs.sh
blob: 8e67bec21a271e017d8707655587ec05de0841fc (plain) (blame)
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
#!/bin/sh

error () {
	echo >&2 "error: $@"
	exit 1
}

find_embedded_trash () {
	while read -r line
	do
		case "$line" in
		*Start\ of\ trash\ directory\ of\ \'t[0-9][0-9][0-9][0-9]-*\':*)
			test_name="${line#*\'}"
			test_name="${test_name%\'*}"

			return 0
		esac
	done

	return 1
}

extract_embedded_trash () {
	while read -r line
	do
		case "$line" in
		*End\ of\ trash\ directory\ of\ \'$test_name\'*)
			return
			;;
		*)
			printf '%s\n' "$line"
			;;
		esac
	done

	error "unexpected end of input"
}

# Raw logs from Linux build jobs have CRLF line endings, while OSX
# build jobs mostly have CRCRLF, except an odd line every now and
# then that has CRCRCRLF.  'base64 -d' from 'coreutils' doesn't like
# CRs and complains about "invalid input", so remove all CRs at the
# end of lines.
sed -e 's/\r*$//' | \
while find_embedded_trash
do
	echo "Extracting trash directory of '$test_name'"

	extract_embedded_trash |base64 -d |tar xzp
done