Parcourir la source

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

David Kalnischkies il y a 16 ans
Parent
commit
b7899b0047
1 fichiers modifiés avec 91 ajouts et 28 suppressions
  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
 }