#!/usr/bin/env 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 pypy 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 = 'pypy' ]] ; then executable=${eprefix}/usr/bin/pypy 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.py "$@" 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}