#!/bin/sh

die() {
	echo "error: $*" 1>&2
	exit 1
}

diverted="zcat zcmp zdiff zegrep zfgrep zgrep"

examine_diversions() {
	diversions_found=
	for suffix in gzip gzip.usr-is-merged usr-is-merged; do
		if test -e "$1/usr/bin/$2.$suffix" -o -h "$1/usr/bin/$2.$suffix"; then
			if test "$suffix" = usr-is-merged && test -e "$1/usr/bin/$2" -o -h "$1/usr/bin/$2"; then
				# gzip's self-diversion should cause the files to be absent
				suffix=bad-usr-is-merged
			fi
			diversions_found="${diversions_found:+$diversions_found }$suffix"
		fi
	done
}

if test -n "$MMDEBSTRAP_HOOK"; then
	if dpkg-query --root "$1" -f '${db:Status-Status}\n' -W zutils | grep -q '^\(installed\|unpacked\)$'; then
		for cmd in $diverted; do
			examine_diversions "$1" "$cmd"
			case "$diversions_found" in
				gzip|gzip.usr-is-merged)
				;;
				*)
					ls -l "$1/usr/bin/z"*
					PAGER="cat" dpkg --root "$1" -l gzip zutils
					die "diversion check failed for $cmd: $diversions_found"
				;;
			esac
		done
	else
		for cmd in $diverted; do
			examine_diversions "$1" "$cmd"
			case "$diversions_found" in
				""|usr-is-merged)
				;;
				*)
					ls -l "$1/usr/bin/z"*
					PAGER="cat" dpkg --root "$1" -l gzip zutils
					die "non-diversion check failed for $cmd"
				;;
			esac
		done
	fi
	exit 0
fi

basedist=bookworm
nextdist=sid
mirror=http://deb.debian.org/debian
actions="$1-"

set -- \
	--variant=apt \
	"$basedist" \
	/dev/null \
	"$mirror" \
	--customize-hook="upload zutils_1.14-3.1_amd64.deb /zutils.deb" \
	--customize-hook="sed -i -e 's/$basedist/$nextdist/' \"\$1/etc/apt/sources.list\"" \
	--chrooted-customize-hook="apt-get update && apt-get -y install libc6 && apt-get download gzip zutils" \
	--customize-hook="$0"

while test -n "$actions"; do
	next="${actions%%-*}"
	actions="${actions#*-}"
	case "$next" in
		withzutils)
			set -- "$@" --include=zutils
		;;
		unpgzip)
			set -- "$@" --chrooted-customize-hook="dpkg --unpack --auto-deconfigure /gzip_*.deb" --customize-hook="$0"
		;;
		unpzutils)
			set -- "$@" --chrooted-customize-hook="dpkg --unpack --auto-deconfigure /zutils.deb" --customize-hook="$0"
		;;
		conf*)
			set -- "$@" --chrooted-customize-hook="dpkg --configure ${next#conf}" --customize-hook="$0"
		;;
		rmzutils)
			set -- "$@" --chrooted-customize-hook="dpkg --remove zutils" --customize-hook="$0"
		;;
		deinstzutils)
			set -- "$@" --chrooted-customize-hook="echo zutils deinstall | dpkg --set-selections"
		;;
		*)
			echo "unknown action $next"
			exit 1
		;;
	esac
done

echo "mmdebstrap $*"
exec auto-apt-proxy mmdebstrap "$@"
