# HG changeset patch # User Augie Fackler # Date 2015-10-26 18:19:37 # Node ID 6474b64045fb83733d6f7b774bbc8b2869bd1fed # Parent 3ed635cb108e03370bbfb587170d623c2d73f618 packaging: rework version detection and declaration (issue4912) Previously the -rc in our rc tags got dropped, meaning that those packages looked newer to the packaging system than the later release build. This rectifies the issue, though some damage may already have been done on 3.6-rc builds. I'm mostly cargo-culting the RPM version format - there don't appear to be rules for RPM about how to handle this. Hopefully an RPM enthusiast can fix up what I've done as a followup. diff --git a/contrib/builddeb b/contrib/builddeb --- a/contrib/builddeb +++ b/contrib/builddeb @@ -46,6 +46,13 @@ if [ ! -d .hg ]; then fi gethgversion +debver="$version" +if [ -n "$type" ] ; then + debver="$debver~$type" +fi +if [ -n "$distance" ] ; then + debver="$debver+$distance-$node" +fi control=debian/control changelog=debian/changelog @@ -61,7 +68,7 @@ if [ "$BUILD" ]; then # This looks like sed -i, but sed -i behaves just differently enough # between BSD and GNU sed that I gave up and did the dumb thing. - sed "s/__VERSION__/$version/" < $changelog > $changelog.tmp + sed "s/__VERSION__/$debver/" < $changelog > $changelog.tmp date=$(date --rfc-2822) sed "s/__DATE__/$date/" < $changelog.tmp > $changelog rm $changelog.tmp @@ -79,6 +86,6 @@ if [ "$CLEANUP" ] ; then find ../mercurial*.deb ../mercurial_*.build ../mercurial_*.changes \ -type f -newer $control -print0 | \ xargs -Inarf -0 mv narf "$OUTPUTDIR" - echo "Built packages for $version-$release:" + echo "Built packages for $debver:" find "$OUTPUTDIR" -type f -newer $control -name '*.deb' fi diff --git a/contrib/buildrpm b/contrib/buildrpm --- a/contrib/buildrpm +++ b/contrib/buildrpm @@ -49,6 +49,18 @@ fi gethgversion +# TODO: handle distance/node set, and type set + +if [ -z "$type" ] ; then + release=1 +else + release=0.9_$type +fi + +if [ -n "$distance" ] ; then + release=$release+$distance_$node +fi + if [ "$PYTHONVER" ]; then release=$release+$PYTHONVER RPMPYTHONVER=$PYTHONVER diff --git a/contrib/packagelib.sh b/contrib/packagelib.sh --- a/contrib/packagelib.sh +++ b/contrib/packagelib.sh @@ -1,3 +1,12 @@ +# Extract version number into 4 parts, some of which may be empty: +# +# version: the numeric part of the most recent tag. Will always look like 1.3. +# +# type: if an rc build, "rc", otherwise empty +# +# distance: the distance from the nearest tag, or empty if built from a tag +# +# node: the node|short hg was built from, or empty if built from a tag gethgversion() { make clean make local || make local PURE=--pure @@ -7,13 +16,20 @@ gethgversion() { hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'` + if echo $hgversion | grep + > /dev/null 2>&1 ; then + tmp=`echo $hgversion | cut -d+ -f 2` + hgversion=`echo $hgversion | cut -d+ -f 1` + distance=`echo $tmp | cut -d- -f 1` + node=`echo $tmp | cut -d- -f 2` + else + distance='' + node='' + fi if echo $hgversion | grep -- '-' > /dev/null 2>&1; then - # nightly build case, version is like 1.3.1+250-20b91f91f9ca version=`echo $hgversion | cut -d- -f1` - release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'` + type=`echo $hgversion | cut -d- -f2` else - # official tag, version is like 1.3.1 - version=`echo $hgversion | sed -e 's/+.*//'` - release='0' + version=$hgversion + type='' fi }