===================================================================== --- New Scripts -------------------------- zsh ) vundle-vim helpers - vim/vundle/edit-build-actions - vim/vundle/install - vim/vundle/rebuild quick install-from-source scripts - git/package/install - git/package/build (install --only-build) - git/package/download (install --only-pull) - git/package/update (install --update) config sym-linker (for source-controlled .configs) - config/update (symlinks + terminfo) - config/symlinks (set all symlinks from settings) - config/settings (edit settings which aren't scwrypts env variables) - config/terminfo (load all terminfo from settings) --- Changes ------------------------------ - helper comments are now inserted in all env files - removed underscore prefix for standard AWS environment variables - added "opening" and "finished editing" comments to __EDIT util - added __USAGE to format $USAGE variable to std:err - added __ERROR_CHECK to exit if any __ERROR(s) were called
154 lines
3.7 KiB
Bash
Executable File
154 lines
3.7 KiB
Bash
Executable File
#!/bin/zsh
|
|
_DEPENDENCIES+=()
|
|
_REQUIRED_ENV+=()
|
|
source ${0:a:h}/common.zsh
|
|
#####################################################################
|
|
|
|
_SYNCHRONIZE() {
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
case $1 in
|
|
--no-prompt ) SLIENT=1; shift 1 ;;
|
|
|
|
* ) __WARNING "argument '$1' not recognized"
|
|
shift 1 ;;
|
|
esac
|
|
done
|
|
|
|
[ ! $SLIENT ] && {
|
|
__yN 'change the template before sync?' && __EDIT $__ENV_TEMPLATE
|
|
_SORT_ENV "$__ENV_TEMPLATE"
|
|
git add $__ENV_TEMPLATE >/dev/null 2>&1
|
|
}
|
|
|
|
ENVIRONMENTS=$(__GET_ENV_NAMES | sort -r)
|
|
|
|
_CLEAR_INHERITED_VARIABLES
|
|
_INSERT_NEW_VARIABLES
|
|
_REMOVE_OLD_VARIABLES
|
|
_SORT_AND_CASCADE
|
|
_ADD_DESCRIPTIONS
|
|
|
|
__SUCCESS 'finished sync!'
|
|
}
|
|
|
|
#####################################################################
|
|
|
|
_CLEAR_INHERITED_VARIABLES() {
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
|
sed -i 's/ # inherited from.*//' "$ENV_FILE"
|
|
done
|
|
}
|
|
|
|
_INSERT_NEW_VARIABLES() {
|
|
__STATUS 'inserting new environment variables...'
|
|
|
|
local ENV_NAME ENV_FILE line
|
|
while read line
|
|
do
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
|
grep -q "$line" $ENV_FILE || {
|
|
echo $line >> $ENV_FILE && __STATUS "added '$line' to '$ENV_NAME'"
|
|
}
|
|
done
|
|
done < <(sed -n '/^./p' "$__ENV_TEMPLATE")
|
|
}
|
|
|
|
_REMOVE_OLD_VARIABLES() {
|
|
__STATUS 'removing old environment variables...'
|
|
|
|
local ENV_NAME ENV_FILE line
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
|
while read line
|
|
do
|
|
ENV_VAR=$(echo "$line" | sed 's/=.*/=/')
|
|
grep -q "$ENV_VAR" "$__ENV_TEMPLATE" || {
|
|
sed -i "\\%$ENV_VAR%d" "$ENV_FILE"
|
|
echo "$ENV_VAR" | grep -qv '^#' \
|
|
&& __WARNING "removed unwanted '$ENV_VAR' from '$ENV_NAME'"
|
|
}
|
|
done < $ENV_FILE
|
|
done
|
|
}
|
|
|
|
_SORT_AND_CASCADE() {
|
|
local ENV_NAM ENV_FILE
|
|
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
|
_CASCADE_ENVIRONMENT $ENV_NAME
|
|
done
|
|
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
ENV_FILE=$(__GET_ENV_FILE $ENV_NAME)
|
|
_SORT_ENV "$ENV_FILE"
|
|
done
|
|
}
|
|
|
|
_CASCADE_ENVIRONMENT() {
|
|
local PARENT_NAME="$1"
|
|
local PARENT_FILE=$(__GET_ENV_FILE $PARENT_NAME)
|
|
|
|
local CHILD_NAMES=$(echo $ENVIRONMENTS | grep "^$PARENT_NAME\\.")
|
|
[ ! $CHILD_NAMES ] && return 0
|
|
|
|
__STATUS "cascading '$PARENT_NAME' to children"
|
|
for CHILD_NAME in $(echo $CHILD_NAMES)
|
|
do
|
|
__SUCCESS "detected child '$CHILD_NAME'"
|
|
done
|
|
|
|
local PARENT_VAR VAR_PATTERN CHILD_NAME CHILD_FILE
|
|
|
|
while read PARENT_VAR
|
|
do
|
|
VAR_PATTERN=$(echo "$PARENT_VAR" | sed 's/=.*/=/; s/\//\/\//g')
|
|
__STATUS "propagating '$(echo $VAR_PATTERN | sed 's/^export \([^=]*\)=/\1/')' to children"
|
|
|
|
PARENT_VAR+=" # inherited from $PARENT_NAME"
|
|
|
|
for CHILD_NAME in $(echo $CHILD_NAMES)
|
|
do
|
|
CHILD_FILE=$(__GET_ENV_FILE $CHILD_NAME)
|
|
|
|
sed -i "/^$VAR_PATTERN/d" "$CHILD_FILE"
|
|
echo $PARENT_VAR >> "$CHILD_FILE"
|
|
done
|
|
done < <(sed -n '/^[^#][^=]*=[^#]\+$/p' "$PARENT_FILE")
|
|
|
|
__SUCCESS "finished '$PARENT_NAME' propagation"
|
|
}
|
|
|
|
_ADD_DESCRIPTIONS() {
|
|
__STATUS 'updating descriptions'
|
|
while read DESCRIPTION_LINE
|
|
do
|
|
ENV_VAR=$(echo $DESCRIPTION_LINE | sed 's/ \+| .*$//')
|
|
DESCRIPTION=$(echo $DESCRIPTION_LINE | sed 's/^.* | //')
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
sed -i "/^export $ENV_VAR=/i # $DESCRIPTION" "$(__GET_ENV_FILE $ENV_NAME)"
|
|
done
|
|
done < <(sed -n '/^[^ ]\+ \+| /p' "$__ENV_TEMPLATE.descriptions")
|
|
|
|
while read ENV_VAR
|
|
do
|
|
for ENV_NAME in $(echo $ENVIRONMENTS)
|
|
do
|
|
sed -i "/^export $ENV_VAR=/a \ " "$(__GET_ENV_FILE $ENV_NAME)"
|
|
sed -i "s/^ $//" "$(__GET_ENV_FILE $ENV_NAME)"
|
|
done
|
|
done < <(grep -B1 '^$' "$__ENV_TEMPLATE.descriptions" | grep '|' | awk '{print $1;}')
|
|
}
|
|
|
|
#####################################################################
|
|
_SYNCHRONIZE $@
|