Browse Source

tests: try to support spaces in TMPDIR

Not all tests work yet, most notable the cdrom tests, but those require
changes in libapt itself to have a proper fix and what we have fixed so
far is good enough progress for now.

Git-Dch: Ignore
David Kalnischkies 10 years ago
parent
commit
63c7141275

+ 1 - 1
debian/apt.auto-removal.sh

@@ -19,7 +19,7 @@ eval $(apt-config shell DPKG Dir::bin::dpkg/f)
 test -n "$DPKG" || DPKG="/usr/bin/dpkg"
 test -n "$DPKG" || DPKG="/usr/bin/dpkg"
 
 
 
 
-list="$(${DPKG} -l | awk '/^[ih][^nc][ ]+(linux|kfreebsd|gnumach)-image-[0-9]+\./ && $2 !~ /-dbg$/ && $2 !~ /-dbgsym$/ { print $2,$3; }' \
+list="$("${DPKG}" -l | awk '/^[ih][^nc][ ]+(linux|kfreebsd|gnumach)-image-[0-9]+\./ && $2 !~ /-dbg$/ && $2 !~ /-dbgsym$/ { print $2,$3; }' \
    | sed -e 's#^\(linux\|kfreebsd\|gnumach\)-image-##' -e 's#:[^:]\+ # #')"
    | sed -e 's#^\(linux\|kfreebsd\|gnumach\)-image-##' -e 's#:[^:]\+ # #')"
 debverlist="$(echo "$list" | cut -d' ' -f 2 | sort --unique --reverse --version-sort)"
 debverlist="$(echo "$list" | cut -d' ' -f 2 | sort --unique --reverse --version-sort)"
 
 

+ 227 - 211
test/integration/framework

@@ -187,7 +187,7 @@ dpkg() {
 	"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@"
 	"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@"
 }
 }
 dpkgcheckbuilddeps() {
 dpkgcheckbuilddeps() {
-	command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@"
+	command dpkg-checkbuilddeps --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" "$@"
 }
 }
 gdb() {
 gdb() {
 	local CMD
 	local CMD
@@ -199,7 +199,7 @@ gdb() {
 	aptmark) CMD="apt-mark";;
 	aptmark) CMD="apt-mark";;
 	apthelper) CMD="apt-helper";;
 	apthelper) CMD="apt-helper";;
 	aptftparchive) CMD="apt-ftparchive";;
 	aptftparchive) CMD="apt-ftparchive";;
-	dpkg) shift; runapt ${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg "$@"; return;;
+	dpkg) shift; runapt "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" "$@"; return;;
 	*) CMD="$1";;
 	*) CMD="$1";;
 	esac
 	esac
 	shift
 	shift
@@ -242,9 +242,9 @@ setupenvironment() {
 	if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$(stat --format '%a' "$TMPDIR")" != '1777' ]; then
 	if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$(stat --format '%a' "$TMPDIR")" != '1777' ]; then
 		unset TMPDIR
 		unset TMPDIR
 	fi
 	fi
-	TMPWORKINGDIRECTORY=$(mktemp -d)
-	addtrap "cd /; rm -rf $TMPWORKINGDIRECTORY;"
-	msgninfo "Preparing environment for $(basename $0) in ${TMPWORKINGDIRECTORY}…"
+	TMPWORKINGDIRECTORY="$(mktemp -d)"
+	addtrap "cd /; rm -rf \"$TMPWORKINGDIRECTORY\";"
+	msgninfo "Preparing environment for ${0##*/} in ${TMPWORKINGDIRECTORY}…"
 
 
 	mkdir -m 700 "${TMPWORKINGDIRECTORY}/downloaded"
 	mkdir -m 700 "${TMPWORKINGDIRECTORY}/downloaded"
 	if [ "$(id -u)" = '0' ]; then
 	if [ "$(id -u)" = '0' ]; then
@@ -254,20 +254,20 @@ setupenvironment() {
 		chown _apt:root "${TMPWORKINGDIRECTORY}/downloaded"
 		chown _apt:root "${TMPWORKINGDIRECTORY}/downloaded"
 	fi
 	fi
 
 
-	TESTDIRECTORY=$(readlink -f $(dirname $0))
+	TESTDIRECTORY="$(readlink -f "$(dirname $0)")"
         # allow overriding the default BUILDDIR location
         # allow overriding the default BUILDDIR location
-	SOURCEDIRECTORY=${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"}
-	BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"}
-	LIBRARYPATH=${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"}
-        METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"}
-        APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"}
-        APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"}
-        APTINTERNALSOLVER=${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/apt-internal-solver"}
-	APTDUMPSOLVER=${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/apt-dump-solver"}
+	SOURCEDIRECTORY="${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"}"
+	BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"}"
+	LIBRARYPATH="${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"}"
+        METHODSDIR="${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"}"
+        APTHELPERBINDIR="${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"}"
+        APTWEBSERVERBINDIR="${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"}"
+        APTINTERNALSOLVER="${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/apt-internal-solver"}"
+	APTDUMPSOLVER="${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/apt-dump-solver"}"
 	test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
 	test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
         # -----
         # -----
 
 
-	cd $TMPWORKINGDIRECTORY
+	cd "$TMPWORKINGDIRECTORY"
 	mkdir rootdir aptarchive keys
 	mkdir rootdir aptarchive keys
 	cd rootdir
 	cd rootdir
 	mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d
 	mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d
