view contrib/packaging/builddeb @ 40104:338230555429

packaging: blindly factor out trap's cleanup function in builddeb This commit blindly extracts builddeb's trap routine in a dedicated function. While doing so, I think two bugs are exposed, which will be addressed in the next commits: - single quoting around '$CLEANUP' will always evaluate to the literal '$CLEANUP' regardless of the variable's value. The "if" will always be true. - the removal operation will not expand $PWD (and a variable expansion would need double quotes, anyways.
author muxator <a.mux@inwind.it>
date Tue, 09 Oct 2018 22:16:25 +0200
parents 01425e3c2645
children d3780c8f3180
line wrap: on
line source

#!/bin/sh -e
#
# Build a Mercurial debian package from the current repo
#
# Tested on Jessie (stable as of original script authoring.)

. $(dirname $0)/packagelib.sh

ROOTDIR=$(cd $(dirname $0)/../.. > /dev/null; pwd)

BUILD=1
CLEANUP=1
DISTID=`(lsb_release -is 2> /dev/null | tr '[:upper:]' '[:lower:]') || echo debian`
CODENAME=`lsb_release -cs 2> /dev/null || echo unknown`
DEBFLAGS=-b

cleanup() {
    if [ '$CLEANUP' ]; then
        rm -r '$PWD/debian';
    fi
}

while [ "$1" ]; do
    case "$1" in
    --distid )
        shift
        DISTID="$1"
        shift
        ;;
    --codename )
        shift
        CODENAME="$1"
        shift
        ;;
    --cleanup )
        shift
        BUILD=
        ;;
    --build )
        shift
        CLEANUP=
        ;;
    --source-only )
        shift
        DEBFLAGS=-S
        ;;
    * )
        echo "Invalid parameter $1!" 1>&2
        exit 1
        ;;
    esac
done

trap 'cleanup' EXIT

set -u

if [ ! -d .hg ]; then
    printf "You are inside %s, which is not the root of a Mercurial repository\n" $(pwd) 1>&2
    exit 1
fi

gethgversion
debver="$version"
if [ -n "$type" ] ; then
    debver="$debver~$type"
fi
if [ -n "$distance" ] ; then
    debver="$debver+$distance-$CODENAME-$node"
elif [ "$DEBFLAGS" = "-S" ] ; then
    # for building a ppa (--source-only) for a release (distance == 0), we need
    # to version the distroseries so that we can upload to launchpad
    debver="$debver~${CODENAME}1"
fi

control=debian/control
changelog=debian/changelog

if [ "$BUILD" ]; then
    if [ -d debian ] ; then
        printf "Error! debian control directory already exists at %s/debian\n" $(pwd)
        exit 1
    fi

    cp -r "$ROOTDIR"/contrib/packaging/debian debian

    sed -i.tmp "s/__VERSION__/$debver/" $changelog
    sed -i.tmp "s/__DATE__/$(date --rfc-2822)/" $changelog
    sed -i.tmp "s/__CODENAME__/$CODENAME/" $changelog
    rm $changelog.tmp

    # remove the node from the version string
    SRCFILE="mercurial_$(echo $debver | sed "s,-$node,,").orig.tar.gz"
    "$ROOTDIR/hg" archive $SRCFILE
    mv $SRCFILE ..
    debuild -us -uc -i -I $DEBFLAGS
    if [ $? != 0 ]; then
        echo 'debuild failed!'
        exit 1
    fi

fi
if [ "$CLEANUP" ] ; then
    echo
    OUTPUTDIR=${OUTPUTDIR:=packages/$DISTID-$CODENAME}
    mkdir -p "$OUTPUTDIR"
    find ../mercurial*.deb ../mercurial_*.build ../mercurial_*.changes \
          ../mercurial*.dsc ../mercurial*.gz \
          -type f -newer $control -print0 2>/dev/null | \
      xargs -Inarf -0 mv narf "$OUTPUTDIR"
    echo "Built packages for $debver:"
    find "$PWD"/"$OUTPUTDIR" -type f -newer $control -name '*.deb'
fi