Patchwork packaging: rework version detection and declaration (issue4912)

login
register
mail settings
Submitter Augie Fackler
Date Oct. 26, 2015, 8:02 p.m.
Message ID <d646001108e74e1bf863.1445889734@augie-macbookair2.roam.corp.google.com>
Download mbox | patch
Permalink /patch/11246/
State Accepted
Headers show

Comments

Augie Fackler - Oct. 26, 2015, 8:02 p.m.
# HG changeset patch
# User Augie Fackler <augie@google.com>
# Date 1445883577 14400
#      Mon Oct 26 14:19:37 2015 -0400
# Branch stable
# Node ID d646001108e74e1bf863e887518471e934664672
# Parent  a9ed5a8fc5e0554d5cb81b7206d2203cc49a2d23
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.
Matt Mackall - Oct. 28, 2015, 6:33 p.m.
On Mon, 2015-10-26 at 16:02 -0400, Augie Fackler wrote:
> # HG changeset patch
> # User Augie Fackler <augie@google.com>
> # Date 1445883577 14400
> #      Mon Oct 26 14:19:37 2015 -0400
> # Branch stable
> # Node ID d646001108e74e1bf863e887518471e934664672
> # Parent  a9ed5a8fc5e0554d5cb81b7206d2203cc49a2d23
> packaging: rework version detection and declaration (issue4912)

Queued for stable, thanks.

-- 
Mathematics is the supreme nostalgia of our time.

Patch

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
 }