1
0
mirror of https://github.com/Tarrasch/zsh-autoenv.git synced 2024-11-22 23:40:58 +02:00

Change default values: .env => .autoenv.zsh etc

This changes the defaults:
 - AUTOENV_ENV_FILENAME: .env_auth  => .autoenv_auth
 - AUTOENV_FILE_ENTER:   .env       => .autoenv.zsh
 - AUTOENV_FILE_LEAVE:   .env_leave => .autoenv_leave.zsh

`.env` is usually used only for key-value pairs for environment
settings, e.g. with foreman.  We do not want to interfere with this.

Fixes https://github.com/Tarrasch/zsh-autoenv/issues/31.
This commit is contained in:
Daniel Hahler 2015-05-21 23:58:26 +02:00
parent 631ea30440
commit 18201debd6
7 changed files with 78 additions and 72 deletions

View File

@ -4,8 +4,8 @@
# Autoenv for Zsh # Autoenv for Zsh
zsh-autoenv automatically sources (known/whitelisted) `.env` files, typically zsh-autoenv automatically sources (known/whitelisted) `.autoenv.zsh` files,
used in project root directories. typically used in project root directories.
It handles "enter" and leave" events, nesting, and stashing of It handles "enter" and leave" events, nesting, and stashing of
variables (overwriting and restoring). variables (overwriting and restoring).
@ -13,23 +13,25 @@ variables (overwriting and restoring).
## Features ## Features
- Support for enter and leave events, which can use the same file. - Support for enter and leave events, which can use the same file.
By default `.env` is used for entering, and `.env_leave` for leaving. By default `.autoenv.zsh` is used for entering, and `.autoenv_leave.zsh` for
leaving.
- Interactively asks for confirmation / authentication before sourcing an - Interactively asks for confirmation / authentication before sourcing an
unknown `.env` file, and remembers whitelisted files by their hashed unknown `.autoenv.zsh` file, and remembers whitelisted files by their hashed
content. content.
- Test suite. - Test suite.
- Written in Zsh. - Written in Zsh.
### Variable stashing ### Variable stashing
You can use `autostash` in your `.env` files to overwrite some variable, e.g. You can use `autostash` in your `.autoenv.zsh` files to overwrite some
`$PATH`. When leaving the directory, it will be automatically restored. variable, e.g. `$PATH`. When leaving the directory, it will be automatically
restored.
% echo 'echo ENTERED; autostash FOO=changed' > project/.env % echo 'echo ENTERED; autostash FOO=changed' > project/.autoenv.zsh
% FOO=orig % FOO=orig
% cd project % cd project
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-rw-rw-r-- 1 user user 36 Mai 6 20:38 /tmp/project/.env -rw-rw-r-- 1 user user 36 Mai 6 20:38 /tmp/project/.autoenv.zsh
********************************************** **********************************************
@ -51,13 +53,13 @@ have more control.
The varstash library has been taken from smartcd, and was optimized for Zsh. The varstash library has been taken from smartcd, and was optimized for Zsh.
## Writing your .env file ## Writing your .autoenv.zsh file
### `autoenv_source_parent()` ### `autoenv_source_parent()`
zsh-autoenv will stop looking for `.env` files after the first one has been zsh-autoenv will stop looking for `.autoenv.zsh` files after the first one has
found. But you can use the function `autoenv_source_parent` to source a been found. But you can use the function `autoenv_source_parent` to source a
parent `.env` file from there. parent `.autoenv.zsh` file from there.
## Installation ## Installation
@ -86,16 +88,16 @@ Add them to your `~/.zshrc` file, before sourcing/loading zsh-autoenv.
### AUTOENV\_FILE\_ENTER ### AUTOENV\_FILE\_ENTER
Name of the file to look for when entering directories. Name of the file to look for when entering directories.
Default: `.env` Default: `.autoenv.zsh`
### AUTOENV\_FILE\_LEAVE ### AUTOENV\_FILE\_LEAVE
Name of the file to look for when leaving directories. Name of the file to look for when leaving directories.
Requires `AUTOENV_HANDLE_LEAVE=1`. Requires `AUTOENV_HANDLE_LEAVE=1`.
Default: `.env_leave` Default: `.autoenv_leave.zsh`
### AUTOENV\_LOOK\_UPWARDS ### AUTOENV\_LOOK\_UPWARDS
Look for .env files in parent dirs? Look for .autoenv.zsh files in parent dirs?
Default: `1` Default: `1`

