From b7899b004710a0050407d4c6cdfc792110dd03cd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 18 Aug 2010 18:21:34 +0200 Subject: extend the magic which creates the test archive by using FileLists to ship the build packages in the correct distribution and section --- test/integration/framework | 119 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 91 insertions(+), 28 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index a4c857f17..66a0b5dc7 100644 --- a/test/integration/framework +++ b/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 $(date -R)" > debian/changelog) - test -e debian/control || (echo "Source: $NAME -Section: admin + -- Joe Sixpack $(date -R)" > debian/changelog + test -e debian/control || echo "Source: $NAME +Section: $SECTION Priority: optional Maintainer: Joe Sixpack 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 } -- cgit v1.2.3