yage
a739d3b5a2
===================================================================== Big day! V4 is finally live. This INCLUDES some BREAKING CHANGES to ZSH TYPE scwrypts! Please refer to the readme for upgrade details (more specifically docs/upgrade/v3-to-v4.md) Upgrade is SUPER EASY, so please take the time to do so. --- New Features ---------------------------------------------------- - zsh type scwrypts have an upgraded runstring to improve context setup and simplicity to the scwrypt-writer - scwrypts now publishes the package (scwrypts) to PyPi; this provides a simple way to invoke scwrypts from python-based environments as well as the entire scwrypts python library suite pip install scwrypts - scwrypts now publishes the package (scwrypts) to npm; this provides a simple way to invoke scwrypts from nodesjs environments npm install scwrypts --- Bug Fixes ------------------------------------------------------- - scwrypts runner prompts which use the zshbuiltin "read" now appropriately read input from tty, pipe, files, and user input - virtualenv refresh now loads and prepares the scwrypts virtual environments correctly --- Changes --------------------------------------------------------- - created the (-v, --log-level) scwrypts arguments as improvements of and replacements to the --verbose and --no-log flags - (-n) is now an alias for (--log-level 0) - (--no-log) is the same as (-n) for compatibility, but will be removed in 4.2 - zsh/lib/utils/io print functions now *interact with log-level* various log levels will now only display the appropriate console prints for the specified log level - zsh/lib/utils/io:INFO has been renamed to DEBUG to align with log-level output; please use DEBUG for debug messages and REMINDER for important user messages - created zsh/lib/utils/io:FZF_USER_INPUT as a *drop-in replacement* for the confusing FZF_HEAD and FZF_TAIL commands. Update by literally changing any instances of FZF_HEAD or FZF_TAIL with FZF_USER_INPUT - FZF_HEAD and FZF_TAIL will be removed in 4.2 - zsh/lib/utils/io:READ (and other zshbuiltin/read-based prompts) now accept a --force-user-input flag in case important checks should require an admin's approval. This flag will ensure that piped input and the `scwrypts -y` flag are ignored for the single prompt. - zsh/lib/utils/color has been updated to use color names which match the ANSI color names - zsh/hello-world has been reduced to a minimal example; this is to emphasize ease-of-use with v4 - zsh/sanity-check is a scwrypts/run testing helper and detailed starting reference (helpful since hello-world is now minimal) - various refactor, updates, and improvements to the scwrypts runner - migrated all zsh scwrypts and plugins to use v4 runner syntax - zsh - plugins/kubectl - plugins/ci - refactored py/lib into py/lib/scwrypts (PyPi)
66 lines
2.0 KiB
Bash
66 lines
2.0 KiB
Bash
USAGE() { # formatter for USAGE variable
|
||
[ ! $USAGE ] && return 0
|
||
local USAGE_LINE=$(echo $USAGE | grep -i '^[ ]*usage *:' | sed 's/^[ ]*//')
|
||
|
||
[ $USAGE__usage ] && echo $USAGE_LINE | grep -q 'usage: -' \
|
||
&& USAGE_LINE=$(echo $USAGE_LINE | sed "s/usage: -/usage: $USAGE__usage/")
|
||
|
||
[ $__SCWRYPT ] \
|
||
&& USAGE_LINE=$(
|
||
echo $USAGE_LINE \
|
||
| sed "s;^[^:]*:;& scwrypts $SCWRYPT_NAME --;" \
|
||
| sed 's/ \{2,\}/ /g; s/scwrypts -- scwrypts/scwrypts/' \
|
||
)
|
||
|
||
local THE_REST=$(echo $USAGE | grep -vi '^[ ]*usage *:' )
|
||
|
||
local DYNAMIC_USAGE_ELEMENT
|
||
#
|
||
# create dynamic usage elements (like 'args') by defining USAGE__<element>
|
||
# then using the syntax "<element>: -" in your USAGE variable
|
||
#
|
||
# e.g.
|
||
#
|
||
# USAGE__args="
|
||
# subcommand arg 1 arg 1 description
|
||
# subcommand arg 2 some other description
|
||
# "
|
||
#
|
||
# USAGE="
|
||
# usage: some-command [...args...]
|
||
#
|
||
# args: -
|
||
# -h, --help some arguments are applicable everywhere
|
||
# "
|
||
#
|
||
for DYNAMIC_USAGE_ELEMENT in $(echo $THE_REST | sed -n 's/^\([^:]*\): -$/\1/p')
|
||
do
|
||
DYNAMIC_USAGE_ELEMENT_TEXT=$(eval echo '$USAGE__'$DYNAMIC_USAGE_ELEMENT)
|
||
#[ $DYNAMIC_USAGE_ELEMENT_TEXT ] || continue
|
||
|
||
|
||
case $DYNAMIC_USAGE_ELEMENT in
|
||
description )
|
||
DYNAMIC_USAGE_ELEMENT_TEXT=$(echo "$DYNAMIC_USAGE_ELEMENT_TEXT" | perl -p0e 's/^[\n\s]+//')
|
||
DYNAMIC_USAGE_ELEMENT_TEXT="$__YELLOW\\033[03m$DYNAMIC_USAGE_ELEMENT_TEXT\\033[0m"
|
||
;;
|
||
* )
|
||
DYNAMIC_USAGE_ELEMENT_TEXT=$(echo $DYNAMIC_USAGE_ELEMENT_TEXT | sed 's/[^ ]/ &/')
|
||
;;
|
||
esac
|
||
|
||
THE_REST=$(echo $THE_REST | perl -pe "s$DYNAMIC_USAGE_ELEMENT: -$DYNAMIC_USAGE_ELEMENT:\n$DYNAMIC_USAGE_ELEMENT_TEXT\n\n")
|
||
done
|
||
|
||
# allow for dynamic 'description: -' but delete the 'description:' header line
|
||
THE_REST=$(echo $THE_REST | sed '/^[ ]*description:$/d')
|
||
|
||
echo "$__BLUE$USAGE_LINE$__COLOR_RESET\n\n$THE_REST" \
|
||
| sed "s/^\t\+//; s/\s\+$//; s/^\\s*$//;" \
|
||
| sed '/./,$!d; :a; /^\n*$/{$d;N;ba;};' \
|
||
| perl -p0e 's/\n{2,}/\n\n/g' \
|
||
| perl -p0e 's/:\n{2,}/:\n/g' \
|
||
| perl -p0e 's/([a-z]+:)\n([a-z]+:)/\2/g' \
|
||
>&2
|
||
}
|