View File

@ -2,16 +2,16 @@
# https://github.com/joshuaclayton/dotfiles/blob/master/zsh_profile.d/autoenv.zsh # https://github.com/joshuaclayton/dotfiles/blob/master/zsh_profile.d/autoenv.zsh
# File to store confirmed authentication into. # File to store confirmed authentication into.
: ${AUTOENV_ENV_FILENAME:=~/.env_auth} : ${AUTOENV_ENV_FILENAME:=~/.autoenv_auth}
# Name of the file to look for when entering directories. # Name of the file to look for when entering directories.
: ${AUTOENV_FILE_ENTER:=.env} : ${AUTOENV_FILE_ENTER:=.autoenv.zsh}
# Name of the file to look for when leaving directories. # Name of the file to look for when leaving directories.
# Requires AUTOENV_HANDLE_LEAVE=1. # Requires AUTOENV_HANDLE_LEAVE=1.
: ${AUTOENV_FILE_LEAVE:=.env_leave} : ${AUTOENV_FILE_LEAVE:=.autoenv_leave.zsh}
# Look for .env files in parent dirs? # Look for .autoenv.zsh files in parent dirs?
: ${AUTOENV_LOOK_UPWARDS:=1} : ${AUTOENV_LOOK_UPWARDS:=1}
# Handle leave events when changing away from a subtree, where an "enter" # Handle leave events when changing away from a subtree, where an "enter"
@ -24,10 +24,11 @@
# (Temporarily) disable zsh-autoenv. This gets looked at in the chpwd handler. # (Temporarily) disable zsh-autoenv. This gets looked at in the chpwd handler.
: ${AUTOENV_DISABLED:=0} : ${AUTOENV_DISABLED:=0}
# Public helper functions, which can be used from your .env files: # Public helper functions, which can be used from your .autoenv.zsh files:
# #
# Source the next .env file from parent directories. # Source the next .autoenv.zsh file from parent directories.
# This is useful if you want to use a base .env file for a directory subtree. # This is useful if you want to use a base .autoenv.zsh file for a directory
# subtree.
autoenv_source_parent() { autoenv_source_parent() {
local parent_env_file=$(_autoenv_get_file_upwards ${autoenv_env_file:h}) local parent_env_file=$(_autoenv_get_file_upwards ${autoenv_env_file:h})
@ -213,6 +214,8 @@ _autoenv_check_authorized_env_file() {
echo "**********************************************" echo "**********************************************"
echo "" echo ""
echo -n "Would you like to authorize it? (type 'yes') " echo -n "Would you like to authorize it? (type 'yes') "
# echo "Would you like to authorize it?"
# echo "('yes' to allow, 'no' to not being asked again; otherwise ignore it for the shell) "
if ! _autoenv_ask_for_yes; then if ! _autoenv_ask_for_yes; then
return 1 return 1

View File

@ -1,12 +1,12 @@
$ source $TESTDIR/setup.zsh || return 1 $ source $TESTDIR/setup.zsh || return 1
Lets set a simple .env action Lets set a simple .autoenv.zsh action
$ echo 'echo ENTERED' > .env $ echo 'echo ENTERED' > .autoenv.zsh
Manually create auth file Manually create auth file
$ test_autoenv_add_to_env $PWD/.env $ test_autoenv_add_to_env $PWD/.autoenv.zsh
$ cd . $ cd .
ENTERED ENTERED
@ -17,7 +17,7 @@ Now try to make it accept it
$ _autoenv_ask_for_yes() { echo "yes" } $ _autoenv_ask_for_yes() { echo "yes" }
$ cd . $ cd .
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/autoenv.t/.env (glob) -* /tmp/cramtests-*/autoenv.t/.autoenv.zsh (glob)
********************************************** **********************************************
@ -39,10 +39,10 @@ Now lets see that it actually checks the shasum value.
$ _autoenv_stack_entered=() $ _autoenv_stack_entered=()
$ rm $AUTOENV_ENV_FILENAME $ rm $AUTOENV_ENV_FILENAME
$ test_autoenv_add_to_env $PWD/.env mischief $ test_autoenv_add_to_env $PWD/.autoenv.zsh mischief
$ cd . $ cd .
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/autoenv.t/.env (glob) -* /tmp/cramtests-*/autoenv.t/.autoenv.zsh (glob)
********************************************** **********************************************
@ -61,7 +61,7 @@ Now, will it take no for an answer?
$ _autoenv_ask_for_yes() { echo "no"; return 1 } $ _autoenv_ask_for_yes() { echo "no"; return 1 }
$ cd . $ cd .
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/autoenv.t/.env (glob) -* /tmp/cramtests-*/autoenv.t/.autoenv.zsh (glob)
********************************************** **********************************************
@ -77,7 +77,7 @@ Lets also try one more time to ensure it didn't add it.
$ _autoenv_ask_for_yes() { echo "yes"; return 0 } $ _autoenv_ask_for_yes() { echo "yes"; return 0 }
$ cd . $ cd .
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/autoenv.t/.env (glob) -* /tmp/cramtests-*/autoenv.t/.autoenv.zsh (glob)
********************************************** **********************************************

View File

@ -7,8 +7,8 @@ Setup env actions / output.
$ AUTOENV_LOOK_UPWARDS=1 $ AUTOENV_LOOK_UPWARDS=1
$ mkdir -p sub/sub2 $ mkdir -p sub/sub2
$ cd sub $ cd sub
$ echo 'echo ENTERED: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env $ echo 'echo ENTERED: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .autoenv.zsh
$ echo 'echo LEFT: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env_leave $ echo 'echo LEFT: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .autoenv_leave.zsh
Manually create auth files. Manually create auth files.

View File

@ -1,18 +1,18 @@
$ source $TESTDIR/setup.zsh || return 1 $ source $TESTDIR/setup.zsh || return 1
Lets set a simple .env action Lets set a simple .autoenv.zsh action
$ mkdir sub $ mkdir sub
$ cd sub $ cd sub
$ echo 'echo ENTERED' > .env $ echo 'echo ENTERED' > .autoenv.zsh
$ echo 'echo LEFT' > .env_leave $ echo 'echo LEFT' > .autoenv_leave.zsh
Change to the directory. Change to the directory.
$ _autoenv_ask_for_yes() { echo "yes"; return 0 } $ _autoenv_ask_for_yes() { echo "yes"; return 0 }
$ cd . $ cd .
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/leave.t/sub/.env (glob) -* /tmp/cramtests-*/leave.t/sub/.autoenv.zsh (glob)
********************************************** **********************************************
@ -29,7 +29,7 @@ Leave the directory and answer "no".
$ _autoenv_ask_for_yes() { echo "no"; return 1 } $ _autoenv_ask_for_yes() { echo "no"; return 1 }
$ cd .. $ cd ..
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/leave.t/sub/.env_leave (glob) -* /tmp/cramtests-*/leave.t/sub/.autoenv_leave.zsh (glob)
********************************************** **********************************************
@ -45,7 +45,7 @@ Leave the directory and answer "no".
$ _autoenv_ask_for_yes() { echo "yes"; return 0 } $ _autoenv_ask_for_yes() { echo "yes"; return 0 }
$ cd .. $ cd ..
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/leave.t/sub/.env_leave (glob) -* /tmp/cramtests-*/leave.t/sub/.autoenv_leave.zsh (glob)
********************************************** **********************************************
@ -80,7 +80,7 @@ Now check with subdirs, not looking at parent dirs.
LEFT LEFT
Test that .env is sourced only once with AUTOENV_HANDLE_LEAVE=0. Test that .autoenv.zsh is sourced only once with AUTOENV_HANDLE_LEAVE=0.
$ unset _autoenv_stack_entered $ unset _autoenv_stack_entered
$ AUTOENV_HANDLE_LEAVE=0 $ AUTOENV_HANDLE_LEAVE=0
@ -97,8 +97,8 @@ Test that "leave" is not triggered when entering an outside dir via symlink.
LEFT LEFT
$ mkdir outside $ mkdir outside
$ cd outside $ cd outside
$ echo 'echo ENTERED outside: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env $ echo 'echo ENTERED outside: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .autoenv.zsh
$ echo 'echo LEFT outside: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env_leave $ echo 'echo LEFT outside: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .autoenv_leave.zsh
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
$ cd .. $ cd ..
@ -117,7 +117,7 @@ Test that "leave" is not triggered when entering an outside dir via symlink.
$autoenv_env_file should be reset when leaving. $autoenv_env_file should be reset when leaving.
$ echo $autoenv_env_file $ echo $autoenv_env_file
*/leave.t/sub/symlink/.env (glob) */leave.t/sub/symlink/.autoenv.zsh (glob)
$ cd ../.. $ cd ../..
LEFT outside: PWD:leave.t pwd:leave.t from:symlink to:leave.t event:leave LEFT outside: PWD:leave.t pwd:leave.t from:symlink to:leave.t event:leave
$ echo ${autoenv_env_file:-empty} $ echo ${autoenv_env_file:-empty}

View File

@ -1,4 +1,4 @@
Test recursing into parent .env files. Test recursing into parent .autoenv.zsh files.
$ source $TESTDIR/setup.zsh || return 1 $ source $TESTDIR/setup.zsh || return 1
@ -8,8 +8,8 @@ Setup env actions / output.
Create env files in root dir. Create env files in root dir.
$ echo 'echo ENTERED_root: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env $ echo 'echo ENTERED_root: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .autoenv.zsh
$ echo 'echo LEFT_root: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env_leave $ echo 'echo LEFT_root: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .autoenv_leave.zsh
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
Create env files in sub dir. Create env files in sub dir.
@ -18,8 +18,8 @@ Create env files in sub dir.
$ cd sub $ cd sub
ENTERED_root: PWD:sub from:recurse-upwards.t to:sub ENTERED_root: PWD:sub from:recurse-upwards.t to:sub
$ echo 'echo ENTERED_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env $ echo 'echo ENTERED_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .autoenv.zsh
$ echo 'echo LEFT_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env_leave $ echo 'echo LEFT_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .autoenv_leave.zsh
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
The actual tests. The actual tests.
@ -35,45 +35,45 @@ The actual tests.
$ cd .. $ cd ..
Changing the .env file should re-source it. Changing the .autoenv.zsh file should re-source it.
$ echo 'echo ENTER2' >> .env $ echo 'echo ENTER2' >> .autoenv.zsh
Set timestamp of auth file into the past, so it gets seen as new below. Set timestamp of auth file into the past, so it gets seen as new below.
$ touch -t 201401010101 .env $ touch -t 201401010101 .autoenv.zsh
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
$ cd . $ cd .
ENTERED_sub: PWD:sub from:sub to:sub ENTERED_sub: PWD:sub from:sub to:sub
ENTER2 ENTER2
Add sub/sub2/.env file, with a call to autoenv_source_parent. Add sub/sub2/.autoenv.zsh file, with a call to autoenv_source_parent.
$ echo "echo autoenv_source_parent_from_sub2:\nautoenv_source_parent\necho done_sub2\n" > sub2/.env $ echo "echo autoenv_source_parent_from_sub2:\nautoenv_source_parent\necho done_sub2\n" > sub2/.autoenv.zsh
$ test_autoenv_add_to_env sub2/.env $ test_autoenv_add_to_env sub2/.autoenv.zsh
$ cd sub2 $ cd sub2
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
ENTERED_sub: PWD:sub2 from:sub to:sub2 ENTERED_sub: PWD:sub2 from:sub to:sub2
ENTER2 ENTER2
done_sub2 done_sub2
Move sub/.env away, now the root .env file should get sourced. Move sub/.autoenv.zsh away, now the root .autoenv.zsh file should get sourced.
$ mv ../.env ../.env.out $ mv ../.autoenv.zsh ../.autoenv.zsh.out
$ touch -t 201401010102 .env $ touch -t 201401010102 .autoenv.zsh
$ cd . $ cd .
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
ENTERED_root: PWD:sub2 from:sub2 to:sub2 ENTERED_root: PWD:sub2 from:sub2 to:sub2
done_sub2 done_sub2
$ mv ../.env.out ../.env $ mv ../.autoenv.zsh.out ../.autoenv.zsh
Prepend call to autoenv_source_parent to sub/.env file. Prepend call to autoenv_source_parent to sub/.autoenv.zsh file.
$ cd .. $ cd ..
$ sed -i -e "1s/^/echo autoenv_source_parent_from_sub:\nautoenv_source_parent\n/" .env $ sed -i -e "1s/^/echo autoenv_source_parent_from_sub:\nautoenv_source_parent\n/" .autoenv.zsh
$ echo "echo done_sub" >> .env $ echo "echo done_sub" >> .autoenv.zsh
$ touch -t 201401010103 .env $ touch -t 201401010103 .autoenv.zsh
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
$ cd . $ cd .
@ -84,10 +84,10 @@ Prepend call to autoenv_source_parent to sub/.env file.
done_sub done_sub
Add sub/sub2/.env file. Add sub/sub2/.autoenv.zsh file.
$ echo -e "echo autoenv_source_parent_from_sub2:\nautoenv_source_parent\necho done_sub2\n" >| sub2/.env $ echo -e "echo autoenv_source_parent_from_sub2:\nautoenv_source_parent\necho done_sub2\n" >| sub2/.autoenv.zsh
$ test_autoenv_add_to_env sub2/.env $ test_autoenv_add_to_env sub2/.autoenv.zsh
$ cd sub2 $ cd sub2
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
@ -105,16 +105,17 @@ autoenv_source_parent already.
LEFT_sub: PWD:recurse-upwards.t from:sub2 to:recurse-upwards.t LEFT_sub: PWD:recurse-upwards.t from:sub2 to:recurse-upwards.t
Changing the root .env should trigger re-authentication via autoenv_source_parent. Changing the root .autoenv.zsh should trigger re-authentication via
autoenv_source_parent.
First, let's answer "no". First, let's answer "no".
$ echo "echo NEW" >| .env $ echo "echo NEW" >| .autoenv.zsh
$ _autoenv_ask_for_yes() { echo "no"; return 1 } $ _autoenv_ask_for_yes() { echo "no"; return 1 }
$ cd sub $ cd sub
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/recurse-upwards.t/.env (glob) -* /tmp/cramtests-*/recurse-upwards.t/.autoenv.zsh (glob)
********************************************** **********************************************
@ -128,18 +129,18 @@ First, let's answer "no".
done_sub done_sub
Now with "yes". Now with "yes".
This currently does not trigger re-execution of the .env file. This currently does not trigger re-execution of the .autoenv.zsh file.
$ _autoenv_ask_for_yes() { echo "yes"; return 0 } $ _autoenv_ask_for_yes() { echo "yes"; return 0 }
$ cd . $ cd .
Touching the .env file will now source the parent env file. Touching the .autoenv.zsh file will now source the parent env file.
$ touch -t 201401010104 .env $ touch -t 201401010104 .autoenv.zsh
$ cd . $ cd .
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
Attempting to load unauthorized env file! Attempting to load unauthorized env file!
-* /tmp/cramtests-*/recurse-upwards.t/.env (glob) -* /tmp/cramtests-*/recurse-upwards.t/.autoenv.zsh (glob)
********************************************** **********************************************

View File

@ -9,7 +9,7 @@
# Not handled in varstash yet. # Not handled in varstash yet.
# setopt nounset # setopt nounset
export AUTOENV_ENV_FILENAME="$CRAMTMP/.env_auth" export AUTOENV_ENV_FILENAME="$CRAMTMP/.autoenv_auth"
if [[ $AUTOENV_ENV_FILENAME[0,4] != '/tmp' ]]; then if [[ $AUTOENV_ENV_FILENAME[0,4] != '/tmp' ]]; then
echo "AUTOENV_ENV_FILENAME is not in /tmp. Aborting." echo "AUTOENV_ENV_FILENAME is not in /tmp. Aborting."