mirror of https://github.com/apache/cassandra
108 lines
3.4 KiB
Bash
Executable File
108 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# shell script to find a suitable Python interpreter and run cqlsh.py
|
|
|
|
# Use the Python that is specified in the env
|
|
if [ -n "$CQLSH_PYTHON" ]; then
|
|
USER_SPECIFIED_PYTHON="$CQLSH_PYTHON"
|
|
fi
|
|
|
|
|
|
# filter "--python" option and its value, and keep remaining arguments as it is
|
|
USER_SPECIFIED_PYTHON_OPTION=false
|
|
for arg do
|
|
shift
|
|
case "$arg" in
|
|
--python)
|
|
USER_SPECIFIED_PYTHON_OPTION=true
|
|
;;
|
|
--)
|
|
break
|
|
;;
|
|
*)
|
|
if [ "$USER_SPECIFIED_PYTHON_OPTION" = true ] ; then
|
|
USER_SPECIFIED_PYTHON_OPTION=false
|
|
USER_SPECIFIED_PYTHON="$arg"
|
|
else
|
|
set -- "$@" "$arg"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$USER_SPECIFIED_PYTHON_OPTION" = true ] ; then
|
|
echo "You must specify a python interpreter path with the --python option"
|
|
exit 1
|
|
fi
|
|
|
|
# get a version string for a Python interpreter
|
|
get_python_version() {
|
|
interpreter=$1
|
|
version=$($interpreter -c "import os; print('{}.{}'.format(os.sys.version_info.major, os.sys.version_info.minor))" 2> /dev/null)
|
|
echo "$version"
|
|
}
|
|
|
|
# test whether a version string matches one of the supported versions for cqlsh
|
|
is_supported_version() {
|
|
version=$1
|
|
major_version="${version%.*}"
|
|
minor_version="${version#*.}"
|
|
# python 3.8-3.11 are supported
|
|
if [ "$major_version" = 3 ] && [ "$minor_version" -ge 8 ] && [ "$minor_version" -le 11 ]; then
|
|
echo "supported"
|
|
# python 3.6-3.7 are deprecated
|
|
elif [ "$major_version" = 3 ] && [ "$minor_version" -ge 6 ] && [ "$minor_version" -le 7 ]; then
|
|
echo "deprecated"
|
|
else
|
|
echo "unsupported"
|
|
fi
|
|
}
|
|
|
|
run_if_supported_version() {
|
|
# get the interpreter and remove it from argument
|
|
interpreter="$1" shift
|
|
|
|
version=$(get_python_version "$interpreter")
|
|
version_status=$(is_supported_version "$version")
|
|
if [ -n "$version" ]; then
|
|
if [ "$version_status" = "supported" ] || [ "$version_status" = "deprecated" ]; then
|
|
if [ "$version_status" = "deprecated" ]; then
|
|
echo "Warning: using deprecated version of Python:" "$version" >&2
|
|
fi
|
|
|
|
exec "$interpreter" "$($interpreter -c "import os; print(os.path.dirname(os.path.realpath('$0')))")/cqlsh.py" "$@"
|
|
exit
|
|
else
|
|
echo "Warning: unsupported version of Python, required 3.6-3.11 but found" "$version" >&2
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
if [ "$USER_SPECIFIED_PYTHON" != "" ]; then
|
|
# run a user specified Python interpreter
|
|
run_if_supported_version "$USER_SPECIFIED_PYTHON" "$@"
|
|
else
|
|
for interpreter in python3 python; do
|
|
run_if_supported_version "$interpreter" "$@"
|
|
done
|
|
fi
|
|
|
|
echo "No appropriate Python interpreter found." >&2
|
|
exit 1
|