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.
--- a/contrib/builddeb Tue Oct 27 12:34:05 2015 +0800
+++ b/contrib/builddeb Mon Oct 26 14:19:37 2015 -0400
@@ -46,6 +46,13 @@
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 @@
# 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 @@
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
--- a/contrib/buildrpm Tue Oct 27 12:34:05 2015 +0800
+++ b/contrib/buildrpm Mon Oct 26 14:19:37 2015 -0400
@@ -49,6 +49,18 @@
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
--- a/contrib/packagelib.sh Tue Oct 27 12:34:05 2015 +0800
+++ b/contrib/packagelib.sh Mon Oct 26 14:19:37 2015 -0400
@@ -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 @@
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
}