revpair: restrict odd-range handling to top-level x:y expression (issue4774)
The odd-range hack was introduced by 2a0efa1112ac for backward compatibility,
but it was too widely applied. I've checked cmdutil.revpair() at 1.6, and
found that ".:", ":0" and ":" are also handled as pairs. So let's enable the
hack only for "x:y", "x:", "y:" and ":".
test-revset.t is updated because "tip^::tip^ or tip^" shouldn't be taken as
an odd range. This patch adds "tip^:tip^" instead.
This patch is written for the default branch because parse() of the stable
branch lacks compatibility hack for "foo+bar" tag. If we want to mitigate the
issue in stable, we can add something like "and '::' in revs[0]".
#!/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
BUILD=1
DEBBUILDDIR="$PWD/debbuild"
while [ "$1" ]; do
case "$1" in
--prepare )
shift
BUILD=
;;
--debbuilddir )
shift
DEBBUILDDIR="$1"
shift
;;
* )
echo "Invalid parameter $1!" 1>&2
exit 1
;;
esac
done
set -u
rm -rf $DEBBUILDDIR
mkdir -p $DEBBUILDDIR
if [ ! -d .hg ]; then
echo 'You are not inside a Mercurial repository!' 1>&2
exit 1
fi
gethgversion
cp -r $PWD/contrib/debian $DEBBUILDDIR/DEBIAN
chmod -R 0755 $DEBBUILDDIR/DEBIAN
control=$DEBBUILDDIR/DEBIAN/control
# 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/" < $control > $control.tmp
mv $control.tmp $control
if [ "$BUILD" ]; then
dpkg-deb --build $DEBBUILDDIR
mv $DEBBUILDDIR.deb $DEBBUILDDIR/mercurial-$version-$release.deb
if [ $? = 0 ]; then
echo
echo "Built packages for $version-$release:"
find $DEBBUILDDIR/ -type f -newer $control
fi
else
echo "Prepared sources for $version-$release $control are in $DEBBUILDDIR - use like:"
echo "dpkg-deb --build $DEBBUILDDIR"
fi