about summary refs log tree commit diff
path: root/third_party/git/ci/util/extract-trash-dirs.sh
#!/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