@@ -275,7 +275,7 @@ setupenvironment() {
 	mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
 	mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
 	touch var/lib/dpkg/available
 	touch var/lib/dpkg/available
 	mkdir -p usr/lib/apt
 	mkdir -p usr/lib/apt
-	ln -s ${METHODSDIR} usr/lib/apt/methods
+	ln -s "${METHODSDIR}" usr/lib/apt/methods
 	if [ "$BUILDDIRECTORY" = "$LIBRARYPATH" ]; then
 	if [ "$BUILDDIRECTORY" = "$LIBRARYPATH" ]; then
 		mkdir -p usr/lib/apt/solvers
 		mkdir -p usr/lib/apt/solvers
 		ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/solvers/dump
 		ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/solvers/dump
@@ -284,23 +284,26 @@ setupenvironment() {
 	fi
 	fi
         # use the autoremove from the BUILDDIRECTORY if its there, otherwise
         # use the autoremove from the BUILDDIRECTORY if its there, otherwise
         # system
         # system
-        if [ -e ${BUILDDIRECTORY}/../../debian/apt.conf.autoremove ]; then
-	    ln -s ${BUILDDIRECTORY}/../../debian/apt.conf.autoremove etc/apt/apt.conf.d/01autoremove
+        if [ -e "${BUILDDIRECTORY}/../../debian/apt.conf.autoremove" ]; then
+	    ln -s "${BUILDDIRECTORY}/../../debian/apt.conf.autoremove" etc/apt/apt.conf.d/01autoremove
         else
         else
 	    ln -s /etc/apt/apt.conf.d/01autoremove etc/apt/apt.conf.d/01autoremove
 	    ln -s /etc/apt/apt.conf.d/01autoremove etc/apt/apt.conf.d/01autoremove
         fi
         fi
 	cd ..
 	cd ..
-	local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/')
+	local BASENAME="${0##*/}"
+	local PACKAGESFILE="Packages-${BASENAME#*-}"
 	if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then
 	if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then
 		cp "${TESTDIRECTORY}/${PACKAGESFILE}" aptarchive/Packages
 		cp "${TESTDIRECTORY}/${PACKAGESFILE}" aptarchive/Packages
 	fi
 	fi
-	local SOURCESSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Sources-/' -e 's/^skip-/Sources-/')
+	local SOURCESSFILE="Sources-${BASENAME#*-}"
 	if [ -f "${TESTDIRECTORY}/${SOURCESSFILE}" ]; then
 	if [ -f "${TESTDIRECTORY}/${SOURCESSFILE}" ]; then
 		cp "${TESTDIRECTORY}/${SOURCESSFILE}" aptarchive/Sources
 		cp "${TESTDIRECTORY}/${SOURCESSFILE}" aptarchive/Sources
 	fi
 	fi
-	cp $(find $TESTDIRECTORY -name '*.pub' -o -name '*.sec') keys/
-	chmod 644 $(find keys -name '*.pub' -o -name '*.sec')
-	ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
+	for key in $(find "$TESTDIRECTORY" -name '*.pub' -o -name '*.sec'); do
+		cp "$key" keys/
+		chmod 644 "$key"
+	done
+	ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
 
 
 	echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf
 	echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf
 	echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf
 	echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf
@@ -316,32 +319,31 @@ setupenvironment() {
 		echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf
 		echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf
 	fi
 	fi
 
 
-	cat << EOF > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg"
+	cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <<EOF
 #!/bin/sh
 #!/bin/sh
 set -e
 set -e
 if [ -r "${TMPWORKINGDIRECTORY}/noopchroot.so" ]; then
 if [ -r "${TMPWORKINGDIRECTORY}/noopchroot.so" ]; then
-	if [ -n "\$LD_PRELOAD" ]; then
-		export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}"
+	if [ -n "\$LD_LIBRARY_PATH" ]; then
+		export LD_LIBRARY_PATH="${TMPWORKINGDIRECTORY}:${LD_LIBRARY_PATH}"
 	else
 	else
-		export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so"
+		export LD_LIBRARY_PATH="${TMPWORKINGDIRECTORY}"
 	fi
 	fi
-fi
-exec fakeroot ${DPKG:-dpkg} --root="${TMPWORKINGDIRECTORY}/rootdir" \\
-	--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log \\
-	--force-not-root --force-bad-path "\$@"
-EOF
-	cat << EOF > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
-#!/bin/sh
-set -e
-if [ -r "${TMPWORKINGDIRECTORY}/noopchroot.so" ]; then
 	if [ -n "\$LD_PRELOAD" ]; then
 	if [ -n "\$LD_PRELOAD" ]; then
-		export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}"
+		export LD_PRELOAD="noopchroot.so \${LD_PRELOAD}"
 	else
 	else
-		export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so"
+		export LD_PRELOAD="noopchroot.so"
 	fi
 	fi
 fi
 fi
+EOF
+	cp "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
+	cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <<EOF
+exec fakeroot "${DPKG:-dpkg}" --root="${TMPWORKINGDIRECTORY}/rootdir" \\
+	--log="${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log" \\
+	--force-not-root --force-bad-path "\$@"
+EOF
+	cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" <<EOF
 exec fakeroot gdb --quiet -ex run "${DPKG:-dpkg}" --args "${DPKG:-dpkg}" --root="${TMPWORKINGDIRECTORY}/rootdir" \\
 exec fakeroot gdb --quiet -ex run "${DPKG:-dpkg}" --args "${DPKG:-dpkg}" --root="${TMPWORKINGDIRECTORY}/rootdir" \\
-	--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log \\
+	--log="${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log" \\
 	--force-not-root --force-bad-path "\$@"
 	--force-not-root --force-bad-path "\$@"
 EOF
 EOF
 	chmod +x "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
 	chmod +x "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
@@ -425,7 +427,8 @@ configarchitecture() {
 
 
 configdpkg() {
 configdpkg() {
 	if [ ! -e rootdir/var/lib/dpkg/status ]; then
 	if [ ! -e rootdir/var/lib/dpkg/status ]; then
-		local STATUSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/status-/' -e 's/^skip-/status-/')
+		local BASENAME="${0##*/}"
+		local STATUSFILE="status-${BASENAME#*-}"
 		if [ -f "${TESTDIRECTORY}/${STATUSFILE}" ]; then
 		if [ -f "${TESTDIRECTORY}/${STATUSFILE}" ]; then
 			cp "${TESTDIRECTORY}/${STATUSFILE}" rootdir/var/lib/dpkg/status
 			cp "${TESTDIRECTORY}/${STATUSFILE}" rootdir/var/lib/dpkg/status
 		else
 		else
@@ -460,7 +463,7 @@ configdpkgnoopchroot() {
 	# via execvp() as used by dpkg as we don't want our rootdir to be a fullblown
 	# via execvp() as used by dpkg as we don't want our rootdir to be a fullblown
 	# chroot directory dpkg could chroot into to execute the maintainer scripts
 	# chroot directory dpkg could chroot into to execute the maintainer scripts
 	msgtest 'Building library to preload to make maintainerscript work in' 'dpkg'
 	msgtest 'Building library to preload to make maintainerscript work in' 'dpkg'
-	cat << EOF > noopchroot.c
+	cat > noopchroot.c << EOF
 #define _GNU_SOURCE
 #define _GNU_SOURCE
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
@@ -512,7 +515,7 @@ configcompression() {
 		*) printf "$1\t$1\t$1\n";;
 		*) printf "$1\t$1\t$1\n";;
 		esac
 		esac
 		shift
 		shift
-	done > ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf
+	done > "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf"
 }
 }
 confighashes() {
 confighashes() {
 	{
 	{
@@ -573,10 +576,10 @@ setupsimplenativepackage() {
 
 
 	local SECTION="${7:-others}"
 	local SECTION="${7:-others}"
 	local DISTSECTION
 	local DISTSECTION
-	if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
+	if [ "$SECTION" = "${SECTION#*/}" ]; then
 		DISTSECTION="main"
 		DISTSECTION="main"
 	else
 	else
-		DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)"
+		DISTSECTION="${SECTION%/*}"
 	fi
 	fi
 	local BUILDDIR=incoming/${NAME}-${VERSION}
 	local BUILDDIR=incoming/${NAME}-${VERSION}
 	mkdir -p ${BUILDDIR}/debian/source
 	mkdir -p ${BUILDDIR}/debian/source
@@ -629,56 +632,58 @@ buildsimplenativepackage() {
 
 
 	local SECTION="${7:-others}"
 	local SECTION="${7:-others}"
 	local PRIORITY="${8:-optional}"
 	local PRIORITY="${8:-optional}"
-        local FILE_TREE="$9"
-        local COMPRESS_TYPE="${10:-gzip}"
+	local FILE_TREE="$9"
+	local COMPRESS_TYPE="${10:-gzip}"
 	local DISTSECTION
 	local DISTSECTION
-	if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
+	if [ "$SECTION" = "${SECTION#*/}" ]; then
 		DISTSECTION="main"
 		DISTSECTION="main"
 	else
 	else
-		DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)"
+		DISTSECTION="${SECTION%/*}"
 	fi
 	fi
-	local BUILDDIR=${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}
+	local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}"
 
 
 	msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME"
 	msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME"
-	mkdir -p $BUILDDIR/debian/source
-	echo "* most suckless software product ever" > ${BUILDDIR}/FEATURES
+	mkdir -p "$BUILDDIR/debian/source"
+	echo "* most suckless software product ever" > "${BUILDDIR}/FEATURES"
 	echo "#!/bin/sh
 	echo "#!/bin/sh
-echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME}
+echo '$NAME says \"Hello!\"'" > "${BUILDDIR}/${NAME}"
 
 
-	echo "Copyleft by Joe Sixpack $(date +%Y)" > ${BUILDDIR}/debian/copyright
+	echo "Copyleft by Joe Sixpack $(date +%Y)" > "${BUILDDIR}/debian/copyright"
 	echo "$NAME ($VERSION) $RELEASE; urgency=low
 	echo "$NAME ($VERSION) $RELEASE; urgency=low
 
 
   * Initial release
   * Initial release
 
 
- -- Joe Sixpack <joe@example.org>  $(date -R)" > ${BUILDDIR}/debian/changelog
-	echo "Source: $NAME
+ -- Joe Sixpack <joe@example.org>  $(date -R)" > "${BUILDDIR}/debian/changelog"
+	{
+		echo "Source: $NAME
 Priority: $PRIORITY
 Priority: $PRIORITY
 Maintainer: Joe Sixpack <joe@example.org>
 Maintainer: Joe Sixpack <joe@example.org>
-Standards-Version: 3.9.3" > ${BUILDDIR}/debian/control
-	if [ "$SECTION" != '<none>' ]; then
-		echo "Section: $SECTION" >> ${BUILDDIR}/debian/control
-	fi
-	local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')"
-	test -z "$BUILDDEPS" || echo "$BUILDDEPS" >> ${BUILDDIR}/debian/control
-	echo "
-Package: $NAME" >> ${BUILDDIR}/debian/control
+Standards-Version: 3.9.3"
+		if [ "$SECTION" != '<none>' ]; then
+			echo "Section: $SECTION"
+		fi
+		local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')"
+		test -z "$BUILDDEPS" || echo "$BUILDDEPS"
+		echo "
+Package: $NAME"
 
 
-	if [ "$ARCH" = 'all' ]; then
-		echo "Architecture: all" >> ${BUILDDIR}/debian/control
-	else
-		echo "Architecture: any" >> ${BUILDDIR}/debian/control
-	fi
-	local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')"
-	test -z "$DEPS" || echo "$DEPS" >> ${BUILDDIR}/debian/control
-	echo "Description: $DESCRIPTION" >> ${BUILDDIR}/debian/control
+		if [ "$ARCH" = 'all' ]; then
+			echo "Architecture: all"
+		else
+			echo "Architecture: any"
+		fi
+		local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')"
+		test -z "$DEPS" || echo "$DEPS"
+		echo "Description: $DESCRIPTION"
+	} > "${BUILDDIR}/debian/control"
 
 
-	echo '3.0 (native)' > ${BUILDDIR}/debian/source/format
-	cd ${BUILDDIR}/..
+	echo '3.0 (native)' > "${BUILDDIR}/debian/source/format"
+	cd "${BUILDDIR}/.."
 	testsuccess --nomsg dpkg-source -b ${NAME}-${VERSION}
 	testsuccess --nomsg dpkg-source -b ${NAME}-${VERSION}
 	cd - >/dev/null
 	cd - >/dev/null
-	sed -n 's#^dpkg-source: info: building [^ ]\+ in ##p' ${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output \
+	sed -n 's#^dpkg-source: info: building [^ ]\+ in ##p' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" \
 		| while read SRC; do
 		| while read SRC; do
-		echo "pool/${SRC}" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist
+		echo "pool/${SRC}" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist"
 #		if expr match "${SRC}" '.*\.dsc' >/dev/null 2>&1; then
 #		if expr match "${SRC}" '.*\.dsc' >/dev/null 2>&1; then
 #			aptkey --keyring ./keys/joesixpack.pub --secret-keyring ./keys/joesixpack.sec --quiet --readonly \
 #			aptkey --keyring ./keys/joesixpack.pub --secret-keyring ./keys/joesixpack.sec --quiet --readonly \
 #				adv --yes --default-key 'Joe Sixpack' \
 #				adv --yes --default-key 'Joe Sixpack' \
@@ -689,26 +694,26 @@ Package: $NAME" >> ${BUILDDIR}/debian/control
 
 
 	for arch in $(getarchitecturesfromcommalist "$ARCH"); do
 	for arch in $(getarchitecturesfromcommalist "$ARCH"); do
 		msgtest "Build binary package for ${RELEASE} in ${SECTION}" "$NAME"
 		msgtest "Build binary package for ${RELEASE} in ${SECTION}" "$NAME"
-		rm -rf ${BUILDDIR}/debian/tmp
-		mkdir -p ${BUILDDIR}/debian/tmp/DEBIAN ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} ${BUILDDIR}/debian/tmp/usr/bin
-		cp ${BUILDDIR}/debian/copyright ${BUILDDIR}/debian/changelog ${BUILDDIR}/FEATURES ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}
-		cp ${BUILDDIR}/${NAME} ${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch}
+		rm -rf "${BUILDDIR}/debian/tmp"
+		mkdir -p "${BUILDDIR}/debian/tmp/DEBIAN" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin"
+		cp "${BUILDDIR}/debian/copyright" "${BUILDDIR}/debian/changelog" "${BUILDDIR}/FEATURES" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}"
+		cp "${BUILDDIR}/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch}"
                 if [ -n "$FILE_TREE" ]; then
                 if [ -n "$FILE_TREE" ]; then
-                    cp -ar "$FILE_TREE" ${BUILDDIR}/debian/tmp
+                    cp -ar "$FILE_TREE" "${BUILDDIR}/debian/tmp"
                 fi
                 fi
 
 
-		(cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch)
-		(cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums)
+		(cd "${BUILDDIR}"; dpkg-gencontrol -DArchitecture=$arch)
+		(cd "${BUILDDIR}/debian/tmp"; md5sum $(find usr/ -type f) > DEBIAN/md5sums)
 		local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log"
 		local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log"
 		# ensure the right permissions as dpkg-deb insists
 		# ensure the right permissions as dpkg-deb insists
-		chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN
-		testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/..
-		echo "pool/${NAME}_${VERSION}_${arch}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist
+		chmod 755 "${BUILDDIR}/debian/tmp/DEBIAN"
+		testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build "${BUILDDIR}/debian/tmp" "${BUILDDIR}/.."
+		echo "pool/${NAME}_${VERSION}_${arch}.deb" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist"
 	done
 	done
 
 
 	local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}"
 	local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}"
-	mkdir -p $CHANGEPATH
-	cp ${BUILDDIR}/debian/changelog $CHANGEPATH
+	mkdir -p "$CHANGEPATH"
+	cp "${BUILDDIR}/debian/changelog" "$CHANGEPATH"
 	rm -rf "${BUILDDIR}"
 	rm -rf "${BUILDDIR}"
 	msgdone "info"
 	msgdone "info"
 }
 }
@@ -721,20 +726,20 @@ buildpackage() {
 	local PKGNAME="$(echo "$BUILDDIR" | grep -o '[^/]*$')"
 	local PKGNAME="$(echo "$BUILDDIR" | grep -o '[^/]*$')"
 	local BUILDLOG="$(readlink -f "${BUILDDIR}/../${PKGNAME}_${RELEASE}_${SECTION}.dpkg-bp.log")"
 	local BUILDLOG="$(readlink -f "${BUILDDIR}/../${PKGNAME}_${RELEASE}_${SECTION}.dpkg-bp.log")"
 	msgtest "Build package for ${RELEASE} in ${SECTION}" "$PKGNAME"
 	msgtest "Build package for ${RELEASE} in ${SECTION}" "$PKGNAME"
-	cd $BUILDDIR
+	cd "$BUILDDIR"
 	if [ "$ARCH" = "all" ]; then
 	if [ "$ARCH" = "all" ]; then
 		ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)"
 		ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)"
 	fi
 	fi
 	testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH
 	testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH
-	cp ${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output $BUILDLOG
-	local PKGS="$(grep '^dpkg-deb: building package' $BUILDLOG | cut -d'/' -f 2 | sed -e "s#'\.##")"
-	local SRCS="$(grep '^dpkg-source: info: building' $BUILDLOG | grep -o '[a-z0-9._+~-]*$')"
+	cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$BUILDLOG"
+	local PKGS="$(grep '^dpkg-deb: building package' "$BUILDLOG" | cut -d'/' -f 2 | sed -e "s#'\.##")"
+	local SRCS="$(grep '^dpkg-source: info: building' "$BUILDLOG" | grep -o '[a-z0-9._+~-]*$')"
 	cd - > /dev/null
 	cd - > /dev/null
 	for PKG in $PKGS; do
 	for PKG in $PKGS; do
-		echo "pool/${PKG}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist
+		echo "pool/${PKG}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist"
 	done
 	done
 	for SRC in $SRCS; do
 	for SRC in $SRCS; do
-		echo "pool/${SRC}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist
+		echo "pool/${SRC}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist"
 	done
 	done
 }
 }
 
 
@@ -747,7 +752,7 @@ buildaptarchive() {
 }
 }
 
 
 createaptftparchiveconfig() {
 createaptftparchiveconfig() {
-	local COMPRESSORS="$(cut -d'	' -f 1 ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | tr '\n' ' ')"
+	local COMPRESSORS="$(cut -d'	' -f 1 "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | tr '\n' ' ')"
 	local COMPRESSORS="${COMPRESSORS%* }"
 	local COMPRESSORS="${COMPRESSORS%* }"
 	local ARCHS="$(getarchitectures)"
 	local ARCHS="$(getarchitectures)"
 	cat > ftparchive.conf <<EOF
 	cat > ftparchive.conf <<EOF
@@ -769,23 +774,15 @@ TreeDefault {
 };
 };
 EOF
 EOF
 	for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do
 	for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do
-		echo -n 'tree "dists/' >> ftparchive.conf
-		echo -n "$DIST" >> ftparchive.conf
-		echo -n '" {
-	Architectures "' >> ftparchive.conf
-		echo -n "$ARCHS" >> ftparchive.conf
-		echo -n 'source";
-	FileList "' >> ftparchive.conf
-		echo -n "${DIST}.\$(SECTION).pkglist" >> ftparchive.conf
-		echo -n '";
-	SourceFileList "' >> ftparchive.conf
-		echo -n "${DIST}.\$(SECTION).srclist" >> ftparchive.conf
-		echo -n '";
-	Sections "' >> ftparchive.conf
-		echo -n "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')" >> ftparchive.conf
-		echo '";
-};' >> ftparchive.conf
-	done
+		cat <<EOF
+tree "dists/$DIST" {
+	Architectures "$ARCHS source";
+	FileList "${DIST}.\$(SECTION).pkglist";
+	SourceFileList "${DIST}.\$(SECTION).srclist";
+	Sections "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')";
+};
+EOF
+	done >> ftparchive.conf
 }
 }
 
 
 buildaptftparchivedirectorystructure() {
 buildaptftparchivedirectorystructure() {
@@ -795,10 +792,10 @@ buildaptftparchivedirectorystructure() {
 		for SECTION in $SECTIONS; do
 		for SECTION in $SECTIONS; do
 			local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')"
 			local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')"
 			for ARCH in $ARCHS; do
 			for ARCH in $ARCHS; do
-				mkdir -p dists/${DIST}/${SECTION}/binary-${ARCH}
+				mkdir -p "dists/${DIST}/${SECTION}/binary-${ARCH}"
 			done
 			done
-			mkdir -p dists/${DIST}/${SECTION}/source
-			mkdir -p dists/${DIST}/${SECTION}/i18n
+			mkdir -p "dists/${DIST}/${SECTION}/source"
+			mkdir -p "dists/${DIST}/${SECTION}/i18n"
 		done
 		done
 	done
 	done
 }
 }
@@ -828,28 +825,29 @@ insertpackage() {
 			fi
 			fi
 			for BUILDARCH in $ARCHS; do
 			for BUILDARCH in $ARCHS; do
 				local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
 				local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
-				mkdir -p $PPATH
-				local FILE="${PPATH}/Packages"
-				echo "Package: $NAME
+				mkdir -p "$PPATH"
+				{
+					echo "Package: $NAME
 Priority: $PRIORITY
 Priority: $PRIORITY
 Section: other
 Section: other
 Installed-Size: 42
 Installed-Size: 42
-Maintainer: Joe Sixpack <joe@example.org>" >> $FILE
-				test "$arch" = 'none' || echo "Architecture: $arch" >> $FILE
-				echo "Version: $VERSION
-Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" >> $FILE
-				test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
-				echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)" >> $FILE
-				echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)" >> $FILE
-				echo >> $FILE
+Maintainer: Joe Sixpack <joe@example.org>"
+					test "$arch" = 'none' || echo "Architecture: $arch"
+					echo "Version: $VERSION
+Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb"
+					test -z "$DEPENDENCIES" || echo "$DEPENDENCIES"
+					echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)"
+					echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)"
+					echo
+				} >> "${PPATH}/Packages"
 			done
 			done
 		done
 		done
