#!/bin/bash
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh

if [[ -z $1 ]] ; then
	vecho "${0##*/}: at least one argument needed" 1>&2
	exit 1
fi

# setup compression stuff
PORTAGE_COMPRESS=${PORTAGE_COMPRESS-bzip2}
[[ -z ${PORTAGE_COMPRESS} ]] && exit 0

if [[ ${PORTAGE_COMPRESS_FLAGS+set} != "set" ]] ; then
	case ${PORTAGE_COMPRESS} in
		bzip2|gzip)  PORTAGE_COMPRESS_FLAGS="-9";;
	esac
fi

case $1 in
	--suffix)
		[[ -n $2 ]] && vecho "${0##*/}: --suffix takes no additional arguments" 1>&2

		if [[ ! -e ${T}/.ecompress.suffix ]] ; then
			set -e
			tmpdir="${T}"/.ecompress$$.${RANDOM}
			mkdir "${tmpdir}"
			cd "${tmpdir}"
			# we have to fill the file enough so that there is something
			# to compress as some programs will refuse to do compression
			# if it cannot actually compress the file
			echo {0..1000} > compressme
			${PORTAGE_COMPRESS} ${PORTAGE_COMPRESS_FLAGS} compressme > /dev/null
			suffix=$(ls compressme*)
			suffix=${suffix#compressme}
			cd /
			rm -rf "${tmpdir}"
			echo "${suffix}" > "${T}/.ecompress.suffix"
		fi
		cat "${T}/.ecompress.suffix"
		;;
	--bin)
		[[ -n $2 ]] && vecho "${0##*/}: --bin takes no additional arguments" 1>&2

		echo "${PORTAGE_COMPRESS} ${PORTAGE_COMPRESS_FLAGS}"
		;;
	--queue)
		shift
		exec touch "${@/%/.ecompress.file}"
		;;
	--dequeue)
		[[ -n $2 ]] && vecho "${0##*/}: --dequeue takes no additional arguments" 1>&2
		find "${D}" -name '*.ecompress.file' -print0 \
			| sed -e 's:\.ecompress\.file::g' \
			| ${XARGS} -0 ecompress
		find "${D}" -name '*.ecompress.file' -print0 | ${XARGS} -0 rm -f
		;;
	--*)
		vecho "${0##*/}: unknown arguments '$*'" 1>&2
		exit 1
		;;
	*)
		mask_ext_re=""
		set -f
		for x in $PORTAGE_COMPRESS_EXCLUDE_SUFFIXES ; do
			mask_ext_re+="|$x"
		done
		set +f
		mask_ext_re="^(${mask_ext_re:1})\$"
		declare -a filtered_args=()
		i=0
		for x in "$@" ; do
			[[ ${x##*.} =~ $mask_ext_re ]] && continue
			filtered_args[$i]=$x
			((i++))
		done
		[ $i -eq 0 ] && exit 0
		set -- "${filtered_args[@]}"

		# If a compressed version of the file already exists, simply
		# delete it so that the compressor doesn't whine (bzip2 will
		# complain and skip, gzip will prompt for input)
		suffix=$(ecompress --suffix)
		[[ -n ${suffix} ]] && echo -n "${@/%/${suffix}$'\001'}" | \
			tr '\001' '\000' | ${XARGS} -0 rm -f
		# Finally, let's actually do some real work
		exec "${PORTAGE_COMPRESS}" ${PORTAGE_COMPRESS_FLAGS} "$@"
		;;
esac
