#!/bin/sh
set -Cefu

patch=dh_usrlocal-topdirs.diff
version=11.1.6

create_pkg() {
    rm -fr debian
    mkdir debian
    echo '11' > debian/compat
    cat > debian/control <<EOF
Source: s

Package: p
Architecture: all
EOF
    for d
    do
        mkdir -p "debian/p/usr/local/$d"
    done
    fakeroot perl dh_usrlocal
}

cp /usr/bin/dh_usrlocal .
patch --quiet -p1 < $patch

# Empty /usr/local.
create_pkg ''
test ! -e debian/p/usr/local
test ! -e debian/p.postinst.debhelper
test ! -e debian/p.prerm.debhelper

# Empty top directory.
create_pkg foo
test ! -e debian/p/usr/local
test ! -e debian/p.prerm.debhelper
diff -u - debian/p.postinst.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
if [ "\$1" = "configure" ] || [ "\$1" = "abort-upgrade" ] || [ "\$1" = "abort-deconfigure" ] || [ "\$1" = "abort-remove" ]; then
(
	while read line; do
		set -- \$line
		dir="\$1"; mode="\$2"; user="\$3"; group="\$4"
		if [ ! -e "\$dir" ]; then
			if mkdir "\$dir" 2>/dev/null; then
				chown "\$user":"\$group" "\$dir"
				chmod "\$mode" "\$dir"
			fi
		fi
	done
) << DATA
/usr/local/foo 02775 root staff
DATA
fi
# End automatically added section
EOF

# Two empty top directories.
create_pkg foo bar
test ! -e debian/p/usr/local
test ! -e debian/p.prerm.debhelper
diff -u - debian/p.postinst.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
if [ "\$1" = "configure" ] || [ "\$1" = "abort-upgrade" ] || [ "\$1" = "abort-deconfigure" ] || [ "\$1" = "abort-remove" ]; then
(
	while read line; do
		set -- \$line
		dir="\$1"; mode="\$2"; user="\$3"; group="\$4"
		if [ ! -e "\$dir" ]; then
			if mkdir "\$dir" 2>/dev/null; then
				chown "\$user":"\$group" "\$dir"
				chmod "\$mode" "\$dir"
			fi
		fi
	done
) << DATA
/usr/local/bar 02775 root staff
/usr/local/foo 02775 root staff
DATA
fi
# End automatically added section
EOF

# Two subdirectories.
create_pkg foo/bar foo/baz
test ! -e debian/p/usr/local
diff -u - debian/p.postinst.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
if [ "\$1" = "configure" ] || [ "\$1" = "abort-upgrade" ] || [ "\$1" = "abort-deconfigure" ] || [ "\$1" = "abort-remove" ]; then
(
	while read line; do
		set -- \$line
		dir="\$1"; mode="\$2"; user="\$3"; group="\$4"
		if [ ! -e "\$dir" ]; then
			if mkdir "\$dir" 2>/dev/null; then
				chown "\$user":"\$group" "\$dir"
				chmod "\$mode" "\$dir"
			fi
		fi
	done
) << DATA
/usr/local/foo 02775 root staff
/usr/local/foo/bar 02775 root staff
/usr/local/foo/baz 02775 root staff
DATA
fi
# End automatically added section
EOF
diff -u - debian/p.prerm.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
(
	while read dir; do
		rmdir "\$dir" 2>/dev/null || true
	done
) << DATA
/usr/local/foo/bar
/usr/local/foo/baz
DATA
# End automatically added section
EOF

create_pkg a/a/a a/a/b a/b/a a/b/b b/a/a b/a/b b/b/a b/b/b
test ! -e debian/p/usr/local
diff -u - debian/p.postinst.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
if [ "\$1" = "configure" ] || [ "\$1" = "abort-upgrade" ] || [ "\$1" = "abort-deconfigure" ] || [ "\$1" = "abort-remove" ]; then
(
	while read line; do
		set -- \$line
		dir="\$1"; mode="\$2"; user="\$3"; group="\$4"
		if [ ! -e "\$dir" ]; then
			if mkdir "\$dir" 2>/dev/null; then
				chown "\$user":"\$group" "\$dir"
				chmod "\$mode" "\$dir"
			fi
		fi
	done
) << DATA
/usr/local/a 02775 root staff
/usr/local/a/a 02775 root staff
/usr/local/a/a/a 02775 root staff
/usr/local/a/a/b 02775 root staff
/usr/local/a/b 02775 root staff
/usr/local/a/b/a 02775 root staff
/usr/local/a/b/b 02775 root staff
/usr/local/b 02775 root staff
/usr/local/b/a 02775 root staff
/usr/local/b/a/a 02775 root staff
/usr/local/b/a/b 02775 root staff
/usr/local/b/b 02775 root staff
/usr/local/b/b/a 02775 root staff
/usr/local/b/b/b 02775 root staff
DATA
fi
# End automatically added section
EOF
diff -u - debian/p.prerm.debhelper <<EOF
# Automatically added by dh_usrlocal/$version
(
	while read dir; do
		rmdir "\$dir" 2>/dev/null || true
	done
) << DATA
/usr/local/a/a/a
/usr/local/a/a/b
/usr/local/a/a
/usr/local/a/b/a
/usr/local/a/b/b
/usr/local/a/b
/usr/local/b/a/a
/usr/local/b/a/b
/usr/local/b/a
/usr/local/b/b/a
/usr/local/b/b/b
/usr/local/b/b
DATA
# End automatically added section
EOF