-		mkdir -p aptarchive/dists/${RELEASE}/main/source aptarchive/dists/${RELEASE}/main/i18n
-		touch aptarchive/dists/${RELEASE}/main/source/Sources
+		mkdir -p "aptarchive/dists/${RELEASE}/main/source" "aptarchive/dists/${RELEASE}/main/i18n"
+		touch "aptarchive/dists/${RELEASE}/main/source/Sources"
 		echo "Package: $NAME
 		echo "Package: $NAME
 Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)
 Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)
 Description-en: $DESCRIPTION
 Description-en: $DESCRIPTION
-" >> aptarchive/dists/${RELEASE}/main/i18n/Translation-en
+" >> "aptarchive/dists/${RELEASE}/main/i18n/Translation-en"
 	done
 	done
 }
 }
 
 
@@ -871,14 +869,14 @@ Binary: $BINARY
 Version: $VERSION
 Version: $VERSION
 Maintainer: Joe Sixpack <joe@example.org>
 Maintainer: Joe Sixpack <joe@example.org>
 Architecture: $ARCH" >> $FILE
 Architecture: $ARCH" >> $FILE
-	test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
+	test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
 	echo "Files:
 	echo "Files:
- $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) $DSCFILE
- $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) $TARFILE
+ $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
+ $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
 Checksums-Sha256:
 Checksums-Sha256:
