##// END OF EJS Templates
copies: fix the changeset based algorithm regarding merge...
copies: fix the changeset based algorithm regarding merge In 99ebde4fec99, we changed the list of files stored into the `files` field. This lead to the changeset centric copy algorithm to break in various merge situation involving merge. Older information could reach the merge through `p1`, and while information from `p2` was strictly fresher, it would get overwritten anyway. We update the situation with more details about which revision introduces rename information. This help use making the right decision in case of merge. We are now running a more comprehensive suite of test with include this kind of situation. The behavior differ slightly from the filelog based in a couple of instance. There is mostly two distinct cases: 1) there are conflicting rename information in a merge (different rename history on each side). In this case the filelog based implementation arbitrarily pick a side based on the file-revision-number. So it depends on a local factor. The changeset centric algorithm will use a deterministic approach, by picking the information coming from the first parent of the merge. This is stable across different clone. 2) rename information related to file that exist in both source and destination. The filelog based implementation do not even try to detect these, however the changeset centric one get them for "free" (it is simpler to detect them than not). The new implementation focus on correctness. Performance improvement will come later. Differential Revision: https://phab.mercurial-scm.org/D8244

File last commit:

r43675:51865531 stable
r45252:45f3f35c default
Show More
buildrpm
163 lines | 4.2 KiB | text/plain | TextLexer
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 #!/bin/bash -e
#
Mads Kiilerich
packaging: drop outdated buildrpm "tested on" comment...
r43661 # Build a Mercurial RPM from the current repo, mainly for Fedora/CentOS/RHEL
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028
. $(dirname $0)/packagelib.sh
BUILD=1
RPMBUILDDIR="$PWD/rpmbuild"
Mads Kiilerich
packaging: use "python3" for fedora29 ... and as buildrpm default...
r43675 PYTHONEXE=python3
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028
while [ "$1" ]; do
case "$1" in
--prepare )
shift
BUILD=
;;
Mads Kiilerich
packaging: use "--python python" for centos7 to avoid explicit "python2"...
r43674 --python)
Mads Kiilerich
packaging: introduce Python3 support as buildrpm --python3...
r43650 shift
Mads Kiilerich
packaging: use "--python python" for centos7 to avoid explicit "python2"...
r43674 PYTHONEXE=$1
shift
Mads Kiilerich
packaging: introduce Python3 support as buildrpm --python3...
r43650 ;;
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 --withpython | --with-python)
shift
Antonio Muci
buildrpm: bump bundled Python version to 2.7.16 when building for centos{5,6}...
r42378 PYTHONVER=2.7.16
PYTHONMD5=f1a2ace631068444831d01485466ece0
Mads Kiilerich
packaging: fix docker-centos5 - use pythonexe and set to "python" as before...
r43673 PYTHONEXE=python
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 ;;
--rpmbuilddir )
shift
RPMBUILDDIR="$1"
shift
;;
* )
echo "Invalid parameter $1!" 1>&2
exit 1
;;
esac
done
cd "`dirname $0`/../.."
specfile=$PWD/contrib/packaging/mercurial.spec
if [ ! -f $specfile ]; then
echo "Cannot find $specfile!" 1>&2
exit 1
fi
if [ ! -d .hg ]; then
echo 'You are not inside a Mercurial repository!' 1>&2
exit 1
fi
gethgversion
if [ -z "$type" ] ; then
Mads Kiilerich
packaging: fix buildrpm whitespace
r43662 release=1
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 else
release=0.9_$type
fi
if [ -n "$distance" ] ; then
Augie Fackler
buildrpm: fix embarassing bug in shell variable expansions...
r39495 release=$release+${distance}_${node}
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 fi
if [ "$PYTHONVER" ]; then
release=$release+$PYTHONVER
RPMPYTHONVER=$PYTHONVER
else
RPMPYTHONVER=%{nil}
fi
mkdir -p $RPMBUILDDIR/{SOURCES,BUILD,SRPMS,RPMS}
$HG archive -t tgz $RPMBUILDDIR/SOURCES/mercurial-$version-$release.tar.gz
if [ "$PYTHONVER" ]; then
(
mkdir -p build
cd build
PYTHON_SRCFILE=Python-$PYTHONVER.tgz
[ -f $PYTHON_SRCFILE ] || curl -Lo $PYTHON_SRCFILE http://www.python.org/ftp/python/$PYTHONVER/$PYTHON_SRCFILE
if [ "$PYTHONMD5" ]; then
echo "$PYTHONMD5 $PYTHON_SRCFILE" | md5sum -w -c
fi
ln -f $PYTHON_SRCFILE $RPMBUILDDIR/SOURCES/$PYTHON_SRCFILE
DOCUTILSVER=`sed -ne "s/^%global docutilsname docutils-//p" $specfile`
DOCUTILS_SRCFILE=docutils-$DOCUTILSVER.tar.gz
[ -f $DOCUTILS_SRCFILE ] || curl -Lo $DOCUTILS_SRCFILE http://downloads.sourceforge.net/project/docutils/docutils/$DOCUTILSVER/$DOCUTILS_SRCFILE
DOCUTILSMD5=`sed -ne "s/^%global docutilsmd5 //p" $specfile`
if [ "$DOCUTILSMD5" ]; then
echo "$DOCUTILSMD5 $DOCUTILS_SRCFILE" | md5sum -w -c
fi
ln -f $DOCUTILS_SRCFILE $RPMBUILDDIR/SOURCES/$DOCUTILS_SRCFILE
)
fi
mkdir -p $RPMBUILDDIR/SPECS
rpmspec=$RPMBUILDDIR/SPECS/mercurial.spec
sed -e "s,^Version:.*,Version: $version," \
-e "s,^Release:.*,Release: $release," \
Mads Kiilerich
packaging: introduce Python3 support as buildrpm --python3...
r43650 -e "s/^%global pythonexe .*/%global pythonexe $PYTHONEXE/" \
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 $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
Mads Kiilerich
packaging: make python snippets in rpm building python3 compatible...
r43648 print(title)
print("- %s" % l[3].strip())
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 ' >> $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())
Mads Kiilerich
packaging: make python snippets in rpm building python3 compatible...
r43648 print("* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2]))
Gregory Szorc
packaging: move buildrpm to contrib/packaging/...
r38028 ' >> $rpmspec
fi
sed -i \
-e "s/^%define withpython.*$/%define withpython $RPMPYTHONVER/" \
$rpmspec
if [ "$BUILD" ]; then
rpmbuild --define "_topdir $RPMBUILDDIR" -ba $rpmspec --clean
if [ $? = 0 ]; then
echo
echo "Built packages for $version-$release:"
find $RPMBUILDDIR/*RPMS/ -type f -newer $rpmspec
fi
else
echo "Prepared sources for $version-$release $rpmspec are in $RPMBUILDDIR/SOURCES/ - use like:"
echo "rpmbuild --define '_topdir $RPMBUILDDIR' -ba $rpmspec --clean"
fi