#!/bin/bash

. ../init.sh || exit 1

set -e

export QMERGE=1
export PKGDIR=${as}/packages
export FEATURES='config-protect-if-modified'

mktmpdir

export ROOT=${PWD}/root
export PORTAGE_TMPDIR=${PWD}
export Q_VDB=/var/db/pkg

mkdir -p "${ROOT}/var/db/pkg"

set +e

# Do a merge into an empty tree.

out=$(yes | qmerge -F qmerge-test)
tend $? "qmerge-test: [N] basic merge" || echo "${out}"

[[ ${out} != *"FAIL"* ]]
tend $? "qmerge-test: [N] FAIL messages" || echo "${out}"

order=$(echo "${out}" | awk '$1 == ">>>" && $2 ~ /^pkg_/ { printf "%s ", $NF }')
[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_postinst " ]]
tend $? "qmerge-test: [N] pkg_* order of execution" || printf '%s\n' "${order}" "${out}"

ls -d "${ROOT}"/var/db/pkg/sys-devel/qmerge-test-* >/dev/null
tend $? "qmerge-test: [N] vdb installed"

[[ -x ${ROOT}/usr/bin/qmerge-test && \
   -f ${ROOT}/etc/some.conf && \
   -f ${ROOT}/etc/another.conf ]]
tend $? "qmerge-test: [N] installed expected files" || treedir "${ROOT}"

# Now do a re-emerge.

out=$(yes | qmerge -F qmerge-test)
tend $? "qmerge-test: [R] re-emerge" || echo "${out}"

[[ -x ${ROOT}/usr/bin/qmerge-test ]]
tend $? "qmerge-test: [R] installed expected files" || treedir "${ROOT}"

order=$(echo "${out}" | awk '$1 == ">>>" && $2 ~ /^pkg_/ { printf "%s ", $NF }')
[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_postinst " ]]
tend $? "qmerge-test: [R] pkg_* order of execution" || printf '%s\n' "${order}" "${out}"

[[ -x ${ROOT}/usr/bin/qmerge-test && \
   -f ${ROOT}/etc/some.conf && \
   -f ${ROOT}/etc/another.conf && \
   -f ${ROOT}/etc/._cfg0000_some.conf ]]
tend $? "qmerge-test: [R] re-installed expected files" || treedir "${ROOT}"

# Finally do an unmerge.

echo alkdsjfalksdf > "${ROOT}/etc/some.conf"

rm -f "${ROOT}/etc/._cfg0000_some.conf"
out=$(yes | qmerge -FU qmerge-test)
tend $? "qmerge-test: [C] uninstall" || echo "${out}"

order=$(echo "${out}" | awk '$1 == ">>>" { printf "%s ", $NF }')
[[ ${order} == "pkg_prerm pkg_postrm " ]]
tend $? "qmerge-test: [C] pkg_* order of execution" || printf '%s\n' "${order}" "${out}"

[[ ! -x ${ROOT}/usr/bin/qmerge-test && \
     -f ${ROOT}/etc/some.conf && \
   ! -f ${ROOT}/etc/another.conf && \
   ! -d ${ROOT}/var/db/pkg/sys-devel ]]
tend $? "qmerge-test: [C] uninstalled expected files" || treedir "${ROOT}"

set -e

cleantmpdir

end
