contrib/packaging/builddeb
author Matt Harbison <matt_harbison@yahoo.com>
Mon, 30 Sep 2024 23:50:40 -0400
changeset 51935 77e2994bd617
parent 43317 4caf88845082
permissions -rwxr-xr-x
mdiff: convert a few block definitions from lists to tuples These were flagged by adding type hints. Some places were using a tuple of 4 ints to define a block, and others were using a list of 4. A tuple is better for typing, because we can define the length and the type of each entry. One of the places had to redefine the tuple, since writing to a tuple at an index isn't supported. This change spills out into the tests, and archeology says it was added to the repo in this state. There was no reason given for the divergence, and I suspect it wasn't intentional. It looks like `splitblock()` is completely unused in the codebase.

#!/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 "$ROOTDIR/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

cd "$ROOTDIR"

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 "$OUTPUTDIR" -type f -newer $control -name '*.deb'
fi