#!/bin/bash : "${SHARNESS_TEST_SRCDIR:=$(cd "$(dirname "${BASH_SOURCE-$0}")" && pwd)}" if [ -z "$SHARNESS" ] ; then for d in \ "$SHARNESS_TEST_SRCDIR" \ "$HOME/share/sharness" \ "/usr/local/share/sharness" \ "/usr/share/sharness" do f="$d/sharness.sh" if [ -f "$f" ] ; then SHARNESS="$f" fi done fi if [ -z "$SHARNESS" ] || [ ! -f "$SHARNESS" ] ; then echo "sharness.sh not found" >&2 exit 1 fi # Prevent sharness from adding the source directory to PATH # since the scripts use unversioned python for their shebang # but tests should run under the python with mercurial support # so create an empty directory and strip it from PATH afterwards SHARNESS_BUILD_DIRECTORY="$(mktemp -d)" . "$SHARNESS" export PATH="${PATH#*:}" rmdir "$SHARNESS_BUILD_DIRECTORY" GIT_AUTHOR_EMAIL=author@example.com GIT_AUTHOR_NAME='A U Thor' GIT_COMMITTER_EMAIL=committer@example.com GIT_COMMITTER_NAME='C O Mitter' export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME # maintain backwards compatible default # (as used in remote helper) git config --global init.defaultBranch master git config --global protocol.file.allow always unset XDG_CONFIG_HOME test_set_prereq() { satisfied_prereq="$satisfied_prereq$1 " } satisfied_prereq=" " case "$(uname -s)" in MSYS*|MINGW*) test_set_prereq WIN export TEST_CMP='diff --strip-trailing-cr -u' ;; esac test_cmp() { ${TEST_CMP:-diff -u} "$@" } test_when_finished() { test_cleanup="{ $* } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup" } test_expect_code() { want_code=$1 shift "$@" exit_code=$? if test "$exit_code" = "$want_code"; then return 0 fi echo >&2 "test_expect_code: command exited with $exit_code, we wanted $want_code $*" return 1 } test_have_prereq() { prerequisite=$1 case "$prerequisite" in !*) negative_prereq=t prerequisite=${prerequisite#!} ;; *) negative_prereq= esac case "$satisfied_prereq" in *" $prerequisite "*) satisfied_this_prereq=t ;; *) satisfied_this_prereq= esac case "$satisfied_this_prereq,$negative_prereq" in t,|,t) return 0 ;; esac return 1 } if [ -z "$TEST_INSTALLED_SCRIPTS" ] ; then if [ -n "$PYTHON" ] && "$PYTHON" -c 'import mercurial' 2> /dev/null ; then : Use chosen Python version elif python3 -c 'import mercurial' 2> /dev/null ; then PYTHON=python3 elif python2 -c 'import mercurial' 2> /dev/null ; then PYTHON=python2 elif python -c 'import mercurial' 2> /dev/null ; then PYTHON=python fi if [ -n "$PYTHON" ] ; then test_set_prereq PYTHON # Change shebang on a copy of scripts to chosen Python version TEST_BIN="$SHARNESS_TRASH_DIRECTORY/bin" mkdir -p "$TEST_BIN" for s in git-remote-hg git-hg-helper ; do printf "%s\n" "#!/usr/bin/env $PYTHON" > "$TEST_BIN/$s" tail -n +2 "$SHARNESS_TEST_DIRECTORY/../$s" >> "$TEST_BIN/$s" chmod u+x "$TEST_BIN/$s" done export PATH="$TEST_BIN${PATH:+:$PATH}" unset TEST_BIN fi else # The build/install process ensures Python is available test_set_prereq PYTHON fi