#!/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%.*};; *.lz) lzip -df "${x}" || __helpers_die "lzip -d failed" x=${x%.lz};; 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}"