Files
impala/bin/set-pythonpath.sh
Lars Volker 9abd1fea0e Fix zsh issue in set-pythonpath.sh
When sourcing set-pythonpath.sh on a partially checked out or partially
built source tree (e.g. when running perf tests or after build errors),
an empty shell glob pattern would return an empty list in bash but
trigger an error in zsh. This would lead to the script aborting before
exporting the PYTHONPATH variable, leading to hard to debug test
failures.

To fix this, this change replaces the glob pattern with a call to
'find', which works independent of the shell being used.

Although we would only hit this in somewhat contrived edge cases, it
seems beneficial to make the code work as expected on all shells.

Testing:
I built Impala, sourced impala-config.sh in both new zsh and bash
shells, and observed that PYTHONPATH was exported correctly.

Then I deleted the .egg files in question, sourced impala-config.sh in
both new zsh and bash shells, and observed that PYTHONPATH was exported
correctly, too.

Change-Id: Ia902891ab36f3aee96a53aa105cc5775321d0058
Reviewed-on: http://gerrit.cloudera.org:8080/10901
Reviewed-by: Lars Volker <lv@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2018-07-11 01:43:42 +00:00

44 lines
1.8 KiB
Bash
Executable File

# 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.
# set the python path for test modules and beeswax
PYTHONPATH=${IMPALA_HOME}:${IMPALA_HOME}/shell/gen-py:${IMPALA_HOME}/testdata/
# There should be just a single version of python that created the
# site-packages directory. We find it by performing shell independent expansion
# of the following pattern:
# ${THRIFT_HOME}/python/lib{64,}/python*/site-packages
# Note: this could go wrong if we have used two different versions of
# Python to build Thrift on this machine, and the first version is not
# compatible with the second.
for PYTHON_DIR in ${THRIFT_HOME}/python/lib{64,}; do
[[ -d ${PYTHON_DIR} ]] || continue
for PKG_DIR in ${PYTHON_DIR}/python*/site-packages; do
PYTHONPATH=${PYTHONPATH}:${PKG_DIR}/
done
done
# Add Hive after Thrift because Hive supplies its own Thrift modules
PYTHONPATH=${PYTHONPATH}:${HIVE_HOME}/lib/py
# Add all the built eggs to the python path
for EGG in `find ${IMPALA_HOME}/shell/ext-py/ -name '*\.egg'`; do
PYTHONPATH=${PYTHONPATH}:${EGG}
done
export PYTHONPATH