#!/bin/bash

setup() {
	[ -n "${1}" ] || return 1
	mountpoint "${1}"/dev     || mount -o bind /dev "${1}"/dev
	mountpoint "${1}"/dev/pts || mount -o bind /dev "${1}"/dev/pts
	mountpoint "${1}"/proc    || mount -t proc none "${1}"/proc
	mountpoint "${1}"/sys     || mount -t sysfs none "${1}"/sys
	tgt=$(chroot "${1}" /usr/bin/portageq portdir)
	if [ -n "${tgt}" ] ; then
		if [ ! -e "${1}/${tgt}"/metadata ] ; then
			mount -o bind $(/usr/bin/portageq portdir) "${1}${tgt}"
		fi
	fi
	tgt=$(chroot "${1}" /usr/bin/portageq distdir)
	if [ -n "${tgt}" ] ; then
		if ! $(ls -1 "${1}/${tgt}" | grep '' >/dev/null) ; then
			mount -o bind $(/usr/bin/portageq distdir) "${1}${tgt}"
		fi
	fi
	cat /etc/resolv.conf > "${1}"/etc/resolv.conf
}

teardown() {
	[ -n "${1}" ] || return 1
	if lsof "${1}" | grep '' >/dev/null ; then
		echo "${1} is in use"
		return 1
	fi
	mountpoint "${1}"/dev/pts && umount "${1}"/dev/pts
	mountpoint "${1}"/dev     && umount "${1}"/dev
	mountpoint "${1}"/proc    && umount "${1}"/proc
	mountpoint "${1}"/sys     && umount "${1}"/sys
	tgt=$(chroot "${1}" /usr/bin/portageq distdir)
	if [ -n "${tgt}" ] ; then
		mountpoint "${1}${tgt}" && umount "${1}${tgt}"
	fi
	tgt=$(chroot "${1}" /usr/bin/portageq portdir)
	if [ -n "${tgt}" ] ; then
		mountpoint "${1}${tgt}" && umount "${1}${tgt}"
	fi
}

case $(basename "$0") in
	*setup)
		setup "$@"
		exit $?
		;;
	*teardown)
		teardown "$@"
		exit $?
		;;
	*)
		echo "invalid script name"
		exit 1
		;;
esac
