Message ID | 1533249635-9483-5-git-send-email-kamal@canonical.com |
---|---|
State | New |
Headers | show |
Series | git-build-kernel: source pkg features | expand |
On Thu, Aug 02, 2018 at 03:40:32PM -0700, Kamal Mostafa wrote: > Determine latest released package version in <series>-updates and supply > it to dpkg-genchanges via debuild -vversion. > > Special case: If rmadison reports that the version published in -updates > is the same or newer than the source package version being built, then > just do not pass any -v<updates_version> to debuild. dpkg-genchanges > does actually detect such out-of-order versions but misbehaves if the > updates_version doesn't exist in the changelog at all (as with our > derivative kernels). This situation only occurs when test-building > source packages which have already been published; the resulting source > package could not be re-uploaded anyway, so the contents of > _source.changes are not critical. > > Signed-off-by: Kamal Mostafa <kamal@canonical.com> > --- > git-build-kernel/git-build-kernel | 40 ++++++++++++++++++++++++++++++++------- > 1 file changed, 33 insertions(+), 7 deletions(-) > > diff --git a/git-build-kernel/git-build-kernel b/git-build-kernel/git-build-kernel > index cfad062..a683ad4 100755 > --- a/git-build-kernel/git-build-kernel > +++ b/git-build-kernel/git-build-kernel > @@ -95,6 +95,31 @@ then > CHROOT="${CHROOT%.git}" > fi > > +### Get the source package version number > +chg="`git show $GITBRANCH:$DEBIAN/changelog | head -1`" > +VERSION=`echo "$chg" | sed -n -e '1s/^.*(\([^)]*\)).*$/\1/p'` > + > +### Find the appropriate -v{version} value for dpkg-genchanges > +[ $do_source_pkg = 1 ] && { > + updates_version=$(rmadison -s ${DISTRO}-updates $SRCPKG | grep 'source$' | awk '{print $3}') > + if [ -n "$updates_version" ] > + then > + dpkg --compare-versions "$updates_version" ge $VERSION && { > + echo "WARNING: ${DISTRO}-updates version ($updates_version) >= this version; skipping -v!" 1>&2 > + updates_version="" > + } > + else > + echo "WARNING: cannot determine ${DISTRO}-updates version for $SRCPKG" 1>&2 > + fi > + if [ -n "$updates_version" ] > + then > + ### Special case for backport kernel versions: strip the e.g. "~16.04.1" > + ### suffix from the updates_version > + updates_version="${updates_version%~*}" > + srcpkg_debopts="-v$updates_version $srcpkg_debopts" It is quite upsetting that we have to have this vileness in here. I have a proposal to avoid this which I will discuss as a potential follow on. > + fi > +} > + > ### Compile amd64 and i386 in a native chroot. > ### Cross-compile ARM in an amd64 chroot (for dramatically better performance). > if [ "$ARCH" = "amd64" -o "$ARCH" = "i386" ] > @@ -104,10 +129,6 @@ else > CHROOT="$CHROOT-amd64" > fi > > -### Get the version number - we need it to locate the orig tarball > -chg="`git show $GITBRANCH:$DEBIAN/changelog | head -1`" > -VERSION=`echo "$chg" | sed -n -e '1s/^.*(\([^)]*\)).*$/\1/p'` > - > > ### Set up the /tmp work directory > > @@ -138,7 +159,12 @@ trap "rm -rf $WORKDIR/building $BUILDDIR" 0 > echo "git-build-kernel" > echo " package: $SRCPKG ($VERSION) $DISTRO" > echo " targets: $TARGETS" > -echo " arch: $ARCH" > +if [ $do_source_pkg = 1 ] > +then > + echo " changes-v: $updates_version" > +else > + echo " arch: $ARCH" > +fi > echo " chroot: $CHROOT" > echo " starting build in $HOSTNAME:$WORKDIR ..." > > @@ -180,7 +206,7 @@ show_elapsed & > fakeroot debian/rules clean > if [ $do_source_pkg = 1 ] > then > - debuild -S -I -i -uc -us > + debuild $srcpkg_debopts -S -I -i -uc -us > else > debian/rules build > fakeroot debian/rules $TARGETS > @@ -194,7 +220,7 @@ XXEOFXX > fakeroot debian/rules clean > if [ $do_source_pkg = 1 ] > then > - debuild -S -I -i -uc -us > + debuild $srcpkg_debopts -S -I -i -uc -us > else > debian/rules build > fakeroot debian/rules $TARGETS > -- > 2.7.4 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
diff --git a/git-build-kernel/git-build-kernel b/git-build-kernel/git-build-kernel index cfad062..a683ad4 100755 --- a/git-build-kernel/git-build-kernel +++ b/git-build-kernel/git-build-kernel @@ -95,6 +95,31 @@ then CHROOT="${CHROOT%.git}" fi +### Get the source package version number +chg="`git show $GITBRANCH:$DEBIAN/changelog | head -1`" +VERSION=`echo "$chg" | sed -n -e '1s/^.*(\([^)]*\)).*$/\1/p'` + +### Find the appropriate -v{version} value for dpkg-genchanges +[ $do_source_pkg = 1 ] && { + updates_version=$(rmadison -s ${DISTRO}-updates $SRCPKG | grep 'source$' | awk '{print $3}') + if [ -n "$updates_version" ] + then + dpkg --compare-versions "$updates_version" ge $VERSION && { + echo "WARNING: ${DISTRO}-updates version ($updates_version) >= this version; skipping -v!" 1>&2 + updates_version="" + } + else + echo "WARNING: cannot determine ${DISTRO}-updates version for $SRCPKG" 1>&2 + fi + if [ -n "$updates_version" ] + then + ### Special case for backport kernel versions: strip the e.g. "~16.04.1" + ### suffix from the updates_version + updates_version="${updates_version%~*}" + srcpkg_debopts="-v$updates_version $srcpkg_debopts" + fi +} + ### Compile amd64 and i386 in a native chroot. ### Cross-compile ARM in an amd64 chroot (for dramatically better performance). if [ "$ARCH" = "amd64" -o "$ARCH" = "i386" ] @@ -104,10 +129,6 @@ else CHROOT="$CHROOT-amd64" fi -### Get the version number - we need it to locate the orig tarball -chg="`git show $GITBRANCH:$DEBIAN/changelog | head -1`" -VERSION=`echo "$chg" | sed -n -e '1s/^.*(\([^)]*\)).*$/\1/p'` - ### Set up the /tmp work directory @@ -138,7 +159,12 @@ trap "rm -rf $WORKDIR/building $BUILDDIR" 0 echo "git-build-kernel" echo " package: $SRCPKG ($VERSION) $DISTRO" echo " targets: $TARGETS" -echo " arch: $ARCH" +if [ $do_source_pkg = 1 ] +then + echo " changes-v: $updates_version" +else + echo " arch: $ARCH" +fi echo " chroot: $CHROOT" echo " starting build in $HOSTNAME:$WORKDIR ..." @@ -180,7 +206,7 @@ show_elapsed & fakeroot debian/rules clean if [ $do_source_pkg = 1 ] then - debuild -S -I -i -uc -us + debuild $srcpkg_debopts -S -I -i -uc -us else debian/rules build fakeroot debian/rules $TARGETS @@ -194,7 +220,7 @@ XXEOFXX fakeroot debian/rules clean if [ $do_source_pkg = 1 ] then - debuild -S -I -i -uc -us + debuild $srcpkg_debopts -S -I -i -uc -us else debian/rules build fakeroot debian/rules $TARGETS
Determine latest released package version in <series>-updates and supply it to dpkg-genchanges via debuild -vversion. Special case: If rmadison reports that the version published in -updates is the same or newer than the source package version being built, then just do not pass any -v<updates_version> to debuild. dpkg-genchanges does actually detect such out-of-order versions but misbehaves if the updates_version doesn't exist in the changelog at all (as with our derivative kernels). This situation only occurs when test-building source packages which have already been published; the resulting source package could not be re-uploaded anyway, so the contents of _source.changes are not critical. Signed-off-by: Kamal Mostafa <kamal@canonical.com> --- git-build-kernel/git-build-kernel | 40 ++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-)