| #!/bin/bash |
| # Copyright 2010-2014 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| # These are the versions we care about. The rest are just "nice to have". |
| PYTHON_SUPPORTED_VERSIONS="2.6 2.7 3.2 3.3 3.4" |
| PYTHON_VERSIONS="2.6 2.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0 3.1 3.2 3.3 3.4 3.5" |
| |
| # has to be run from portage root dir |
| cd "${0%/*}" || exit 1 |
| |
| case "${NOCOLOR:-false}" in |
| yes|true) |
| GOOD= |
| BAD= |
| NORMAL= |
| ;; |
| no|false) |
| GOOD=$'\e[1;32m' |
| BAD=$'\e[1;31m' |
| NORMAL=$'\e[0m' |
| ;; |
| esac |
| |
| interrupted() { |
| echo "interrupted." >&2 |
| exit 1 |
| } |
| |
| trap interrupted SIGINT |
| |
| unused_args=() |
| IGNORE_MISSING_VERSIONS=true |
| |
| while [ $# -gt 0 ] ; do |
| case "$1" in |
| --python-versions=*) |
| PYTHON_VERSIONS=${1#--python-versions=} |
| IGNORE_MISSING_VERSIONS=false |
| ;; |
| --python-versions) |
| shift |
| PYTHON_VERSIONS=$1 |
| IGNORE_MISSING_VERSIONS=false |
| ;; |
| *) |
| unused_args[${#unused_args[@]}]=$1 |
| ;; |
| esac |
| shift |
| done |
| if [[ ${PYTHON_VERSIONS} == "supported" ]] ; then |
| PYTHON_VERSIONS=${PYTHON_SUPPORTED_VERSIONS} |
| fi |
| |
| set -- "${unused_args[@]}" |
| |
| eprefix=${PORTAGE_OVERRIDE_EPREFIX} |
| exit_status="0" |
| found_versions=() |
| status_array=() |
| for version in ${PYTHON_VERSIONS}; do |
| if [[ $version =~ ^([[:digit:]]+\.[[:digit:]]+)-pypy-([[:digit:]]+\.[[:digit:]]+)$ ]] ; then |
| executable=${eprefix}/usr/bin/pypy-c${BASH_REMATCH[2]} |
| else |
| executable=${eprefix}/usr/bin/python${version} |
| fi |
| if [[ -x "${executable}" ]]; then |
| echo -e "${GOOD}Testing with Python ${version}...${NORMAL}" |
| "${executable}" -b -Wd pym/portage/tests/runTests "$@" |
| status=$? |
| status_array[${#status_array[@]}]=${status} |
| found_versions[${#found_versions[@]}]=${version} |
| if [ ${status} -ne 0 ] ; then |
| echo -e "${BAD}Testing with Python ${version} failed${NORMAL}" |
| exit_status="1" |
| fi |
| echo |
| elif [[ ${IGNORE_MISSING_VERSIONS} != "true" ]] ; then |
| echo -e "${BAD}Could not find requested Python ${version}${NORMAL}" |
| exit_status="1" |
| fi |
| done |
| |
| if [ ${#status_array[@]} -gt 0 ] ; then |
| max_len=0 |
| for version in ${found_versions[@]} ; do |
| [ ${#version} -gt ${max_len} ] && max_len=${#version} |
| done |
| (( columns = max_len + 2 )) |
| (( columns >= 7 )) || columns=7 |
| printf "\nSummary:\n\n" |
| printf "| %-${columns}s | %s\n|" "Version" "Status" |
| (( total_cols = columns + 11 )) |
| eval "printf -- '-%.0s' {1..${total_cols}}" |
| printf "\n" |
| row=0 |
| for version in ${found_versions[@]} ; do |
| if [ ${status_array[${row}]} -eq 0 ] ; then |
| status="success" |
| else |
| status="fail" |
| fi |
| printf "| %-${columns}s | %s\n" "${version}" "${status}" |
| (( row++ )) |
| done |
| fi |
| |
| exit ${exit_status} |