- $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) $DSCFILE
- $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) $TARFILE
-" >> $FILE
+ $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
+ $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
+" >> "$FILE"
 }
 }
 
 
 insertinstalledpackage() {
 insertinstalledpackage() {
@@ -902,22 +900,22 @@ Priority: $PRIORITY
 Section: other
 Section: other
 Installed-Size: 42
 Installed-Size: 42
 Maintainer: Joe Sixpack <joe@example.org>
 Maintainer: Joe Sixpack <joe@example.org>
-Version: $VERSION" >> $FILE
-		test "$arch" = 'none' || echo "Architecture: $arch" >> $FILE
-		test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
-		echo "Description: $DESCRIPTION" >> $FILE
-		echo >> $FILE
+Version: $VERSION" >> "$FILE"
+		test "$arch" = 'none' || echo "Architecture: $arch" >> "$FILE"
+		test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
+		echo "Description: $DESCRIPTION" >> "$FILE"
+		echo >> "$FILE"
 		if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then
 		if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then
-			echo -n > ${INFO}/${NAME}:${arch}.list
+			echo -n > "${INFO}/${NAME}:${arch}.list"
 		else
 		else
-			echo -n > ${INFO}/${NAME}.list
+			echo -n > "${INFO}/${NAME}.list"
 		fi
 		fi
 	done
 	done
 }
 }
 
 
 
 
 buildaptarchivefromincoming() {
 buildaptarchivefromincoming() {
-	msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on incoming packages…"
+	msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on incoming packages…"
 	cd aptarchive
 	cd aptarchive
 	[ -e pool ] || ln -s ../incoming pool
 	[ -e pool ] || ln -s ../incoming pool
 	[ -e ftparchive.conf ] || createaptftparchiveconfig
 	[ -e ftparchive.conf ] || createaptftparchiveconfig
@@ -930,7 +928,7 @@ buildaptarchivefromincoming() {
 }
 }
 
 
 buildaptarchivefromfiles() {
 buildaptarchivefromfiles() {
-	msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…"
+	msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on prebuild files…"
 	local DIR='aptarchive'
 	local DIR='aptarchive'
 	if [ -d "${DIR}/dists" ]; then DIR="${DIR}/dists"; fi
 	if [ -d "${DIR}/dists" ]; then DIR="${DIR}/dists"; fi
 	find "$DIR" -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do
 	find "$DIR" -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do
@@ -942,7 +940,7 @@ buildaptarchivefromfiles() {
 }
 }
 
 
 compressfile() {
 compressfile() {
-	cat ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | while read compressor extension command; do
+	cat "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | while read compressor extension command; do
 		if [ "$compressor" = '.' ]; then
 		if [ "$compressor" = '.' ]; then
 			if [ -n "$2" ]; then
 			if [ -n "$2" ]; then
 				touch -d "$2" "$1"
 				touch -d "$2" "$1"
@@ -990,16 +988,16 @@ generatereleasefiles() {
 			if [ -n "$ORIGIN" ]; then
 			if [ -n "$ORIGIN" ]; then
 				ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}"
 				ORIGIN="-o APT::FTPArchive::Release::Origin=${ORIGIN}"
 			fi
 			fi
-			aptftparchiverelease $dir \
+			aptftparchiverelease "$dir" \
 				-o APT::FTPArchive::Release::Suite="${SUITE}" \
 				-o APT::FTPArchive::Release::Suite="${SUITE}" \
 				-o APT::FTPArchive::Release::Codename="${CODENAME}" \
 				-o APT::FTPArchive::Release::Codename="${CODENAME}" \
 				${LABEL} \
 				${LABEL} \
 				${ORIGIN} \
 				${ORIGIN} \
 				${VERSION} \
 				${VERSION} \
-				> $dir/Release
+				> "$dir/Release"
 			if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then
 			if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then
 				sed -i '/^Date: / a\
 				sed -i '/^Date: / a\
-NotAutomatic: yes' $dir/Release
+NotAutomatic: yes' "$dir/Release"
 			fi
 			fi
 		done
 		done
 	else
 	else
@@ -1007,8 +1005,8 @@ NotAutomatic: yes' $dir/Release
 	fi
 	fi
 	if [ -n "$1" -a "$1" != "now" ]; then
 	if [ -n "$1" -a "$1" != "now" ]; then
 		for release in $(find ./aptarchive -name 'Release'); do
 		for release in $(find ./aptarchive -name 'Release'); do
-			sed -i "s/^Date: .*$/Date: $(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')/" $release
-			touch -d "$1" $release
+			sed -i "s/^Date: .*$/Date: $(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')/" "$release"
+			touch -d "$1" "$release"
 		done
 		done
 	fi
 	fi
 	if [ -n "$2" ]; then
 	if [ -n "$2" ]; then
@@ -1019,33 +1017,34 @@ Valid-Until: $(date -d "$2" '+%a, %d %b %Y %H:%M:%S %Z')" $(find ./aptarchive -n
 }
 }
 
 
 setupdistsaptarchive() {
 setupdistsaptarchive() {
-	local APTARCHIVE=$(readlink -f ./aptarchive)
+	local APTARCHIVE="$(readlink -f ./aptarchive | sed 's# #%20#g')"
 	rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list
 	rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list
 	rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list
 	rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list
 	for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do
 	for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do
-		SECTIONS=$(find ./aptarchive/dists/${DISTS}/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ')
+		SECTIONS=$(find "./aptarchive/dists/${DISTS}/" -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ')
 		msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… "
 		msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… "
-		echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list
-		echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list
+		echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list"
+		echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list"
 		msgdone "info"
 		msgdone "info"
 	done
 	done
 }
 }
 
 
 setupflataptarchive() {
 setupflataptarchive() {
-	local APTARCHIVE=$(readlink -f ./aptarchive)
-	if [ -f ${APTARCHIVE}/Packages ]; then
+	local APTARCHIVE="$(readlink -f ./aptarchive)"
+	local APTARCHIVEURI="$(readlink -f ./aptarchive | sed 's# #%20#g')"
+	if [ -f "${APTARCHIVE}/Packages" ]; then
 		msgninfo "\tadd deb sources.list line… "
 		msgninfo "\tadd deb sources.list line… "
-		echo "deb file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list
-		msgdone "info"
+		echo "deb file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list'
+		msgdone 'info'
 	else
 	else
-		rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list
+		rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list'
 	fi
 	fi
-	if [ -f ${APTARCHIVE}/Sources ]; then
+	if [ -f "${APTARCHIVE}/Sources" ]; then
 		msgninfo "\tadd deb-src sources.list line… "
 		msgninfo "\tadd deb-src sources.list line… "
-		echo "deb-src file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
-		msgdone "info"
+		echo "deb-src file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list'
+		msgdone 'info'
 	else
 	else
-		rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
+		rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list'
 	fi
 	fi
 }
 }
 
 
@@ -1080,41 +1079,41 @@ signreleasefiles() {
 		# the key is expired, so gpg doesn't allow to sign with and the --faked-system-time
 		# the key is expired, so gpg doesn't allow to sign with and the --faked-system-time
 		# option doesn't exist anymore (and using faketime would add a new obscure dependency)
 		# option doesn't exist anymore (and using faketime would add a new obscure dependency)
 		# therefore we 'temporary' make the key not expired and restore a backup after signing
 		# therefore we 'temporary' make the key not expired and restore a backup after signing
-		cp ${REXKEY}.sec $SECEXPIREBAK
-		cp ${REXKEY}.pub $PUBEXPIREBAK
+		cp "${REXKEY}.sec" "$SECEXPIREBAK"
+		cp "${REXKEY}.pub" "$PUBEXPIREBAK"
 		local SECUNEXPIRED="${REXKEY}.sec.unexpired"
 		local SECUNEXPIRED="${REXKEY}.sec.unexpired"
 		local PUBUNEXPIRED="${REXKEY}.pub.unexpired"
 		local PUBUNEXPIRED="${REXKEY}.pub.unexpired"
 		if [ -f "$SECUNEXPIRED" ] && [ -f "$PUBUNEXPIRED" ]; then
 		if [ -f "$SECUNEXPIRED" ] && [ -f "$PUBUNEXPIRED" ]; then
-			cp $SECUNEXPIRED ${REXKEY}.sec
-			cp $PUBUNEXPIRED ${REXKEY}.pub
+			cp "$SECUNEXPIRED" "${REXKEY}.sec"
+			cp "$PUBUNEXPIRED" "${REXKEY}.pub"
 		else
 		else
 			if ! printf "expire\n1w\nsave\n" | $GPG --default-key "$SIGNER" --command-fd 0 --edit-key "${SIGNER}" >setexpire.gpg 2>&1; then
 			if ! printf "expire\n1w\nsave\n" | $GPG --default-key "$SIGNER" --command-fd 0 --edit-key "${SIGNER}" >setexpire.gpg 2>&1; then
 				cat setexpire.gpg
 				cat setexpire.gpg
 				exit 1
 				exit 1
 			fi
 			fi
-			cp ${REXKEY}.sec $SECUNEXPIRED
-			cp ${REXKEY}.pub $PUBUNEXPIRED
+			cp "${REXKEY}.sec" "$SECUNEXPIRED"
+			cp "${REXKEY}.pub" "$PUBUNEXPIRED"
 		fi
 		fi
 	fi
 	fi
-	for RELEASE in $(find ${REPODIR}/ -name Release); do
-		$GPG --default-key "$SIGNER" --armor --detach-sign --sign --output ${RELEASE}.gpg ${RELEASE}
+	for RELEASE in $(find "${REPODIR}/" -name Release); do
+		$GPG --default-key "$SIGNER" --armor --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}"
 		local INRELEASE="$(echo "${RELEASE}" | sed 's#/Release$#/InRelease#')"
 		local INRELEASE="$(echo "${RELEASE}" | sed 's#/Release$#/InRelease#')"
-		$GPG --default-key "$SIGNER" --clearsign --output $INRELEASE $RELEASE
+		$GPG --default-key "$SIGNER" --clearsign --output "$INRELEASE" "$RELEASE"
 		# we might have set a specific date for the Release file, so copy it
 		# we might have set a specific date for the Release file, so copy it
-		touch -d "$(stat --format "%y" ${RELEASE})" ${RELEASE}.gpg ${INRELEASE}
+		touch -d "$(stat --format "%y" ${RELEASE})" "${RELEASE}.gpg" "${INRELEASE}"
 	done
 	done
 	if [ -f "$SECEXPIREBAK" ] && [ -f "$PUBEXPIREBAK" ]; then
 	if [ -f "$SECEXPIREBAK" ] && [ -f "$PUBEXPIREBAK" ]; then
-		mv -f $SECEXPIREBAK ${REXKEY}.sec
-		mv -f $PUBEXPIREBAK ${REXKEY}.pub
+		mv -f "$SECEXPIREBAK" "${REXKEY}.sec"
+		mv -f "$PUBEXPIREBAK" "${REXKEY}.pub"
 	fi
 	fi
-	msgdone "info"
+	msgdone 'info'
 }
 }
 
 
 redatereleasefiles() {
 redatereleasefiles() {
 	local DATE="$(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')"
 	local DATE="$(date -d "$1" '+%a, %d %b %Y %H:%M:%S %Z')"
 	for release in $(find aptarchive/ -name 'Release'); do
 	for release in $(find aptarchive/ -name 'Release'); do
-		sed -i "s/^Date: .*$/Date: ${DATE}/" $release
-		touch -d "$DATE" $release
+		sed -i "s/^Date: .*$/Date: ${DATE}/" "$release"
+		touch -d "$DATE" "$release"
 	done
 	done
 	signreleasefiles "${2:-Joe Sixpack}"
 	signreleasefiles "${2:-Joe Sixpack}"
 }
 }
@@ -1148,7 +1147,7 @@ webserverconfig() {
 }
 }
 
 
 rewritesourceslist() {
 rewritesourceslist() {
-	local APTARCHIVE="file://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive")"
+	local APTARCHIVE="file://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive" | sed 's# #%20#g')"
 	for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
 	for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
 		sed -i $LIST -e "s#$APTARCHIVE#${1}#" -e "s#http://localhost:8080/#${1}#" -e "s#https://localhost:4433/#${1}#"
 		sed -i $LIST -e "s#$APTARCHIVE#${1}#" -e "s#http://localhost:8080/#${1}#" -e "s#https://localhost:4433/#${1}#"
 	done
 	done
@@ -1174,7 +1173,7 @@ changetowebserver() {
 	else
 	else
 		shift
 		shift
 	fi
 	fi
-	if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then
+	if test -x "${APTWEBSERVERBINDIR}/aptwebserver"; then
 		cd aptarchive
 		cd aptarchive
 		local LOG="webserver.log"
 		local LOG="webserver.log"
 		if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then
 		if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then
@@ -1207,10 +1206,10 @@ output = /dev/null
 [https]
 [https]
 accept = 4433
 accept = 4433
 connect = 8080
 connect = 8080
-" > ${TMPWORKINGDIRECTORY}/stunnel.conf
+" > "${TMPWORKINGDIRECTORY}/stunnel.conf"
 	stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf"
 	stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf"
         waitforpidfile "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid"
         waitforpidfile "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid"
-	local PID="$(cat ${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid)"
+	local PID="$(cat "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid")"
         if [ -z "$PID" ]; then
         if [ -z "$PID" ]; then
 		msgdie 'Could not fork stunnel4 successfully'
 		msgdie 'Could not fork stunnel4 successfully'
 	fi
 	fi
@@ -1221,22 +1220,24 @@ connect = 8080
 changetocdrom() {
 changetocdrom() {
 	mkdir -p rootdir/media/cdrom/.disk
 	mkdir -p rootdir/media/cdrom/.disk
 	local CD="$(readlink -f rootdir/media/cdrom)"
 	local CD="$(readlink -f rootdir/media/cdrom)"
-	echo "acquire::cdrom::mount \"${CD}\";
-acquire::cdrom::${CD}/::mount \"mv ${CD}-unmounted ${CD}\";
-acquire::cdrom::${CD}/::umount \"mv ${CD} ${CD}-unmounted\";
-acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom
-	echo -n "$1" > ${CD}/.disk/info
+	cat > rootdir/etc/apt/apt.conf.d/00cdrom <<EOF
+acquire::cdrom::mount "${CD}";
+acquire::cdrom::"${CD}/"::mount "mv ${CD}-unmounted ${CD}";
+acquire::cdrom::"${CD}/"::umount "mv ${CD} ${CD}-unmounted";
+acquire::cdrom::autodetect 0;
+EOF
+	echo -n "$1" > "${CD}/.disk/info"
 	if [ ! -d aptarchive/dists ]; then
 	if [ ! -d aptarchive/dists ]; then
 		msgdie 'Flat file archive cdroms can not be created currently'
 		msgdie 'Flat file archive cdroms can not be created currently'
 		return 1
 		return 1
 	fi
 	fi
 	mv aptarchive/dists "$CD"
 	mv aptarchive/dists "$CD"
-	ln -s "$(readlink -f ./incoming)" $CD/pool
+	ln -s "$(readlink -f ./incoming)" "$CD/pool"
 	find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete
 	find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete
 	# start with an unmounted disk
 	# start with an unmounted disk
 	mv "${CD}" "${CD}-unmounted"
 	mv "${CD}" "${CD}-unmounted"
 	# we don't want the disk to be modifiable
 	# we don't want the disk to be modifiable
-	addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/media/cdrom/dists/ $PWD/rootdir/media/cdrom-unmounted/dists/ || true;"
+	addtrap 'prefix' "chmod -f -R +w \"$PWD/rootdir/media/cdrom/dists/\" \"$PWD/rootdir/media/cdrom-unmounted/dists/\" || true;"
 	chmod -R 555 rootdir/media/cdrom-unmounted/dists
 	chmod -R 555 rootdir/media/cdrom-unmounted/dists
 }
 }
 
 
@@ -1269,7 +1270,7 @@ testoutputequal() {
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testoutputequal.output"
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testoutputequal.output"
 	local COMPAREFILE="$1"
 	local COMPAREFILE="$1"
 	shift
 	shift
-	if "$@" 2>&1 | checkdiff $COMPAREFILE - >"$OUTPUT" 2>&1; then
+	if "$@" 2>&1 | checkdiff "$COMPAREFILE" - >"$OUTPUT" 2>&1; then
 		msgpass
 		msgpass
 	else
 	else
 		echo "=== content of file we compared with (${COMPAREFILE}) ===" >>"${OUTPUT}"
 		echo "=== content of file we compared with (${COMPAREFILE}) ===" >>"${OUTPUT}"
@@ -1303,7 +1304,7 @@ testempty() {
 	msggroup 'testempty'
 	msggroup 'testempty'
 	msgtest "Test for no output of" "$*"
 	msgtest "Test for no output of" "$*"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
-	if ("$@" >$COMPAREFILE 2>&1 || true) && test ! -s $COMPAREFILE; then
+	if ("$@" >"$COMPAREFILE" 2>&1 || true) && test ! -s "$COMPAREFILE"; then
 		msgpass
 		msgpass
 	else
 	else
 		msgfailoutput '' "$COMPAREFILE" "$@"
 		msgfailoutput '' "$COMPAREFILE" "$@"
@@ -1311,6 +1312,18 @@ testempty() {
 	aptautotest 'testempty' "$@"
 	aptautotest 'testempty' "$@"
 	msggroup
 	msggroup
 }
 }
+testnotempty() {
+	msggroup 'testnotempty'
+	msgtest "Test for some output of" "$*"
+	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnotempty.comparefile"
+	if ("$@" >"$COMPAREFILE" 2>&1 || true) && test -s "$COMPAREFILE"; then
+		msgpass
+	else
+		msgfailoutput '' "$COMPAREFILE" "$@"
+	fi
+	aptautotest 'testnotempty' "$@"
+	msggroup
+}
 
 
 testequal() {
 testequal() {
 	msggroup 'testequal'
 	msggroup 'testequal'
@@ -1321,7 +1334,7 @@ testequal() {
 	fi
 	fi
 
 
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile"
-	echo "$1" > $COMPAREFILE
+	echo "$1" > "$COMPAREFILE"
 	shift
 	shift
 
 
 	if [ -n "$MSG" ]; then
 	if [ -n "$MSG" ]; then
@@ -1337,13 +1350,13 @@ testequalor2() {
 	local COMPAREFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile1"
 	local COMPAREFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile1"
 	local COMPAREFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile2"
 	local COMPAREFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile2"
 	local COMPAREAGAINST="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.compareagainst"
 	local COMPAREAGAINST="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.compareagainst"
-	echo "$1" > $COMPAREFILE1
-	echo "$2" > $COMPAREFILE2
+	echo "$1" > "$COMPAREFILE1"
+	echo "$2" > "$COMPAREFILE2"
 	shift 2
 	shift 2
 	msgtest "Test for equality OR of" "$*"
 	msgtest "Test for equality OR of" "$*"
-	"$@" >$COMPAREAGAINST 2>&1 || true
-	if checkdiff $COMPAREFILE1 $COMPAREAGAINST >/dev/null 2>&1 || \
-		checkdiff $COMPAREFILE2 $COMPAREAGAINST >/dev/null 2>&1
+	"$@" >"$COMPAREAGAINST" 2>&1 || true
+	if checkdiff "$COMPAREFILE1" "$COMPAREAGAINST" >/dev/null 2>&1 || \
+		checkdiff "$COMPAREFILE2" "$COMPAREAGAINST" >/dev/null 2>&1
 	then
 	then
 		msgpass
 		msgpass
 	else
 	else
@@ -1429,10 +1442,10 @@ testmarkedauto() {
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedauto.comparefile"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedauto.comparefile"
 	if [ -n "$1" ]; then
 	if [ -n "$1" ]; then
 		msgtest 'Test for correctly marked as auto-installed' "$*"
 		msgtest 'Test for correctly marked as auto-installed' "$*"
-		while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE
+		while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE"
 	else
 	else
 		msgtest 'Test for correctly marked as auto-installed' 'no package'
 		msgtest 'Test for correctly marked as auto-installed' 'no package'
-		echo -n > $COMPAREFILE
+		echo -n > "$COMPAREFILE"
 	fi
 	fi
 	testoutputequal "$COMPAREFILE" aptmark showauto
 	testoutputequal "$COMPAREFILE" aptmark showauto
 	msggroup
 	msggroup
@@ -1442,10 +1455,10 @@ testmarkedmanual() {
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedmanual.comparefile"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedmanual.comparefile"
 	if [ -n "$1" ]; then
 	if [ -n "$1" ]; then
 		msgtest 'Test for correctly marked as manually installed' "$*"
 		msgtest 'Test for correctly marked as manually installed' "$*"
-		while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE
+		while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE"
 	else
 	else
 		msgtest 'Test for correctly marked as manually installed' 'no package'
 		msgtest 'Test for correctly marked as manually installed' 'no package'
-		echo -n > $COMPAREFILE
+		echo -n > "$COMPAREFILE"
 	fi
 	fi
 	testoutputequal "$COMPAREFILE" aptmark showmanual
 	testoutputequal "$COMPAREFILE" aptmark showmanual
 	msggroup
 	msggroup
@@ -1483,7 +1496,7 @@ msgfailoutput() {
 		done
 		done
 		echo '#### test output ####'
 		echo '#### test output ####'
 	fi
 	fi
-	cat >&2 $OUTPUT
+	cat >&2 "$OUTPUT"
 	msgfail "$MSG"
 	msgfail "$MSG"
 }
 }
 
 
@@ -1495,7 +1508,7 @@ testsuccess() {
 		msgtest 'Test for successful execution of' "$*"
 		msgtest 'Test for successful execution of' "$*"
 	fi
 	fi
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
-	if "$@" >${OUTPUT} 2>&1; then
+	if "$@" >"${OUTPUT}" 2>&1; then
 		if expr match "$1" '^apt.*' >/dev/null; then
 		if expr match "$1" '^apt.*' >/dev/null; then
 			if grep -q -E ' runtime error: ' "$OUTPUT"; then
 			if grep -q -E ' runtime error: ' "$OUTPUT"; then
 				msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
 				msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
@@ -1531,7 +1544,7 @@ testwarning() {
 		msgtest 'Test for successful execution with warnings of' "$*"
 		msgtest 'Test for successful execution with warnings of' "$*"
 	fi
 	fi
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output"
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output"
-	if "$@" >${OUTPUT} 2>&1; then
+	if "$@" >"${OUTPUT}" 2>&1; then
 		if expr match "$1" '^apt.*' >/dev/null; then
 		if expr match "$1" '^apt.*' >/dev/null; then
 			if grep -q -E ' runtime error: ' "$OUTPUT"; then
 			if grep -q -E ' runtime error: ' "$OUTPUT"; then
 				msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
 				msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
@@ -1560,7 +1573,7 @@ testfailure() {
 		msgtest 'Test for failure in execution of' "$*"
 		msgtest 'Test for failure in execution of' "$*"
 	fi
 	fi
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
 	local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
-	if "$@" >${OUTPUT} 2>&1; then
+	if "$@" >"${OUTPUT}" 2>&1; then
 		local EXITCODE=$?
 		local EXITCODE=$?
 		msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
 		msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
 	else
 	else
@@ -1718,18 +1731,18 @@ aptautotest() {
 	local TESTCALL="$1"
 	local TESTCALL="$1"
 	local CMD="$2"
 	local CMD="$2"
 	local FIRSTOPT="$3"
 	local FIRSTOPT="$3"
-	local AUTOTEST="aptautotest_$(basename "$CMD" | tr -d '-')_$(echo "$FIRSTOPT" | tr -d '-')"
+	local AUTOTEST="aptautotest_$(echo "${CMD##*/}_${FIRSTOPT}" | tr -d '-')"
 	if command -v $AUTOTEST >/dev/null; then
 	if command -v $AUTOTEST >/dev/null; then
 		shift 3
 		shift 3
 		# save and restore the *.output files from other tests
 		# save and restore the *.output files from other tests
 		# as we might otherwise override them in these automatic tests
 		# as we might otherwise override them in these automatic tests
-		rm -rf ${TMPWORKINGDIRECTORY}/rootdir/tmp-before
-		mv ${TMPWORKINGDIRECTORY}/rootdir/tmp ${TMPWORKINGDIRECTORY}/rootdir/tmp-before
-		mkdir ${TMPWORKINGDIRECTORY}/rootdir/tmp
+		rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-before"
+		mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-before"
+		mkdir "${TMPWORKINGDIRECTORY}/rootdir/tmp"
 		$AUTOTEST "$TESTCALL" "$@"
 		$AUTOTEST "$TESTCALL" "$@"
-		rm -rf ${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest
-		mv ${TMPWORKINGDIRECTORY}/rootdir/tmp ${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest
-		mv ${TMPWORKINGDIRECTORY}/rootdir/tmp-before ${TMPWORKINGDIRECTORY}/rootdir/tmp
+		rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest"
+		mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest"
+		mv "${TMPWORKINGDIRECTORY}/rootdir/tmp-before" "${TMPWORKINGDIRECTORY}/rootdir/tmp"
 	fi
 	fi
 }
 }
 
 
@@ -1743,9 +1756,12 @@ aptautotest_aptget_update() {
 	testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
 	testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
 	testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
 	testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
 	# all copied files are properly chmodded
 	# all copied files are properly chmodded
+	local backupIFS="$IFS"
+	IFS="$(printf "\n\b")"
 	for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock'); do
 	for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock'); do
 		testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
 		testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
 	done
 	done
+	IFS="$backupIFS"
 	if [ "$TESTCALL" = 'testsuccess' ]; then
 	if [ "$TESTCALL" = 'testsuccess' ]; then
 		# failure cases can retain partial files and such
 		# failure cases can retain partial files and such
 		testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \)
 		testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \)

+ 15 - 15
test/integration/test-acquire-same-file-multiple-times

@@ -2,19 +2,19 @@
 set -e
 set -e
 
 
 TESTDIR=$(readlink -f $(dirname $0))
 TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+. "$TESTDIR/framework"
 setupenvironment
 setupenvironment
 configarchitecture 'amd64'
 configarchitecture 'amd64'
 
 
 TESTFILE="$TESTDIR/framework"
 TESTFILE="$TESTDIR/framework"
-cp $TESTFILE aptarchive/foo
+cp "$TESTFILE" aptarchive/foo
 APTARCHIVE="$(readlink -f ./aptarchive)"
 APTARCHIVE="$(readlink -f ./aptarchive)"
 
 
 filedown() {
 filedown() {
 	msgtest 'Downloading the same URI twice over file' "$1"
 	msgtest 'Downloading the same URI twice over file' "$1"
-	testsuccess --nomsg apthelper download-file file:///$APTARCHIVE/foo ./downloaded/foo1 '' file:///$APTARCHIVE/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1
+	testsuccess --nomsg apthelper download-file "file:///$APTARCHIVE/foo" ./downloaded/foo1 '' "file:///$APTARCHIVE/foo" ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1
 	cp rootdir/tmp/testsuccess.output download.log
 	cp rootdir/tmp/testsuccess.output download.log
-	testsuccess cmp $TESTFILE ./downloaded/foo1
+	testsuccess cmp "$TESTFILE" ./downloaded/foo1
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
@@ -23,19 +23,19 @@ filedown() {
 
 
 testrun() {
 testrun() {
 	$1 'no partial'
 	$1 'no partial'
-	cp $TESTFILE ./downloaded/foo1
+	cp "$TESTFILE" ./downloaded/foo1
 	$1 'complete partial 1'
 	$1 'complete partial 1'
-	cp $TESTFILE ./downloaded/foo2
+	cp "$TESTFILE" ./downloaded/foo2
 	$1 'complete partial 2'
 	$1 'complete partial 2'
-	cp $TESTFILE ./downloaded/foo1
-	cp $TESTFILE ./downloaded/foo2
+	cp "$TESTFILE" ./downloaded/foo1
+	cp "$TESTFILE" ./downloaded/foo2
 	$1 'complete partial 1+2'
 	$1 'complete partial 1+2'
-	dd if=$TESTFILE of=./downloaded/foo1 bs=500 count=1 2>/dev/null
+	dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null
 	$1 'partial partial 1'
 	$1 'partial partial 1'
-	dd if=$TESTFILE of=./downloaded/foo2 bs=500 count=1 2>/dev/null
+	dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null
 	$1 'partial partial 2'
 	$1 'partial partial 2'
-	dd if=$TESTFILE of=./downloaded/foo1 bs=500 count=1 2>/dev/null
-	dd if=$TESTFILE of=./downloaded/foo2 bs=500 count=1 2>/dev/null
+	dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null
+	dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null
 	$1 'partial partial 1+2'
 	$1 'partial partial 1+2'
 }
 }
 testrun 'filedown'
 testrun 'filedown'
@@ -46,7 +46,7 @@ httpdown() {
 	msgtest 'Downloading the same URI to different files' 'twice over http'
 	msgtest 'Downloading the same URI to different files' 'twice over http'
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
 	cp rootdir/tmp/testsuccess.output download.log
 	cp rootdir/tmp/testsuccess.output download.log
-	testsuccess cmp $TESTDIR/framework ./downloaded/foo1
+	testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
@@ -58,7 +58,7 @@ httpredirectdown() {
 	msgtest 'Redirect leads' 'first URI to the second URI'
 	msgtest 'Redirect leads' 'first URI to the second URI'
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo2 ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo2 ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo2 '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
 	cp rootdir/tmp/testsuccess.output download.log
 	cp rootdir/tmp/testsuccess.output download.log
-	testsuccess cmp $TESTDIR/framework ./downloaded/foo1
+	testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '103%20Redirect' ./download.log
 	testequal '1' grep -c '103%20Redirect' ./download.log
@@ -71,7 +71,7 @@ httpsamedown() {
 	msgtest 'Downloading two files via the same URI to' 'the same file'
 	msgtest 'Downloading two files via the same URI to' 'the same file'
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo1 '' -o Debug::pkgAcquire::Worker=1
 	testsuccess --nomsg apthelper download-file http://localhost:8080/foo ./downloaded/foo1 '' http://localhost:8080/foo ./downloaded/foo1 '' -o Debug::pkgAcquire::Worker=1
 	cp rootdir/tmp/testsuccess.output download.log
 	cp rootdir/tmp/testsuccess.output download.log
-	testsuccess cmp $TESTDIR/framework ./downloaded/foo1
+	testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '200%20URI%20Start' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
 	testequal '1' grep -c '201%20URI%20Done' ./download.log
 	rm -f ./downloaded/foo1
 	rm -f ./downloaded/foo1

+ 8 - 5
test/integration/test-acquire-same-repository-multiple-times

@@ -21,11 +21,14 @@ done
 # install a slowed down file: otherwise its to fast to reproduce combining
 # install a slowed down file: otherwise its to fast to reproduce combining
 NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
 NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
 OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
 OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
-rm $NEWMETHODS
-mkdir $NEWMETHODS
-for METH in $(find $OLDMETHODS ! -type d); do
-	ln -s $OLDMETHODS/$(basename $METH) $NEWMETHODS
+rm "$NEWMETHODS"
+mkdir "$NEWMETHODS"
+backupIFS="$IFS"
+IFS="$(printf "\n\b")"
+for METH in $(find "$OLDMETHODS" ! -type d); do
+	ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS"
 done
 done
+IFS="$backupIFS"
 rm "${NEWMETHODS}/file" "${NEWMETHODS}/http"
 rm "${NEWMETHODS}/file" "${NEWMETHODS}/http"
 cat >"${NEWMETHODS}/file" <<EOF
 cat >"${NEWMETHODS}/file" <<EOF
 #!/bin/sh
 #!/bin/sh
@@ -45,7 +48,7 @@ tworepos() {
 	cp rootdir/tmp/testsuccess.output download.log
 	cp rootdir/tmp/testsuccess.output download.log
 	#cat download.log
 	#cat download.log
 	aptget indextargets --format '$(FILENAME)' --no-release-info | sort > file.lst
 	aptget indextargets --format '$(FILENAME)' --no-release-info | sort > file.lst
-	testequal "$(find $(readlink -f ./rootdir/var/lib/apt/lists) -name '*_dists_*' \( ! -name '*InRelease' \) -type f | sort)" cat file.lst
+	testequal "$(find "$(readlink -f ./rootdir/var/lib/apt/lists)" -name '*_dists_*' \( ! -name '*InRelease' \) -type f | sort)" cat file.lst
 	testsuccess aptcache policy
 	testsuccess aptcache policy
 	testequal "foo:
 	testequal "foo:
   Installed: (none)
   Installed: (none)

+ 1 - 1
test/integration/test-allow

@@ -4,7 +4,7 @@
 #
 #
 set -e
 set -e
 
 
-TESTDIR=$(readlink -f $(dirname $0))
+TESTDIR="$(readlink -f "$(dirname $0)")"
 . $TESTDIR/framework
 . $TESTDIR/framework
 setupenvironment
 setupenvironment
 configarchitecture 'amd64'
 configarchitecture 'amd64'

+ 2 - 2
test/integration/test-apt-get-download

@@ -64,7 +64,7 @@ testdownload apt_1.0_all.deb apt stable
 testdownload apt_2.0_all.deb apt
 testdownload apt_2.0_all.deb apt
 
 
 DEBFILE="$(readlink -f ../aptarchive)/pool/apt_2.0_all.deb"
 DEBFILE="$(readlink -f ../aptarchive)/pool/apt_2.0_all.deb"
-testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) SHA512:$(sha512sum $DEBFILE | cut -d' ' -f 1)" aptget download apt --print-uris
+testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s "$DEBFILE") SHA512:$(sha512sum "$DEBFILE" | cut -d' ' -f 1)" aptget download apt --print-uris
 
 
 # deb:677887
 # deb:677887
 testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms --print-uris
 testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms --print-uris
@@ -83,7 +83,7 @@ testsuccess test -s apt_2.0_all.deb
 
 
 # restore "root" rights
 # restore "root" rights
 cd "$OLDPWD"
 cd "$OLDPWD"
-chmod -f -R +w $PWD/rootdir/var/cache/apt/archives
+chmod -f -R +w "$PWD/rootdir/var/cache/apt/archives"
 rm -rf rootdir/var/cache/apt/archives/
 rm -rf rootdir/var/cache/apt/archives/
 
 
 # file: debs aren't copied to archives, so change to http which obviously are
 # file: debs aren't copied to archives, so change to http which obviously are

+ 2 - 2
test/integration/test-apt-get-source-authenticated

@@ -17,8 +17,8 @@ buildsimplenativepackage 'foo' 'all' '2.0'
 
 
 setupaptarchive --no-update
 setupaptarchive --no-update
 
 
-APTARCHIVE=$(readlink -f ./aptarchive)
-rm -f $APTARCHIVE/dists/unstable/*Release*
+APTARCHIVE="$(readlink -f ./aptarchive)"
+find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete
 
 
 # update without authenticated InRelease file
 # update without authenticated InRelease file
 testwarning aptget update --allow-insecure-repositories
 testwarning aptget update --allow-insecure-repositories

+ 2 - 2
test/integration/test-apt-get-update-unauth-warning

@@ -16,8 +16,8 @@ buildsimplenativepackage 'foo' 'all' '2.0'
 
 
 setupaptarchive --no-update
 setupaptarchive --no-update
 
 
-APTARCHIVE=$(readlink -f ./aptarchive)
-rm -f $APTARCHIVE/dists/unstable/*Release*
+APTARCHIVE="$(readlink -f ./aptarchive)"
+find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete
 
 
 # update without authenticated files leads to warning
 # update without authenticated files leads to warning
 testfailureequal "Get:1 file:$APTARCHIVE unstable InRelease
 testfailureequal "Get:1 file:$APTARCHIVE unstable InRelease

+ 13 - 19
test/integration/test-apt-progress-fd-conffile

@@ -1,8 +1,8 @@
 #!/bin/sh
 #!/bin/sh
 set -e
 set -e
 
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 
 
 setupenvironment
 setupenvironment
 configarchitecture 'native'
 configarchitecture 'native'
@@ -10,18 +10,18 @@ configarchitecture 'native'
 # old conffile
 # old conffile
 setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable'
 setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable'
 BUILDDIR='incoming/compiz-core-1.0'
 BUILDDIR='incoming/compiz-core-1.0'
-mkdir -p ${BUILDDIR}/debian/compiz-core/etc
-echo 'foo=bar;' > ${BUILDDIR}/compiz.conf
-echo 'compiz.conf	/etc/compiz.conf' >> ${BUILDDIR}/debian/install
+mkdir -p "${BUILDDIR}/debian/compiz-core/etc"
+echo 'foo=bar;' > "${BUILDDIR}/compiz.conf"
+echo 'compiz.conf	/etc/compiz.conf' >> "${BUILDDIR}/debian/install"
 buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 rm -rf "$BUILDDIR"
 rm -rf "$BUILDDIR"
 
 
 # new conffile
 # new conffile
 setupsimplenativepackage 'compiz-core' 'native' '2.0' 'unstable'
 setupsimplenativepackage 'compiz-core' 'native' '2.0' 'unstable'
 BUILDDIR='incoming/compiz-core-2.0'
 BUILDDIR='incoming/compiz-core-2.0'
-mkdir -p ${BUILDDIR}/debian/compiz-core/etc
-echo 'foo2=bar2;' > ${BUILDDIR}/compiz.conf
-echo 'compiz.conf	/etc/compiz.conf' >> ${BUILDDIR}/debian/install
+mkdir -p "${BUILDDIR}/debian/compiz-core/etc"
+echo 'foo2=bar2;' > "${BUILDDIR}/compiz.conf"
+echo 'compiz.conf	/etc/compiz.conf' >> "${BUILDDIR}/debian/install"
 buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 rm -rf "$BUILDDIR"
 rm -rf "$BUILDDIR"
 
 
@@ -30,21 +30,15 @@ setupaptarchive
 testsuccess aptget install compiz-core=1.0
 testsuccess aptget install compiz-core=1.0
 
 
 # fake conffile change
 # fake conffile change
-echo "meep" >> rootdir/etc/compiz.conf/compiz.conf
+echo 'meep' >> rootdir/etc/compiz.conf/compiz.conf
 
 
 # FIXME: Is there really no way to see if dpkg actually prompts?
 # FIXME: Is there really no way to see if dpkg actually prompts?
 msgtest 'Test for successful execution of' 'apt-get install compiz-core=2.0'
 msgtest 'Test for successful execution of' 'apt-get install compiz-core=2.0'
-OUTPUT=$(mktemp)
-addtrap "rm $OUTPUT;"
+OUTPUT="$(mktemp)"
+addtrap "rm \"$OUTPUT\";"
 exec 3> apt-progress.log
 exec 3> apt-progress.log
-if aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold' >${OUTPUT} 2>&1; then
-	msgpass
-else
-	echo
-	cat $OUTPUT
-	msgfail
-fi
+testsuccess --nomsg aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold'
 
 
 # and ensure there is a conffile message in the file
 # and ensure there is a conffile message in the file
 msgtest 'Test status fd for an included' 'pmconffile msg'
 msgtest 'Test status fd for an included' 'pmconffile msg'
-grep -q "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log && msgpass || (cat apt-progress.log && msgfail)
+testsuccess --nomsg grep "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log

+ 2 - 2
test/integration/test-apt-translation-has-no-packages

@@ -24,11 +24,11 @@ fi
 buildsimplenativepackage 'foo' 'all' '1.0'
 buildsimplenativepackage 'foo' 'all' '1.0'
 setupaptarchive
 setupaptarchive
 
 
-APTARCHIVE=$(readlink -f ./aptarchive)
+APTARCHIVE="$(readlink -f ./aptarchive)"
 
 
 # corrupt the Translation-en file to look like a regular Packages file
 # corrupt the Translation-en file to look like a regular Packages file
 rm rootdir/var/cache/apt/*.bin
 rm rootdir/var/cache/apt/*.bin
-cp $APTARCHIVE/dists/unstable/main/binary-amd64/Packages \
+cp "$APTARCHIVE/dists/unstable/main/binary-amd64/Packages" \
    rootdir/var/lib/apt/lists/*Translation-en
    rootdir/var/lib/apt/lists/*Translation-en
 
 
 # ensure that there is no Version for the package foo generated out of
 # ensure that there is no Version for the package foo generated out of

+ 13 - 17
test/integration/test-apt-update-nofallback

@@ -9,14 +9,14 @@ set -e
 simulate_mitm_and_inject_evil_package()
 simulate_mitm_and_inject_evil_package()
 {
 {
     redatereleasefiles '+1 hour'
     redatereleasefiles '+1 hour'
-    rm -f $APTARCHIVE/dists/unstable/InRelease
-    rm -f $APTARCHIVE/dists/unstable/Release.gpg
+    rm -f "$APTARCHIVE/dists/unstable/InRelease"
+    rm -f "$APTARCHIVE/dists/unstable/Release.gpg"
     inject_evil_package
     inject_evil_package
 }
 }
 
 
 inject_evil_package()
 inject_evil_package()
 {
 {
-    cat > $APTARCHIVE/dists/unstable/main/binary-i386/Packages <<EOF
+    cat > "$APTARCHIVE/dists/unstable/main/binary-i386/Packages" <<EOF
 Package: evil
 Package: evil
 Installed-Size: 29
 Installed-Size: 29
 Maintainer: Joe Sixpack <joe@example.org>
 Maintainer: Joe Sixpack <joe@example.org>
@@ -46,11 +46,7 @@ assert_repo_is_intact()
     testsuccess aptget source foo --print-uris
     testsuccess aptget source foo --print-uris
 
 
     LISTDIR=rootdir/var/lib/apt/lists
     LISTDIR=rootdir/var/lib/apt/lists
-    if ! ( ls $LISTDIR/*InRelease >/dev/null 2>&1 || 
-            ls $LISTDIR/*Release.gpg >/dev/null 2>&1 ); then
-        echo "Can not find InRelease/Release.gpg in $(ls $LISTDIR)"
-        msgfail
-    fi
+    testempty find "$LISTDIR" -name 'InRelease' -o -name 'Release.gpg'
 }
 }
 
 
 setupaptarchive_with_lists_clean()
 setupaptarchive_with_lists_clean()
@@ -75,7 +71,7 @@ test_from_release_gpg_to_unsigned()
 {
 {
     # setup archive with Release/Release.gpg (but no InRelease)
     # setup archive with Release/Release.gpg (but no InRelease)
     setupaptarchive_with_lists_clean
     setupaptarchive_with_lists_clean
-    rm $APTARCHIVE/dists/unstable/InRelease
+    rm "$APTARCHIVE/dists/unstable/InRelease"
     testsuccess aptget update
     testsuccess aptget update
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
 
 
@@ -93,7 +89,7 @@ test_from_inrelease_to_unsigned_with_override()
     # simulate moving to a unsigned but otherwise valid repo
     # simulate moving to a unsigned but otherwise valid repo
     simulate_mitm_and_inject_evil_package
     simulate_mitm_and_inject_evil_package
     generatereleasefiles '+2 hours'
     generatereleasefiles '+2 hours'
-    find $APTARCHIVE -name '*Packages*' -exec touch -d '+2 hours' {} \;
+    find "$APTARCHIVE" -name '*Packages*' -exec touch -d '+2 hours' {} \;
 
 
     # and ensure we can update to it (with enough force) 
     # and ensure we can update to it (with enough force) 
     testwarning aptget update --allow-insecure-repositories \
     testwarning aptget update --allow-insecure-repositories \
@@ -128,8 +124,8 @@ test_cve_2012_0214()
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
 
 
     # do what CVE-2012-0214 did
     # do what CVE-2012-0214 did
-    rm $APTARCHIVE/dists/unstable/InRelease
-    rm $APTARCHIVE/dists/unstable/Release.gpg
+    rm "$APTARCHIVE/dists/unstable/InRelease"
+    rm "$APTARCHIVE/dists/unstable/Release.gpg"
     inject_evil_package
     inject_evil_package
     # build valid Release file
     # build valid Release file
     aptftparchive -qq release ./aptarchive > aptarchive/dists/unstable/Release 
     aptftparchive -qq release ./aptarchive > aptarchive/dists/unstable/Release 
@@ -149,7 +145,7 @@ test_subvert_inrelease()
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
 
 
     # replace InRelease with something else
     # replace InRelease with something else
-    mv $APTARCHIVE/dists/unstable/Release $APTARCHIVE/dists/unstable/InRelease
+    mv "$APTARCHIVE/dists/unstable/Release" "$APTARCHIVE/dists/unstable/InRelease"
 
 
     testfailuremsg "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease  Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
     testfailuremsg "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease  Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
@@ -167,7 +163,7 @@ test_inrelease_to_invalid_inrelease()
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
 
 
     # now remove InRelease and subvert Release do no longer verify
     # now remove InRelease and subvert Release do no longer verify
-    sed -i 's/^Codename:.*/Codename: evil!/' $APTARCHIVE/dists/unstable/InRelease
+    sed -i 's/^Codename:.*/Codename: evil!/' "$APTARCHIVE/dists/unstable/InRelease"
     inject_evil_package
     inject_evil_package
 
 
     testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
     testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
@@ -184,12 +180,12 @@ test_release_gpg_to_invalid_release_release_gpg()
 {
 {
     # setup archive with InRelease
     # setup archive with InRelease
     setupaptarchive_with_lists_clean
     setupaptarchive_with_lists_clean
-    rm $APTARCHIVE/dists/unstable/InRelease
+    rm "$APTARCHIVE/dists/unstable/InRelease"
     testsuccess aptget update
     testsuccess aptget update
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
 
 
     # now subvert Release do no longer verify
     # now subvert Release do no longer verify
-    echo "Some evil data" >>  $APTARCHIVE/dists/unstable/Release
+    echo "Some evil data" >> "$APTARCHIVE/dists/unstable/Release"
     inject_evil_package
     inject_evil_package
 
 
     testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
     testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
@@ -213,7 +209,7 @@ buildsimplenativepackage 'foo' 'all' '2.0'
 
 
 # setup the archive and ensure we have a single package that installs fine
 # setup the archive and ensure we have a single package that installs fine
 setupaptarchive
 setupaptarchive
-APTARCHIVE=$(readlink -f ./aptarchive)
+APTARCHIVE="$(readlink -f ./aptarchive)"
 assert_repo_is_intact
 assert_repo_is_intact
 
 
 # test the various cases where a repo may go from signed->unsigned
 # test the various cases where a repo may go from signed->unsigned

+ 24 - 24
test/integration/test-apt-update-rollback

@@ -23,14 +23,14 @@ create_fresh_archive()
 }
 }
 
 
 add_new_package() {
 add_new_package() {
-    insertpackage "unstable" "new" "all" "1.0"
-    insertsource "unstable" "new" "all" "1.0"
+    insertpackage 'unstable' 'new' 'all' '1.0'
+    insertsource 'unstable' 'new' 'all' '1.0'
 
 
     setupaptarchive --no-update "$@"
     setupaptarchive --no-update "$@"
 }
 }
 
 
 break_repository_sources_index() {
 break_repository_sources_index() {
-    printf 'xxx' > $APTARCHIVE/dists/unstable/main/source/Sources
+    printf 'xxx' > "$APTARCHIVE/dists/unstable/main/source/Sources"
     compressfile "$APTARCHIVE/dists/unstable/main/source/Sources" "$@"
     compressfile "$APTARCHIVE/dists/unstable/main/source/Sources" "$@"
 }
 }
 
 
@@ -38,7 +38,7 @@ start_with_good_inrelease() {
     create_fresh_archive
     create_fresh_archive
     testsuccess aptget update
     testsuccess aptget update
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
-    testsuccessequal "old/unstable 1.0 all" apt list -q
+    testsuccessequal 'old/unstable 1.0 all' apt list -q
 }
 }
 
 
 test_inrelease_to_new_inrelease() {
 test_inrelease_to_new_inrelease() {
@@ -47,8 +47,8 @@ test_inrelease_to_new_inrelease() {
 
 
     add_new_package '+1hour'
     add_new_package '+1hour'
     testsuccess aptget update -o Debug::Acquire::Transaction=1
     testsuccess aptget update -o Debug::Acquire::Transaction=1
-    testsuccessequal "new/unstable 1.0 all
-old/unstable 1.0 all" apt list -q
+    testsuccessequal 'new/unstable 1.0 all
+old/unstable 1.0 all' apt list -q
 }
 }
 
 
 test_inrelease_to_broken_hash_reverts_all() {
 test_inrelease_to_broken_hash_reverts_all() {
@@ -73,8 +73,8 @@ test_inrelease_to_valid_release() {
 
 
     add_new_package '+1hour'
     add_new_package '+1hour'
     # switch to a unsigned repo now
     # switch to a unsigned repo now
-    rm $APTARCHIVE/dists/unstable/InRelease
-    rm $APTARCHIVE/dists/unstable/Release.gpg
+    rm "$APTARCHIVE/dists/unstable/InRelease"
+    rm "$APTARCHIVE/dists/unstable/Release.gpg"
 
 
     # update fails
     # update fails
     testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq
     testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq
@@ -83,8 +83,8 @@ test_inrelease_to_valid_release() {
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testsuccess aptget install old -s
     testsuccess aptget install old -s
     testfailure aptget install new -s
     testfailure aptget install new -s
-    testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease
-    testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release
+    testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
+    testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release'
 }
 }
 
 
 test_inrelease_to_release_reverts_all() {
 test_inrelease_to_release_reverts_all() {
@@ -93,8 +93,8 @@ test_inrelease_to_release_reverts_all() {
 
 
     # switch to a unsigned repo now
     # switch to a unsigned repo now
     add_new_package '+1hour'
     add_new_package '+1hour'
-    rm $APTARCHIVE/dists/unstable/InRelease
-    rm $APTARCHIVE/dists/unstable/Release.gpg
+    rm "$APTARCHIVE/dists/unstable/InRelease"
+    rm "$APTARCHIVE/dists/unstable/Release.gpg"
 
 
     # break it
     # break it
     break_repository_sources_index '+1hour'
     break_repository_sources_index '+1hour'
@@ -106,15 +106,15 @@ test_inrelease_to_release_reverts_all() {
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testsuccess aptget install old -s
     testsuccess aptget install old -s
     testfailure aptget install new -s
     testfailure aptget install new -s
-    testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease
-    testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release
+    testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
+    testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release'
 }
 }
 
 
 test_unauthenticated_to_invalid_inrelease() {
 test_unauthenticated_to_invalid_inrelease() {
     msgmsg 'Test UnAuthenticated to invalid InRelease reverts everything'
     msgmsg 'Test UnAuthenticated to invalid InRelease reverts everything'
     create_fresh_archive
     create_fresh_archive
-    rm $APTARCHIVE/dists/unstable/InRelease
-    rm $APTARCHIVE/dists/unstable/Release.gpg
+    rm "$APTARCHIVE/dists/unstable/InRelease"
+    rm "$APTARCHIVE/dists/unstable/Release.gpg"
 
 
     testwarning aptget update --allow-insecure-repositories
     testwarning aptget update --allow-insecure-repositories
     listcurrentlistsdirectory > lists.before
     listcurrentlistsdirectory > lists.before
@@ -130,7 +130,7 @@ E: There were unauthenticated packages and -y was used without --allow-unauthent
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
 
 
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testfileequal lists.before "$(listcurrentlistsdirectory)"
-    testfailure ls rootdir/var/lib/apt/lists/*_InRelease
+    testempty find "${ROOTDIR}/var/lib/apt/lists" -maxdepth 1 -name '*_InRelease'
     testfailureequal "WARNING: The following packages cannot be authenticated!
     testfailureequal "WARNING: The following packages cannot be authenticated!
   old
   old
 E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y old
 E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y old
@@ -147,7 +147,7 @@ W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease  The following sign
 W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
 W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
 
 
     testfileequal lists.before "$(listcurrentlistsdirectory)"
     testfileequal lists.before "$(listcurrentlistsdirectory)"
-    testsuccess ls rootdir/var/lib/apt/lists/*_InRelease
+    testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
 }
 }
 
 
 test_inrelease_to_broken_gzip() {
 test_inrelease_to_broken_gzip() {
@@ -159,10 +159,10 @@ test_inrelease_to_broken_gzip() {
     signreleasefiles
     signreleasefiles
 
 
     # append junk at the end of the compressed file
     # append junk at the end of the compressed file
-    echo "lala" >> $APTARCHIVE/dists/unstable/main/source/Sources.gz
-    touch -d '+2min' $APTARCHIVE/dists/unstable/main/source/Sources.gz
+    echo "lala" >> "$APTARCHIVE/dists/unstable/main/source/Sources.gz"
+    touch -d '+2min' "$APTARCHIVE/dists/unstable/main/source/Sources.gz"
     # remove uncompressed file to avoid fallback
     # remove uncompressed file to avoid fallback
-    rm $APTARCHIVE/dists/unstable/main/source/Sources
+    rm "$APTARCHIVE/dists/unstable/main/source/Sources"
 
 
     testfailure aptget update
     testfailure aptget update
     testsuccess grep 'Hash Sum mismatch' rootdir/tmp/testfailure.output
     testsuccess grep 'Hash Sum mismatch' rootdir/tmp/testfailure.output
@@ -177,9 +177,9 @@ configarchitecture "i386"
 
 
 # setup the archive and ensure we have a single package that installs fine
 # setup the archive and ensure we have a single package that installs fine
 setupaptarchive
 setupaptarchive
-APTARCHIVE=$(readlink -f ./aptarchive)
-ROOTDIR=${TMPWORKINGDIRECTORY}/rootdir
-APTARCHIVE_LISTS="$(echo $APTARCHIVE | tr "/" "_" )"
+APTARCHIVE="$(readlink -f ./aptarchive)"
+ROOTDIR="${TMPWORKINGDIRECTORY}/rootdir"
+APTARCHIVE_LISTS="$(echo "$APTARCHIVE" | tr "/" "_" )"
 
 
 # test the following cases:
 # test the following cases:
 # - InRelease -> broken InRelease revert to previous state
 # - InRelease -> broken InRelease revert to previous state

+ 1 - 1
test/integration/test-bug-590041-prefer-non-virtual-packages

@@ -38,7 +38,7 @@ Section: oldlibs
 Size: 44168
 Size: 44168
 "
 "
 
 
-cat <<-EOF >aptarchive/Packages
+cat >aptarchive/Packages <<EOF
 $pkglibc6
 $pkglibc6
 $pkglibdb1
 $pkglibdb1
 EOF
 EOF

+ 3 - 9
test/integration/test-bug-728500-tempdir

@@ -14,16 +14,10 @@ changetowebserver
 
 
 msgtest 'Test apt-get update with incorrect' 'TMPDIR'
 msgtest 'Test apt-get update with incorrect' 'TMPDIR'
 
 
-OUTPUT=$(mktemp)
-addtrap "rm $OUTPUT;"
+OUTPUT="$(mktemp)"
+addtrap "rm \"$OUTPUT\";"
 export TMPDIR=/does-not-exists
 export TMPDIR=/does-not-exists
-if aptget update -o Debug::Acquire::gpg=1 >${OUTPUT} 2>&1; then
-	msgpass
-else
-	echo
-	cat $OUTPUT
-	msgfail
-fi
+testsuccess aptget update -o Debug::Acquire::gpg=1
 unset TMPDIR
 unset TMPDIR
 
 
 testsuccessequal 'coolstuff' aptcache pkgnames
 testsuccessequal 'coolstuff' aptcache pkgnames

+ 9 - 6
test/integration/test-bug-738785-switch-protocol

@@ -42,12 +42,15 @@ testdpkginstalled 'apt'
 # install a slowed down file: otherwise its to fast to reproduce combining
 # install a slowed down file: otherwise its to fast to reproduce combining
 NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
 NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
 OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
 OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
-rm $NEWMETHODS
-mkdir $NEWMETHODS
-for METH in $(find $OLDMETHODS ! -type d); do
-	ln -s $OLDMETHODS/$(basename $METH) $NEWMETHODS
+rm "$NEWMETHODS"
+mkdir "$NEWMETHODS"
+backupIFS="$IFS"
+IFS="$(printf "\n\b")"
+for METH in $(find "$OLDMETHODS" ! -type d); do
+	ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS"
 done
 done
-rm $NEWMETHODS/https
+IFS="$backupIFS"
+rm "$NEWMETHODS/https"
 
 
 cd downloaded
 cd downloaded
 testfailureequal "E: The method driver $(readlink -f './../')/rootdir/usr/lib/apt/methods/https could not be found.
 testfailureequal "E: The method driver $(readlink -f './../')/rootdir/usr/lib/apt/methods/https could not be found.
@@ -56,7 +59,7 @@ testfailure test -e apt_1.0_all.deb
 cd - >/dev/null
 cd - >/dev/null
 
 
 # revert to all methods
 # revert to all methods
-ln -s $OLDMETHODS/https $NEWMETHODS
+ln -s "$OLDMETHODS/https" "$NEWMETHODS"
 
 
 # check that downgrades from https to http are not allowed
 # check that downgrades from https to http are not allowed
 webserverconfig 'aptwebserver::support::http' 'true'
 webserverconfig 'aptwebserver::support::http' 'true'

+ 2 - 2
test/integration/test-bug-769609-triggers-still-pending-after-run

@@ -20,13 +20,13 @@ buildtriggerpackages() {
 	local TYPE="$1"
 	local TYPE="$1"
 	setupsimplenativepackage "triggerable-$TYPE" 'all' '1.0' 'unstable' "Depends: trigdepends-$TYPE"
 	setupsimplenativepackage "triggerable-$TYPE" 'all' '1.0' 'unstable' "Depends: trigdepends-$TYPE"
 	BUILDDIR="incoming/triggerable-${TYPE}-1.0"
 	BUILDDIR="incoming/triggerable-${TYPE}-1.0"
-	cat >${BUILDDIR}/debian/postinst <<EOF
+	cat >"${BUILDDIR}/debian/postinst" <<EOF
 #!/bin/sh
 #!/bin/sh
 if [ "\$1" = 'triggered' ]; then
 if [ "\$1" = 'triggered' ]; then
 	ls -l /proc/self/fd/
 	ls -l /proc/self/fd/
 fi
 fi
 EOF
 EOF
-	echo "$TYPE /usr/share/doc" > ${BUILDDIR}/debian/triggers
+	echo "$TYPE /usr/share/doc" > "${BUILDDIR}/debian/triggers"
 	buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 	buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 	rm -rf "$BUILDDIR"
 	rm -rf "$BUILDDIR"
 	buildsimplenativepackage "trigdepends-$TYPE" 'all' '1.0' 'unstable'
 	buildsimplenativepackage "trigdepends-$TYPE" 'all' '1.0' 'unstable'

+ 23 - 23
test/integration/test-disappearing-packages

@@ -1,30 +1,30 @@
 #!/bin/sh
 #!/bin/sh
 set -e
 set -e
 
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 setupenvironment
 setupenvironment
 configarchitecture 'native'
 configarchitecture 'native'
 
 
-buildsimplenativepackage "old-pkg" "native" "1.0" "stable"
-buildsimplenativepackage "unrelated" "all" "0.5" "unstable"
+buildsimplenativepackage 'old-pkg' 'native' '1.0' 'stable'
+buildsimplenativepackage 'unrelated' 'all' '0.5' 'unstable'
 
 
-setupsimplenativepackage "new-pkg" "native" "2.0" "unstable" "Provides: old-pkg
+setupsimplenativepackage 'new-pkg' 'native' '2.0' 'unstable' 'Provides: old-pkg
 Replaces: old-pkg
 Replaces: old-pkg
-Conflicts: old-pkg (<< 2.0)"
-BUILDDIR="incoming/new-pkg-2.0"
-echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/new-pkg.links
-buildpackage "$BUILDDIR" "unstable" "main"
+Conflicts: old-pkg (<< 2.0)'
+BUILDDIR='incoming/new-pkg-2.0'
+echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/new-pkg.links"
+buildpackage "$BUILDDIR" 'unstable' 'main'
 rm -rf "$BUILDDIR"
 rm -rf "$BUILDDIR"
 
 
-setupsimplenativepackage "old-pkg" "all" "2.0" "unstable" "Depends: new-pkg"
-BUILDDIR="incoming/old-pkg-2.0"
-echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/old-pkg.links
+setupsimplenativepackage 'old-pkg' 'all' '2.0' 'unstable' 'Depends: new-pkg'
+BUILDDIR='incoming/old-pkg-2.0'
+echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/old-pkg.links"
 echo "
 echo "
 override_dh_link:
 override_dh_link:
 	rm -rf debian/old-pkg/usr/share/doc/old-pkg/
 	rm -rf debian/old-pkg/usr/share/doc/old-pkg/
-	dh_link" >> ${BUILDDIR}/debian/rules
-buildpackage "$BUILDDIR" "unstable" "main"
+	dh_link" >> "${BUILDDIR}/debian/rules"
+buildpackage "$BUILDDIR" 'unstable' 'main'
 rm -rf "$BUILDDIR"
 rm -rf "$BUILDDIR"
 
 
 setupaptarchive
 setupaptarchive
@@ -33,22 +33,22 @@ testsuccess aptget install old-pkg=1.0 --trivial-only
 
 
 testmarkedauto # old-pkg is manual installed
 testmarkedauto # old-pkg is manual installed
 
 
-CMD="aptget dist-upgrade -y -q=0"
-msgtest "Test for equality of" "$CMD"
-COMPAREFILE=$(mktemp)
-echo "The following package disappeared from your system as
+CMD='aptget dist-upgrade -y -q=0'
+msgtest 'Test for equality of' "$CMD"
+COMPAREFILE="$(mktemp)"
+echo 'The following package disappeared from your system as
 all files have been overwritten by other packages:
 all files have been overwritten by other packages:
   old-pkg
   old-pkg
-Note: This is done automatically and on purpose by dpkg." > $COMPAREFILE
-$CMD 2>&1 | tail -n 4 | diff -u $COMPAREFILE - && msgpass || msgfail
-rm $COMPAREFILE
+Note: This is done automatically and on purpose by dpkg.' > "$COMPAREFILE"
+$CMD 2>&1 | tail -n 4 | diff -u "$COMPAREFILE" - && msgpass || msgfail
+rm "$COMPAREFILE"
 
 
 sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #"
 sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #"
-testfileequal "rootdir/var/log/apt/history.log" "
+testfileequal 'rootdir/var/log/apt/history.log' '
 Install: old-pkg:native (1.0)
 Install: old-pkg:native (1.0)
 
 
 Install: new-pkg:native (2.0, automatic)
 Install: new-pkg:native (2.0, automatic)
 Upgrade: old-pkg:native (1.0, 2.0)
 Upgrade: old-pkg:native (1.0, 2.0)
-Disappeared: old-pkg (1.0)"
+Disappeared: old-pkg (1.0)'
 
 
 testmarkedauto  # new-pkg should have get the manual flag from old-pkg
 testmarkedauto  # new-pkg should have get the manual flag from old-pkg

+ 13 - 13
test/integration/test-failing-maintainer-scripts

@@ -13,7 +13,7 @@ createfailure() {
 	setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee'
 	setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee'
 	BUILDDIR="incoming/failure-$1-1.0"
 	BUILDDIR="incoming/failure-$1-1.0"
 	echo '#!/bin/sh
 	echo '#!/bin/sh
-exit 29' > ${BUILDDIR}/debian/$1
+exit 29' > "${BUILDDIR}/debian/$1"
 	buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 	buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 	rm -rf "$BUILDDIR"
 	rm -rf "$BUILDDIR"
 }
 }
@@ -31,40 +31,40 @@ APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook"
 echo '#!/bin/sh
 echo '#!/bin/sh
 echo "$1: START"
 echo "$1: START"
 echo "$1: MaiN"
 echo "$1: MaiN"
-echo "$1: ENd"' > $APTHOOK
-chmod +x $APTHOOK
+echo "$1: ENd"' > "$APTHOOK"
+chmod +x "$APTHOOK"
 echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\";
 echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\";
 DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks
 DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks
 
 
 testmyfailure() {
 testmyfailure() {
 	local PROGRESS='rootdir/tmp/progress.log'
 	local PROGRESS='rootdir/tmp/progress.log'
-	exec 3> $PROGRESS
+	exec 3> "$PROGRESS"
 	testfailure "$@" -o APT::Status-Fd=3
 	testfailure "$@" -o APT::Status-Fd=3
 	msgtest 'Test for failure message of maintainerscript in' 'console log'
 	msgtest 'Test for failure message of maintainerscript in' 'console log'
 	local TEST='rootdir/tmp/testfailure.output'
 	local TEST='rootdir/tmp/testfailure.output'
 	if grep -q 'exit status 29' "$TEST"; then
 	if grep -q 'exit status 29' "$TEST"; then
 		msgpass
 		msgpass
 	else
 	else
-		cat $TEST
+		cat "$TEST"
 		msgfail
 		msgfail
 	fi
 	fi
 	msgtest 'Test for proper execution of invoke scripts in' 'console log'
 	msgtest 'Test for proper execution of invoke scripts in' 'console log'
-	if grep -q '^PRE: START$' $TEST &&
-		grep -q '^PRE: MaiN$' $TEST &&
-		grep -q '^PRE: ENd$' $TEST &&
-		grep -q '^POST: START$' $TEST &&
-		grep -q '^POST: MaiN$' $TEST &&
-		grep -q '^POST: ENd$' $TEST; then
+	if grep -q '^PRE: START$' "$TEST" &&
+		grep -q '^PRE: MaiN$' "$TEST" &&
+		grep -q '^PRE: ENd$' "$TEST" &&
+		grep -q '^POST: START$' "$TEST" &&
+		grep -q '^POST: MaiN$' "$TEST" &&
+		grep -q '^POST: ENd$' "$TEST"; then
 		msgpass
 		msgpass
 	else
 	else
-		cat $TEST
+		cat "$TEST"
 		msgfail
 		msgfail
 	fi
 	fi
 	msgtest 'Test for failure message of maintainerscript in' 'progress log'
 	msgtest 'Test for failure message of maintainerscript in' 'progress log'
 	if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then
 	if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then
 		msgpass
 		msgpass
 	else
 	else
-		cat $PROGRESS
+		cat "$PROGRESS"
 		msgfail
 		msgfail
 	fi
 	fi
 	testmarkedauto 'dependee'
 	testmarkedauto 'dependee'

+ 1 - 1
test/integration/test-kernel-helper-autoremove

@@ -29,7 +29,7 @@ testsuccess aptmark hold "${CURRENTKERNEL}-rt"
 testprotected() {
 testprotected() {
 	rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list
 	rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list
 
 
-	testsuccess runapt sh ${TESTDIR}/../../debian/apt.auto-removal.sh "$@"
+	testsuccess runapt sh "${TESTDIR}/../../debian/apt.auto-removal.sh" "$@"
 	testfailure test -s rootdir/tmp/testsuccess.output
 	testfailure test -s rootdir/tmp/testsuccess.output
 
 
 	msgtest 'Check kernel autoremoval protection list' 'is created'
 	msgtest 'Check kernel autoremoval protection list' 'is created'

+ 1 - 1
test/integration/test-pdiff-usage

@@ -10,7 +10,7 @@ confighashes 'SHA1' 'SHA256'
 
 
 buildaptarchive
 buildaptarchive
 setupflataptarchive
 setupflataptarchive
-changetowebserver
+changetowebserver -o aptwebserver::support::modified-since=false
 
 
 PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
 PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
 
 

+ 29 - 29
test/integration/test-releasefile-verification

@@ -23,10 +23,10 @@ prepare() {
 		fi
 		fi
 	fi
 	fi
 	for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do
 	for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do
-		touch -d 'now - 1 year' $release
+		touch -d 'now - 1 year' "$release"
 	done
 	done
 	aptget clean
 	aptget clean
-	cp $1 aptarchive/Packages
+	cp "$1" aptarchive/Packages
 	find aptarchive -name 'Release' -delete
 	find aptarchive -name 'Release' -delete
 	compressfile 'aptarchive/Packages' "$DATE"
 	compressfile 'aptarchive/Packages' "$DATE"
 	generatereleasefiles "$DATE"
 	generatereleasefiles "$DATE"
@@ -89,7 +89,7 @@ E: There were unauthenticated packages and -y was used without --allow-unauthent
 # fake our downloadable file
 # fake our downloadable file
 touch aptarchive/apt.deb
 touch aptarchive/apt.deb
 
 
-PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
+PKGFILE="${TESTDIR}/$(echo "$(basename "$0")" | sed 's#^test-#Packages-#')"
 
 
 updatewithwarnings() {
 updatewithwarnings() {
 	testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
 	testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
@@ -97,97 +97,97 @@ updatewithwarnings() {
 }
 }
 
 
 runtest() {
 runtest() {
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Joe Sixpack'
 	signreleasefiles 'Joe Sixpack'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
 	testsuccess aptget update
 	testsuccess aptget update
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 
 
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	signreleasefiles 'Joe Sixpack'
 	signreleasefiles 'Joe Sixpack'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Good warm archive signed by' 'Joe Sixpack'
 	msgmsg 'Good warm archive signed by' 'Joe Sixpack'
 	testsuccess aptget update
 	testsuccess aptget update
-	testsuccessequal "$(cat ${PKGFILE}-new)
+	testsuccessequal "$(cat "${PKGFILE}-new")
 " aptcache show apt
 " aptcache show apt
 	installaptnew
 	installaptnew
 
 
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	signreleasefiles 'Rex Expired'
 	signreleasefiles 'Rex Expired'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Cold archive signed by' 'Rex Expired'
 	msgmsg 'Cold archive signed by' 'Rex Expired'
 	updatewithwarnings '^W: .* KEYEXPIRED'
 	updatewithwarnings '^W: .* KEYEXPIRED'
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	failaptold
 	failaptold
 	rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 
 
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Marvin Paranoid'
 	signreleasefiles 'Marvin Paranoid'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Cold archive signed by' 'Marvin Paranoid'
 	msgmsg 'Cold archive signed by' 'Marvin Paranoid'
 	updatewithwarnings '^W: .* NO_PUBKEY'
 	updatewithwarnings '^W: .* NO_PUBKEY'
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	failaptold
 	failaptold
 
 
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	signreleasefiles 'Joe Sixpack'
 	signreleasefiles 'Joe Sixpack'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Bad warm archive signed by' 'Joe Sixpack'
 	msgmsg 'Bad warm archive signed by' 'Joe Sixpack'
 	testsuccess aptget update
 	testsuccess aptget update
-	testsuccessequal "$(cat ${PKGFILE}-new)
+	testsuccessequal "$(cat "${PKGFILE}-new")
 " aptcache show apt
 " aptcache show apt
 	installaptnew
 	installaptnew
 
 
 
 
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Joe Sixpack'
 	signreleasefiles 'Joe Sixpack'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
 	testsuccess aptget update
 	testsuccess aptget update
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 
 
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	signreleasefiles 'Marvin Paranoid'
 	signreleasefiles 'Marvin Paranoid'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Good warm archive signed by' 'Marvin Paranoid'
 	msgmsg 'Good warm archive signed by' 'Marvin Paranoid'
 	updatewithwarnings '^W: .* NO_PUBKEY'
 	updatewithwarnings '^W: .* NO_PUBKEY'
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 
 
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	signreleasefiles 'Rex Expired'
 	signreleasefiles 'Rex Expired'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Good warm archive signed by' 'Rex Expired'
 	msgmsg 'Good warm archive signed by' 'Rex Expired'
 	updatewithwarnings '^W: .* KEYEXPIRED'
 	updatewithwarnings '^W: .* KEYEXPIRED'
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 	rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 	rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
 
 
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	signreleasefiles
 	signreleasefiles
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
 	msgmsg 'Good warm archive signed by' 'Joe Sixpack'
 	msgmsg 'Good warm archive signed by' 'Joe Sixpack'
 	testsuccess aptget update
 	testsuccess aptget update
-	testsuccessequal "$(cat ${PKGFILE}-new)
+	testsuccessequal "$(cat "${PKGFILE}-new")
 " aptcache show apt
 " aptcache show apt
 	installaptnew
 	installaptnew
 
 
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Marvin Paranoid'
 	signreleasefiles 'Marvin Paranoid'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
@@ -195,7 +195,7 @@ runtest() {
 	local MARVIN="$(readlink -f keys/marvinparanoid.pub)"
 	local MARVIN="$(readlink -f keys/marvinparanoid.pub)"
 	sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
 	sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
 	testsuccess aptget update -o Debug::pkgAcquire::Worker=1
 	testsuccess aptget update -o Debug::pkgAcquire::Worker=1
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 
 
@@ -208,7 +208,7 @@ runtest() {
 	sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
 	sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
 	local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
 	local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
 
 
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Marvin Paranoid'
 	signreleasefiles 'Marvin Paranoid'
 	find aptarchive/ -name "$DELETEFILE" -delete
 	find aptarchive/ -name "$DELETEFILE" -delete
@@ -216,7 +216,7 @@ runtest() {
 	sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
 	sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
 	cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
 	cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
 	testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
 	testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
-	testsuccessequal "$(cat ${PKGFILE})
+	testsuccessequal "$(cat "${PKGFILE}")
 " aptcache show apt
 " aptcache show apt
 	installaptold
 	installaptold
 	rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
 	rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
@@ -231,7 +231,7 @@ runtest() {
 }
 }
 
 
 runtest2() {
 runtest2() {
-	prepare ${PKGFILE}
+	prepare "${PKGFILE}"
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	signreleasefiles 'Joe Sixpack'
 	signreleasefiles 'Joe Sixpack'
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
 	msgmsg 'Cold archive signed by' 'Joe Sixpack'
@@ -239,12 +239,12 @@ runtest2() {
 
 
 	# New .deb but now an unsigned archive. For example MITM to circumvent
 	# New .deb but now an unsigned archive. For example MITM to circumvent
 	# package verification.
 	# package verification.
-	prepare ${PKGFILE}-new
+	prepare "${PKGFILE}-new"
 	find aptarchive/ -name InRelease -delete
 	find aptarchive/ -name InRelease -delete
 	find aptarchive/ -name Release.gpg -delete
 	find aptarchive/ -name Release.gpg -delete
 	msgmsg 'Warm archive signed by' 'nobody'
 	msgmsg 'Warm archive signed by' 'nobody'
 	updatewithwarnings 'W: .* no longer signed.'
 	updatewithwarnings 'W: .* no longer signed.'
-	testsuccessequal "$(cat ${PKGFILE}-new)
+	testsuccessequal "$(cat "${PKGFILE}-new")
 " aptcache show apt
 " aptcache show apt
 	failaptnew
 	failaptnew
 
 
@@ -252,7 +252,7 @@ runtest2() {
 	rm -rf rootdir/var/lib/apt/lists
 	rm -rf rootdir/var/lib/apt/lists
 	msgmsg 'Cold archive signed by' 'nobody'
 	msgmsg 'Cold archive signed by' 'nobody'
 	updatewithwarnings 'W: .* is not signed.'
 	updatewithwarnings 'W: .* is not signed.'
-	testsuccessequal "$(cat ${PKGFILE}-new)
+	testsuccessequal "$(cat "${PKGFILE}-new")
 " aptcache show apt
 " aptcache show apt
 	failaptnew
 	failaptnew
 }
 }