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

source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1

compress_file() {
	mask_ext_re=""
	set -f
	local x
	for x in $PORTAGE_COMPRESS_EXCLUDE_SUFFIXES ; do
		mask_ext_re+="|$x"
	done
	set +f
	mask_ext_re="^(${mask_ext_re:1})\$"
	local filtered_args=()
	for x in "$@" ; do
		[[ ${x##*.} =~ $mask_ext_re ]] && continue
		[[ -s ${x} ]] || continue

		# handle precompressed files
		case ${x} in
			*.gz|*.Z)
				gunzip -f "${x}" || __helpers_die "gunzip failed"
				x=${x%.*};;
			*.bz2)
				bunzip2 -f "${x}" || __helpers_die "bunzip2 failed"
				x=${x%.bz2};;
			*.lzma|*.xz)
				unxz -f "${x}" || __helpers_die "unxz failed"
				x=${x%.*};;
		esac

		filtered_args+=( "$x" )
	done
	[[ ${#filtered_args[@]} -eq 0 ]] && return 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)
	[[ -n ${PORTAGE_COMPRESS_SUFFIX} ]] && echo -n "${@/%/${PORTAGE_COMPRESS_SUFFIX}$'\001'}" | \
		tr '\001' '\000' | ${XARGS} -0 rm -f

	# forcibly break all hard links as some compressors whine about it
	while IFS= read -d '' -r x ; do
		cp -p "${x}" "${x}.ecompress.break" || die
		mv -f "${x}.ecompress.break" "${x}" || die
	done < <(find "${@}" -type f -links +1 -print0)

	# Finally, let's actually do some real work
	"${PORTAGE_COMPRESS}" ${PORTAGE_COMPRESS_FLAGS} "$@"
	ret=$?
	[[ $ret -ne 0 ]] && __helpers_die "${0##*/} failed"
	return ${ret}
}

compress_file "${@%.ecompress}"
