@@ -17,25 +17,34 @@ set -o errexit -o pipefail
17
17
# CDPATH reduces the scope of the cd command to potentially prevent unintended directory changes.
18
18
# This way non-standard tools like readlink aren't needed.
19
19
SCRIPTS_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} "
21
21
22
22
# Get the "jupyter" directory by taking the path of this script and going two directory up and then to "jupyter".
23
23
JUPYTER_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
25
33
26
34
# Define conda environment to use for code structure analysis. Default "codegraph"
27
35
CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT:- " codegraph" } # Name of the conda environment to use for code graph analysis
28
36
echo " activateCondaEnvironment: CONDA_PREFIX=${CONDA_PREFIX} "
29
37
echo " activateCondaEnvironment: Current conda environment=${CONDA_DEFAULT_ENV} "
30
38
echo " activateCondaEnvironment: Target conda environment=${CODEGRAPH_CONDA_ENVIRONMENT} "
31
39
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
39
48
40
49
# Include operation system function to for example detect Windows.
41
50
source " ${SCRIPTS_DIR} /operatingSystemFunctions.sh"
@@ -60,18 +69,24 @@ echo "activateCondaEnvironment: scriptExtension=${scriptExtension}"
60
69
eval " $( ${pathToConda} conda${scriptExtension} shell.bash hook) "
61
70
echo " activateCondaEnvironment: Current conda environment after shell hook=${CONDA_DEFAULT_ENV} "
62
71
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
70
83
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} "
73
87
fi
74
88
89
+ # Activate code graph Conda environment
75
90
echo " activateCondaEnvironment: Activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} "
76
91
" ${pathToConda} conda" activate ${CODEGRAPH_CONDA_ENVIRONMENT}
77
92
0 commit comments