# Interface: define variables name, ivversionappend, and function # hack_package (). set -e dist=hardy chroot=$dist-amd64 : ${section=invirt-system} : ${ivname=$name} : ${release=unstable} # Create a chroot and define functions for using it. sid=$(schroot -b -c "$chroot") trap 'schroot -e -c "$sid"' EXIT sch() { schroot -r -c "$sid" -- "$@"; } # Run in the chroot schq() { schroot -q -r -c "$sid" -- "$@"; } # Run in the chroot quietly schr() { schroot -r -c "$sid" -u root -- "$@"; } # Run in the chroot as root schr apt-get -qq -y update || exit 3 quote() { echo "$1" | sed 's/[^[:alnum:]]/\\&/g' } munge_sections () { perl -0pe "s/^Section: /Section: $section\\//gm or die" -i debian/control } add_changelog () { if [ -n "$dch_done" ]; then dch "$@" else echo | dch -v"${ivversion}" -D unstable "$@" dch_done=1 fi } append_description () { perl -0pe 'open THREE, "; s/(^Description:.*\n( .*\S.*\n)*)/$1$x/gm or die' -i debian/control 3<&0 } add_build_depends () { perl -0pe 's/^(Build-Depends:.*(?:\n[ \t].*)*)$/$1, '"$1"'/m or die' -i debian/control } add_invirt_provides () { [ "$name" = "$ivname" ] perl -0pe 's/^(Package: (.*)\n(?:(?!Provides:).+\n)*)(?:Provides: (.*)\n((?:.+\n)*))?(?=\n|\z)/$1Provides: $3, invirt-$2\n$4/mg or die; s/^Provides: , /Provides: /mg' -i debian/control add_changelog "Provide invirt-$name." } rename_source () { perl -pe "s{^Source: $name\$}{Source: $ivname}" -i debian/control add_changelog "Rename package to $ivname." perl -0pe "s/^$name/$ivname/" -i debian/changelog } find_arch () { if grep -iq '^Architecture: all' "${ivname}_$ivfilever.dsc"; then a=-A fi } cmd_source () { echo "Building source for $ivname-$ivfilever on ${dist}-amd64" >&2 if ! [ -e "${name}_$filever.dsc" ]; then sch apt-get -d source "$name" fi if ! [ -e "${ivname}_$ivfilever.dsc" ]; then ( tmpdir=$(mktemp -td "invirtify.$$.XXXXXXXXXX") trap 'rm -rf "$tmpdir"' EXIT origversion=$(echo "$filever" | sed 's/-[^-]*$//') cp -a "${name}_$origversion.orig.tar.gz" "$tmpdir/" dscdir=$(pwd) cd "$tmpdir/" dpkg-source -x "$dscdir/${name}_$filever.dsc" "$tmpdir/$name-$origversion" cd "$tmpdir/$name-$origversion" dch_done= hack_package if [ "$name" != "$ivname" ]; then rename_source cp -a "$tmpdir/${name}_$origversion.orig.tar.gz" "$tmpdir/${ivname}_$origversion.orig.tar.gz" cp -a "$tmpdir/${ivname}_$origversion.orig.tar.gz" "$dscdir" fi [ -n "$dch_done" ] schr apt-get -q -y install devscripts pbuilder schr /usr/lib/pbuilder/pbuilder-satisfydepends sch debuild -S -sa -us -uc -i -I.svn && cp -a "../${ivname}_$ivfilever"* "$dscdir" ) [ $? -eq 0 ] || exit 1 if [ -n "$IV_CHECK_DIFFS" ]; then interdiff -z "${name}_$filever.diff.gz" "${ivname}_$ivfilever.diff.gz" | \ enscript --color --language=ansi --highlight=diffu --output=- -q | \ less -R echo -n "Press Enter to continue: " >&2 read dummy fi fi } cmd_binary () { find_arch if [ "$a" = "-A" ]; then sbuild -d "$dist" --arch-all "${ivname}_$ivfilever.dsc" else sbuild -d "$dist" --arch amd64 --arch-all "${ivname}_$ivfilever.dsc" sbuild -d "$dist" --arch i386 "${ivname}_$ivfilever.dsc" fi } v () { echo "$@" "$@" } cmd_upload () { find_arch v reprepro-env include "${release}" "${ivname}_${ivfilever}_source.changes" v reprepro-env include "${release}" "${ivname}_${ivfilever}_amd64.changes" if [ -z "$a" ]; then v reprepro-env include "${release}" "${ivname}_${ivfilever}_i386.changes" fi } version=$( sch apt-cache showsrc "$name" | \ sed -n 's/^Version: \(.*\)$/\1/ p' | ( version='~~~' while read -r newversion; do if [ $(expr "$newversion" : '.*invirt') = 0 ] && \ dpkg --compare-versions "$newversion" '>' "$version"; then version=$newversion fi done if [ "$version" = '~~~' ]; then echo "No version of $name found." >&2 exit 1 fi echo "$version" ) ) ivversion=$version$ivversionappend filever=$(echo "$version" | perl -pe 's/([^:]*:)?//') ivfilever=$(echo "$ivversion" | perl -pe 's/([^:]*:)?//') # Look for binary packages built from the named package with the right # version, and exit out if we find one (an architecture-specific one # if we weren't run with the -A flag). We need to look for either a # Source: or a Package: header matching $name since there is no # Source: header for a package whose name matches its source. pkgfiles="/srv/repository/dists/$release/$section/binary-*/Packages.gz" if { zcat $pkgfiles | \ dpkg-awk -f - "Package:^$ivname\$" "Version:^$(quote "$ivversion")\$" -- Architecture; zcat $pkgfiles | \ dpkg-awk -f - "Source:^$ivname\$" "Version:^$(quote "$ivversion")\$" -- Architecture; } \ | if [ "$a" = "-A" ]; then cat; else fgrep -vx 'Architecture: all'; fi \ | grep -q .; then echo "$ivname $ivversion already exists." >&2 exit 0 fi for cmd; do "cmd_$cmd" done