@@ -31,69 +31,39 @@ rpmdir="$PWD/rpmbuild"
rm -rf $rpmdir
mkdir -p $rpmdir/SOURCES $rpmdir/SPECS $rpmdir/RPMS $rpmdir/SRPMS $rpmdir/BUILD
-hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
+# Builds not on the stable branch is given a 0.next prefix to make clear we don't
+# have a good approximation of a version number.
+# The version number on released (and tagged) revisions is "{latesttag}-1", where
+# 1 can be seen as indicating that it is build 1.0 of that version.
+# Tags with only two numbers / digits (and perhaps a -rc suffix) (such as 3.0 and
+# 3.0-rc) are padded with an extra .0 to make it 3 digits (such as 3.0.0).
+# Tags with -rc are named X.X.X-0.rc instead of X.X.X-rc - that makes sure that
+# the final -1.x cames after -0.rc.x (so 3.0.0-1.7 comes after 3.0.0-0.rc.7).
-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/+.*//'`
-else
- # official tag, version is like 1.3.1
- version=`echo $hgversion | sed -e 's/+.*//'`
- release='0'
-fi
+hgversion=`$HG par -T '{ifeq(branch, "stable", "", "0.next.")}{sub("-rc-1$", "-0.rc", sub(r"(?<=^\d\.\d)(?=(-rc)?-1$)", ".0", "{latesttag}-1"))}.{latesttagdistance}.{node|short}\n'`
+
+# An example of full version numbers:
+# 3.0.0-1.0.2195ac506c6a
+# ^^^^^^^^^^^^ node
+# ^ latesttagdistance
+# ^ the real thing, higher than rc which is 0.rc \
+# ^ padding to 3 numbers (when necessary) } from latesttag
+# ^^^ release number /
+
+version=${hgversion%-*}
+release=${hgversion#*-}
$HG archive -t tgz $rpmdir/SOURCES/mercurial-$version-$release.tar.gz
rpmspec=$rpmdir/SPECS/mercurial.spec
-sed -e "s,^Version:.*,Version: $version," \
+(
+sed \
+ -e "s,^Version:.*,Version: $version," \
-e "s,^Release:.*,Release: $release," \
- $specfile > $rpmspec
-
-echo >> $rpmspec
-echo "%changelog" >> $rpmspec
-
-if echo $version | grep '+' > /dev/null 2>&1; then
- latesttag="`echo $version | sed -e 's/+.*//'`"
- $HG log -r .:"$latesttag" -fM \
- --template '{date|hgdate}\t{author}\t{desc|firstline}\n' | python -c '
-import sys, time
-
-def datestr(date, format):
- return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
-
-changelog = []
-for l in sys.stdin.readlines():
- tok = l.split("\t")
- hgdate = tuple(int(v) for v in tok[0].split())
- changelog.append((datestr(hgdate, "%F"), tok[1], hgdate, tok[2]))
-prevtitle = ""
-for l in sorted(changelog, reverse=True):
- title = "* %s %s" % (datestr(l[2], "%a %b %d %Y"), l[1])
- if prevtitle != title:
- prevtitle = title
- print
- print title
- print "- %s" % l[3].strip()
-' >> $rpmspec
-
-else
-
- $HG log \
- --template '{date|hgdate}\t{author}\t{desc|firstline}\n' \
- .hgtags | python -c '
-import sys, time
-
-def datestr(date, format):
- return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
-
-for l in sys.stdin.readlines():
- tok = l.split("\t")
- hgdate = tuple(int(v) for v in tok[0].split())
- print "* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2])
-' >> $rpmspec
-
-fi
+ $specfile
+$HG log -r "sort(::.-::parents(tagged('re:^[0-9.]*$')&::parents(.)),-date)" \
+ -T '* {date(date|localdate, "%a %b %d %Y")} {author} {sub("-rc-1$", "-0.rc", sub(r"(?<=^\d\.\d)(?=(-rc)?-1$)", ".0", "{latesttag}-1"))}.{latesttagdistance}.{node|short}\n{if(tags,"- {tags}\n")}- {desc|firstline}\n\n'
+) > $rpmspec
rpmbuild --define "_topdir $rpmdir" -ba $rpmspec --clean
if [ $? = 0 ]; then
@@ -76,3 +76,5 @@ rm -rf $RPM_BUILD_ROOT
%endif
%{_libdir}/python%{pythonver}/site-packages/%{name}
%{_libdir}/python%{pythonver}/site-packages/hgext
+
+%changelog