Przeglądaj źródła

extend the magic which creates the test archive by using FileLists to
ship the build packages in the correct distribution and section

David Kalnischkies 16 lat temu
rodzic
commit
b7899b0047
1 zmienionych plików z 91 dodań i 28 usunięć
  1. 91 28
      test/integration/framework

+ 91 - 28
test/integration/framework

@@ -125,26 +125,33 @@ buildsimplenativepackage() {
 	local RELEASE="${4:-unstable}"
 	local DEPENDENCIES="$5"
 	local DESCRIPTION="$6"
+	local SECTION="${7:-others}"
+	local DISTSECTION
+	if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
+		DISTSECTION="main"
+	else
+		DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)"
+	fi
 	msgndebug "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CDEBUG}… "
 	local BUILDDIR=incoming/${NAME}-${VERSION}
 	mkdir -p ${BUILDDIR}/debian/source
 	cd ${BUILDDIR}
 	echo "* most suckless software product ever" > FEATURES
-	test -e debian/copyright || (echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright)
-	test -e debian/changelog || (echo "$NAME ($VERSION) $RELEASE; urgency=low
+	test -e debian/copyright || echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright
+	test -e debian/changelog || echo "$NAME ($VERSION) $RELEASE; urgency=low
 
   * Initial release
 
- -- Joe Sixpack <joe@example.org>  $(date -R)" > debian/changelog)
-	test -e debian/control || (echo "Source: $NAME
-Section: admin
+ -- Joe Sixpack <joe@example.org>  $(date -R)" > debian/changelog
+	test -e debian/control || echo "Source: $NAME
+Section: $SECTION
 Priority: optional
 Maintainer: Joe Sixpack <joe@example.org>
 Build-Depends: debhelper (>= 7)
 Standards-Version: 3.9.1
 
 Package: $NAME
-Architecture: $ARCH" > debian/control)
+Architecture: $ARCH" > debian/control
 	test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control
 	if [ -z "$DESCRIPTION" ]; then
 		echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
@@ -154,17 +161,24 @@ Architecture: $ARCH" > debian/control)
 	else
 		echo "Description: $DESCRIPTION" >> debian/control
 	fi
-	test -e debian/compat || (echo "7" > debian/compat)
-	test -e debian/source/format || (echo "3.0 (native)" > debian/source/format)
+	test -e debian/compat || echo "7" > debian/compat
+	test -e debian/source/format || echo "3.0 (native)" > debian/source/format
 	test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules
-	dpkg-buildpackage -uc -us -a$ARCH > /dev/null 2> /dev/null
+	local BUILT="$(dpkg-buildpackage -uc -us -a$ARCH 2> /dev/null)"
+	local PKGS="$( echo "$BUILT" | grep '^dpkg-deb: building package' | cut -d'/' -f 2 | sed -e "s#'\.##")"
+	local SRCS="$( echo "$BUILT" | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._-]*$')"
 	cd - > /dev/null
+	for PKG in $PKGS; do
+		echo "pool/${PKG}" >> ./incoming/${RELEASE}.${DISTSECTION}.pkglist
+	done
+	for SRC in $SRCS; do
+		echo "pool/${SRC}" >> ./incoming/${RELEASE}.${DISTSECTION}.srclist
+	done
 	rm -rf $BUILDDIR
 	msgdone "debug"
 }
 
 buildaptarchive() {
-	msgninfo "Build APT archive for ${CCMD}$0${CINFO} based on "
 	if [ -d incoming ]; then
 		buildaptarchivefromincoming $*
 	else
@@ -181,6 +195,14 @@ createaptftparchiveconfig() {
 	CacheDir "' >> ftparchive.conf
 	echo -n $(readlink -f ..) >> ftparchive.conf
 	echo -n '";
+	FileListDir "' >> ftparchive.conf
+	echo -n $(readlink -f pool/) >> ftparchive.conf
+	echo -n '";
+};
+Default {
+	Packages::Compress ". gzip bzip2 lzma";
+	Sources::Compress ". gzip bzip2 lzma";
+	Contents::Compress ". gzip bzip2 lzma";
 };
 TreeDefault {
 	Directory "pool/";
@@ -199,42 +221,61 @@ APT {
 		};
 	};
 };' >> ftparchive.conf
-	if [ -z "$1" ]; then
-		echo -n 'tree "dists/unstable" {
+	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 'source";
-	Sections "main";
+		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
-	fi
+	done
+	less ftparchive.conf
 }
 
 buildaptftparchivedirectorystructure() {
-	local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#')"
-	for arch in $ARCHS; do
-		mkdir -p dists/unstable/main/binary-${arch}
+	local DISTS="$(grep -i '^tree ' ftparchive.conf | cut -d'/' -f 2 | sed -e 's#".*##')"
+	for DIST in $DISTS; do
+		local SECTIONS="$(grep -i -A 5 "dists/$DIST" ftparchive.conf | grep -i 'Sections' | cut -d'"' -f 2)"
+		for SECTION in $SECTIONS; do
+			local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')"
+			for ARCH in $ARCHS; do
+				mkdir -p dists/${DIST}/${SECTION}/binary-${ARCH}
+			done
+			mkdir -p dists/${DIST}/${SECTION}/source
+			mkdir -p dists/${DIST}/${SECTION}/i18n
+		done
 	done
-	mkdir -p dists/unstable/main/source
-	mkdir -p dists/unstable/main/i18n
 }
 
 buildaptarchivefromincoming() {
-	msginfo "incoming packages…"
+	msginfo "Build APT archive for ${CCMD}$0${CINFO} based on incoming packages…"
 	cd aptarchive
 	[ -e pool ] || ln -s ../incoming pool
 	[ -e ftparchive.conf ] || createaptftparchiveconfig
 	[ -e dists ] || buildaptftparchivedirectorystructure
+	msgninfo "\tGenerate Packages, Sources and Contents files… "
 	aptftparchive -qq generate ftparchive.conf
+	msgdone "info"
+	msgninfo "\tGenerate Release files… "
 	for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do
-		aptftparchive -qq release $dir > $dir/Release
-		sed -i -e '/0 Release$/ d' $dir/Release # remove the self reference
+		aptftparchive -qq release $dir | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference
 	done
 	cd - > /dev/null
 	msgdone "info"
 }
 
 buildaptarchivefromfiles() {
-	msginfo "prebuild files…"
+	msginfo "Build APT archive for ${CCMD}$0${CINFO} based on prebuild files…"
 	cd aptarchive
 	if [ -f Packages ]; then
 		msgninfo "\tPackages file… "
@@ -250,13 +291,26 @@ buildaptarchivefromfiles() {
 		cat Sources | lzma > Sources.lzma
 		msgdone "info"
 	fi
-	aptftparchive -qq release . > Release
-	sed -i -e '/0 Release$/ d' Release # remove the self reference
+	msgninfo "\tRelease file… "
+	aptftparchive -qq release . | sed -e '/0 Release$/ d' > Release # remove the self reference
+	msgdone "info"
 	cd ..
 }
 
-setupaptarchive() {
-	buildaptarchive
+setupdistsaptarchive() {
+	local APTARCHIVE=$(readlink -f ./aptarchive)
+	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
+	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' ' ')
+		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
+		msgdone "info"
+	done
+}
+
+setupflataptarchive() {
 	local APTARCHIVE=$(readlink -f ./aptarchive)
 	if [ -f ${APTARCHIVE}/Packages ]; then
 		msgninfo "\tadd deb sources.list line… "
@@ -272,6 +326,15 @@ setupaptarchive() {
 	else
 		rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
 	fi
+}
+
+setupaptarchive() {
+	buildaptarchive
+	if [ -e aptarchive/dists ]; then
+		setupdistsaptarchive
+	else
+		setupflataptarchive
+	fi
 	aptget update -qq
 }