ebuild: fetch: Flatten conditionals in _get_fetch_resume_size
[portage.git] / runtests.sh
index dc3343fe9b7ec1d00a8630f30bcc0e2831575f45..1bd1234a81c020bb0f3860d2162ab3dc5a87ce73 100755 (executable)
@@ -1,6 +1,13 @@
 #!/bin/bash
+# Copyright 2010-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
 
-PYTHON_VERSIONS="2.6 2.7 3.1 3.2"
+# 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"
+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"
+
+# has to be run from portage root dir
+cd "${0%/*}" || exit 1
 
 case "${NOCOLOR:-false}" in
        yes|true)
@@ -22,16 +29,81 @@ interrupted() {
 
 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 [[ -x /usr/bin/python${version} ]]; then
+       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}"
-               if ! /usr/bin/python${version} pym/portage/tests/runTests; then
+               "${executable}" -bb -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}