activate_direnv
Activate the directory environment
Synopsis
source /path/to/activate_direnv
Description
This script can be :
-
Sourced manually, like for python virtual environment, with the following command:
source /path/to/.direnv/activate_direnv -
Sourced automatically by
direnvusing file.envrc, see thee description in the header of file.envrc.
Script will parse the file .envrc.ini, build associative arrays for each
modules described in this file and load corresponding modules.
Finally, script will unset every temporary variable and methods that are not required once directory environment is loaded to avoid spoiling shell environment.
activate_direnv()
Activate directory environment by loading modules
Check if script is called manuall or using direnv, set global variables
related to directory environment folder (such as DIRENV_ROOT.)
Call the script lib/parse_ini_file.sh to parse the file .envrc.ini to
build associative arrays.
From these associative arrays, ensure that module have not been modified, if modules have been modified, warn the user and safely exit. Else load corresponding modules.
Finally, unset variables and methods not required once directory environment is loaded to avoid spoiling the user shell.
Output
- Log informations
Returns
- 0 if directory environment is correctly loaded
- 1 if something when wrong during loading directory environment
get_methods_list()
Parse file passed as argument to export list of methods
Parse a file and return the list of "first-level" methods, i.e. methods which name is not idented. For instance, this metod is not a "first-level" method.
Arguments
Arguments Description $1string, path to the file to parse Output
- Multiline string with all the "first-level" methods, one per line
Returns
- 0 if file has "first-level" methods
- 1 if file does not have "first-level" methods
unset_methods()
Unset methods if defined from list of methods provided as arguments
Arguments
Arguments Description $1multiline string, list of methods to unset, one method per line Returns
- 0 if file has "first-level" methods
- 1 if file does not have "first-level" methods
unset_modules()
Unset modules from list of already loaded modules
The process to unset modules is compose of two part:
- Unset methods defined in the module
- Unset associative array related to this module
Globals
DIRENV_TEMP_FOLDERDIRENV_MODULE_FOLDER
unset_all_methods_and_vars()
Unset all methods and variables set to load directory environment
The process to unset all methods and variables is composed of two part:
- Unset methods and variables defined by modules
- Unset methods defined by library scripts
Globals
IS_DIRENVDIRENV_ROOTDIRENV_LOG_FOLDERDIRENV_LIB_FOLDERDIRENV_SRC_FOLDERDIRENV_BIN_FOLDERDIRENV_SHA1_FOLDERDIRENV_TEMP_FOLDERDIRENV_MODULE_FOLDERDIRENV_CONFIG_PATHDIRENV_INI_SEP
install_upgrade_script()
Setup script to upgrade direnv config
Create a symlink from the source file
src/upgrade_direnv.shto thebinfolder to make the script accessible from the PATH if the symlink does not already exists.Globals
DIRENV_SRC_FOLDERDIRENV_BIN_FOLDEROutput
- Log message to inform user of the installation of the script
check_if_direnv()
If this script is not called by
direnv, deactivate_direnv methodCheck from which binary is called the script, if script is called manually, i.e. using
source activate_direnv; source the filedeactivate_direnvif SHA1 is valid to set the corresponding method to allow user to manually deactivate directory environment.Globals
DIRENV_ROOTReturns
- 0 if SHA1 of deactivate_direnv is valid and method is set
- 1 if SHA1 of deactivate_direnv is not valid
set_direnv()
Set required global variables
Check from which binary is called the script, depending on the way, set global variables that will be used by directory environment scripts if main scripts (i.e.
.envrcandactivate_direnv) have valid SH1.Globals
IS_DIRENVDIRENV_ROOTDIRENV_LOG_FOLDERDIRENV_LIB_FOLDERDIRENV_SRC_FOLDERDIRENV_BIN_FOLDERDIRENV_SHA1_FOLDERDIRENV_TEMP_FOLDERDIRENV_MODULE_FOLDERDIRENV_CONFIG_PATHDIRENV_INI_SEPReturns
- 0 if SHA1 of scripts are valid
- 1 if SHA1 of scripts are not valid
load_module()
Load specific module
Check if module script exists, if not, print an error. Else, check if SHA1 of module script is valid, if not, print an error. If everything is correct, load the module.
Globals
DIRENV_TEMP_FOLDERDIRENV_MODULE_FOLDERDIRENV_CONFIG_PATHArguments
Arguments Description $1string, name of the module from .envrc.iniOutput
- Log message if something went wrong
Returns
- 0 if module is correctly loaded
- 1 if module can not be loaded
load_config_file()
Load the configuration file
Ensure the configuration file
.envrc.iniexists. If not print and error and exit. Else ensure that.envrc.ini has not been modified, if.envrc.inihas been modified, print an error and exit. If everything is right, parse the configuration file.envrc.ini`Globals
DIRENV_SHA1_FOLDERArguments
Arguments Description $1string, path to the configuration file Output
- Error message if something went wrong
Returns
- 0 if the configuration file has been loaded.
- 1 if there is an error with the configuration file.
deactivate_modules()
Deactivate already module
Methods called when initialization of directory environment went wrong. For each already loaded modules, i.e. modules listed in ${DIRENV_TEMP_FOLDER}/.loaded_modules, call the deactivate method of the module. Finally, remove the file ${DIRENV_TEMP_FOLDER}/.loaded_modules.
Globals
DIRENV_MODULE_FOLDERDIRENV_TEMP_FOLDERArguments
Arguments Description $1string, name of the module from .envrc.iniOutput
- Log message if something went wrong
Returns
- 0 if module is correctly loaded
- 1 if module can not be loaded
safe_exit()
Safely exit the activation of directory environment in case of error
Safely exit the activate of the directory environment if something went wrong during the initilization. This is done by deactivating modules, then unset all methods and variables.
Output
- Log message telling user an error occurs
Returns
- 1 in any case to indicate an error occurs