#!/bin/bash ext=$1 git='/home/felipec/dev/git' if [ $ext == 'hg' ]; then versions=(1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6) tests=test-{hg,hg-bidi,hg-hg-git}.t ext_dir='/home/felipec/tmp/hg' else versions=(bzr-2.6b1 bzr-2.5.0 bzr-2.4.0 bzr-2.3.0 bzr-2.2.0 bzr-2.1.4 bzr-2.0.6) tests=test-bzr.t ext_dir='/home/felipec/tmp/bzr' fi use_lib() { export PYTHONPATH=$1 export PATH=$1:$PATH } # prepare checkouts for version in "${versions[@]}" do dir=/tmp/$ext/$version && test -d $dir && continue echo "preparing $version checkout" && ( git clone -n -q --shared $ext_dir $dir && cd $dir && git checkout -q $version && test $ext == 'hg' && printf 'version = "%s"\n' $version > mercurial/__version__.py && # make local >& /dev/null python setup.py build_py -c -d . build_ext -i build_scripts >& /dev/null ) done check_commit() { local ok=1 version dir tmpdir rm -f /tmp/error for version in "${versions[@]}" do ( use_lib /tmp/$ext/$version && dir=$PWD/contrib/remote-helpers && tmpdir=$(mktemp -d) && export TEST_OUTPUT_DIRECTORY=$tmpdir && export TEST_DIRECTORY=$PWD/t && export PATH=$PWD:$PATH && cd t && eval prove -v $dir/$tests > $dir/output || ok=0 rm -rf $tmpdir let ok && echo "$version: ok" || echo "$version: not ok" let ok || { cat $dir/output && touch /tmp/error ; } ) & done wait test -f /tmp/error && return 1 || return 0 } check_revlist() { git rev-list --reverse $1 | while read commit do git checkout -q $commit && git log -1 --oneline && check_commit || return 1 done } ret=1 && cd $git && make -C contrib/remote-helpers links && shift if test -z $1 then check_commit && ret=0 else old=$(sed -e 's/^ref: refs.heads.//' .git/HEAD) && check_revlist $1 && ret=0 git checkout -q $old fi exit $ret