@@ -17,25 +17,34 @@ set -o errexit -o pipefail
1717# CDPATH reduces the scope of the cd command to potentially prevent unintended directory changes.
1818# This way non-standard tools like readlink aren't needed.
1919SCRIPTS_DIR=${SCRIPTS_DIR:- $( CDPATH=. cd -- " $( dirname -- " ${BASH_SOURCE[0]} " ) " && pwd -P )} # Repository directory containing the shell scripts
20- echo " activateCondaEnvironment: SCRIPTS_DIR=$SCRIPTS_DIR "
20+ echo " activateCondaEnvironment: SCRIPTS_DIR=${ SCRIPTS_DIR} "
2121
2222# Get the "jupyter" directory by taking the path of this script and going two directory up and then to "jupyter".
2323JUPYTER_NOTEBOOK_DIRECTORY=${JUPYTER_NOTEBOOK_DIRECTORY:- " ${SCRIPTS_DIR} /../jupyter" } # Repository directory containing the Jupyter Notebooks
24- echo " activateCondaEnvironment: JUPYTER_NOTEBOOK_DIRECTORY=$JUPYTER_NOTEBOOK_DIRECTORY "
24+ echo " activateCondaEnvironment: JUPYTER_NOTEBOOK_DIRECTORY=${JUPYTER_NOTEBOOK_DIRECTORY} "
25+
26+ # Get the file name of the environment description file for the conda package and environment manager
27+ # that contains all dependencies and their versions.
28+ CONDA_ENVIRONMENT_FILE=${CONDA_ENVIRONMENT_FILE:- " ${JUPYTER_NOTEBOOK_DIRECTORY} /environment.yml" } # Conda (package manager for Python) environment file path
29+ if [ ! -f " ${CONDA_ENVIRONMENT_FILE} " ] ; then
30+ echo " activateCondaEnvironment: Couldn't find environment file ${CONDA_ENVIRONMENT_FILE} ."
31+ exit 2
32+ fi
2533
2634# Define conda environment to use for code structure analysis. Default "codegraph"
2735CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT:- " codegraph" } # Name of the conda environment to use for code graph analysis
2836echo " activateCondaEnvironment: CONDA_PREFIX=${CONDA_PREFIX} "
2937echo " activateCondaEnvironment: Current conda environment=${CONDA_DEFAULT_ENV} "
3038echo " activateCondaEnvironment: Target conda environment=${CODEGRAPH_CONDA_ENVIRONMENT} "
3139
32- if [ " ${CONDA_DEFAULT_ENV} " = " ${CODEGRAPH_CONDA_ENVIRONMENT} " ] ; then
33- echo " activateCondaEnvironment: Skipping activation. Target conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} is already activated."
34- # "return" needs to be used here instead of "exit".
35- # This script is included in another script by using "source".
36- # "exit" would end the main script, "return" just ends this sub script.
37- return 0
38- fi
40+ # TODO Find out, if conda updates (when needed) should also be done here instead of just returning 0.
41+ # if [ "${CONDA_DEFAULT_ENV}" = "${CODEGRAPH_CONDA_ENVIRONMENT}" ] ; then
42+ # echo "activateCondaEnvironment: Skipping activation. Target conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} is already activated."
43+ # # "return" needs to be used here instead of "exit".
44+ # # This script is included in another script by using "source".
45+ # # "exit" would end the main script, "return" just ends this sub script.
46+ # return 0
47+ # fi
3948
4049# Include operation system function to for example detect Windows.
4150source " ${SCRIPTS_DIR} /operatingSystemFunctions.sh"
@@ -60,18 +69,24 @@ echo "activateCondaEnvironment: scriptExtension=${scriptExtension}"
6069eval " $( ${pathToConda} conda${scriptExtension} shell.bash hook) "
6170echo " activateCondaEnvironment: Current conda environment after shell hook=${CONDA_DEFAULT_ENV} "
6271
63- # Create (if missing) and activate Conda environment for code structure graph analysis
64- if { " ${pathToConda} conda" env list | grep " ${CODEGRAPH_CONDA_ENVIRONMENT} " ; } > /dev/null 2>&1 ; then
65- echo " activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} already created"
66- else
67- if [ ! -f " ${JUPYTER_NOTEBOOK_DIRECTORY} /environment.yml" ] ; then
68- echo " activateCondaEnvironment: Couldn't find environment file ${JUPYTER_NOTEBOOK_DIRECTORY} /environment.yml."
69- exit 2
72+ # If missing, create Conda environment for code graph analysis
73+ # Note: The curly braces are grouping the outputs of both (piped) operations together to suppress them later (dev/null).
74+ if " ${pathToConda} conda" env list | grep " ${CODEGRAPH_CONDA_ENVIRONMENT} " > /dev/null 2>&1 ; then
75+ echo " activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} has already been created."
76+
77+ # Check if the declaration in the environment file matches the actual environment to find out if it needs to be updated.
78+ if " ${pathToConda} conda" compare --name " ${CODEGRAPH_CONDA_ENVIRONMENT} " " ${CONDA_ENVIRONMENT_FILE} " > /dev/null 2>&1 ; then
79+ echo " activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} is up-to-date."
80+ else
81+ echo " activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} needs to be updated."
82+ " ${pathToConda} conda" env update --file " ${CONDA_ENVIRONMENT_FILE} " --name ${CODEGRAPH_CONDA_ENVIRONMENT} --prune
7083 fi
71- echo " activateCondaEnvironment: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} "
72- " ${pathToConda} conda" env create --file " ${JUPYTER_NOTEBOOK_DIRECTORY} /environment.yml" --name " ${CODEGRAPH_CONDA_ENVIRONMENT} "
84+ else
85+ echo " activateCondaEnvironment: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} ..."
86+ " ${pathToConda} conda" env create --file " ${CONDA_ENVIRONMENT_FILE} " --name " ${CODEGRAPH_CONDA_ENVIRONMENT} "
7387fi
7488
89+ # Activate code graph Conda environment
7590echo " activateCondaEnvironment: Activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} "
7691" ${pathToConda} conda" activate ${CODEGRAPH_CONDA_ENVIRONMENT}
7792
0 commit comments