ZPA: Dash-compatibility; -q/--quiet options (no output except stderr)

This commit is contained in:
Sebastian Gniazdowski 2018-11-19 16:31:40 +01:00
parent 7984640353
commit f8ea637efe

View file

@ -35,12 +35,25 @@ ZPA_DIR="${ZERO%/*}"
fi fi
[ "x$ZPA_CONFIG" != "x" ] && { [ "x$ZPA_CONFIG" != "x" ] && {
echo "Reading configuration from: ${ZPA_CONFIG/$HOME/~}"
export ZPA_CONFIG export ZPA_CONFIG
. "$ZPA_CONFIG" . "$ZPA_CONFIG"
} }
} || { } || {
. "$ZPA_CONFIG" [ -n "$ZSH_VERSION" ] && {
setopt extendedglob
if [[ " $* " != *-[^[:blank:]-]#q[^[:blank:]]#[[:blank:]]##* && \
" $* " != *[[:blank:]]##--quiet[[:blank:]]##* ]]
then
if [[ -z "$ZPA_CONFIG" ]];then
print -r -- "Couldn't find configuration file, will use the default zsh binary"
else
print -r -- "Reading configuration from: ${ZPA_CONFIG/$HOME/~}"
. "$ZPA_CONFIG"
fi
else
[[ -n "$ZPA_CONFIG" ]] && . "$ZPA_CONFIG"
fi
}
} }
[ -z "$zsh_control_bin" ] && zsh_control_bin="zsh" [ -z "$zsh_control_bin" ] && zsh_control_bin="zsh"
@ -63,16 +76,13 @@ typeset -gF4 SECONDS=0
emulate -R zsh -o extendedglob -o typesetsilent -o warncreateglobal emulate -R zsh -o extendedglob -o typesetsilent -o warncreateglobal
zmodload zsh/datetime || { print -r -- "Module zsh/datetime is needed, aborting"; exit 1; } zmodload zsh/datetime || { print -u2 -r -- "Module zsh/datetime is needed, aborting"; exit 1; }
zmodload zsh/zutil || { print -r -- "Module zsh/zutil is needed, aborting"; exit 1; } zmodload zsh/zutil || { print -u2 -r -- "Module zsh/zutil is needed, aborting"; exit 1; }
print -r -- "Running under Zsh-binary:\`$zsh_control_bin', version:$ZSH_VERSION"
print
local -A opthash local -A opthash
zparseopts -E -D -A opthash h -help v -verbose q -quiet a -no-ansi n -only-new || \ zparseopts -E -D -A opthash h -help v -verbose q -quiet a -no-ansi n -only-new || \
{ print "Improper options given, see help (-h/--help)"; return 1; } { print -r -- "Improper options given, see help (-h/--help)"; return 1; }
(( ${+opthash[-h]} + ${+opthash[--help]} )) && local OPT_HELP="-h" (( ${+opthash[-h]} + ${+opthash[--help]} )) && local OPT_HELP="-h"
(( ${+opthash[-v]} + ${+opthash[--verbose]} )) && local OPT_VERBOSE="-v" (( ${+opthash[-v]} + ${+opthash[--verbose]} )) && local OPT_VERBOSE="-v"
@ -80,6 +90,9 @@ zparseopts -E -D -A opthash h -help v -verbose q -quiet a -no-ansi n -only-new |
(( ${+opthash[-a]} + ${+opthash[--no-ansi]} )) && local OPT_NO_ANSI="-a" (( ${+opthash[-a]} + ${+opthash[--no-ansi]} )) && local OPT_NO_ANSI="-a"
(( ${+opthash[-n]} + ${+opthash[--only-new]} )) && local OPT_ONLY_NEW="-n" (( ${+opthash[-n]} + ${+opthash[--only-new]} )) && local OPT_ONLY_NEW="-n"
[[ -z "$OPT_QUIET" ]] && print -r -- "Running under Zsh-binary: \`$zsh_control_bin' (passed to /usr/bin/env), its version: $ZSH_VERSION"
[[ -z "$OPT_QUIET" ]] && print
[[ -z "$1" || "$1" = (-h|--help) ]] && { [[ -z "$1" || "$1" = (-h|--help) ]] && {
print -r -- "Usage: zsh-plugin-assessor [-h/--help] [-v|--verbose] [-a|--no-ansi] [-n|--only-new] {file.md}" print -r -- "Usage: zsh-plugin-assessor [-h/--help] [-v|--verbose] [-a|--no-ansi] [-n|--only-new] {file.md}"
print -r -- " e.g.: zsh-plugin-assessor --only-new ./README.md" print -r -- " e.g.: zsh-plugin-assessor --only-new ./README.md"
@ -89,21 +102,25 @@ zparseopts -E -D -A opthash h -help v -verbose q -quiet a -no-ansi n -only-new |
print -r -- "the plugin or theme. This is useful to evaluate only newly added repositories." print -r -- "the plugin or theme. This is useful to evaluate only newly added repositories."
print -r -- "It will however still process repositories that are inactive, etc. and do not" print -r -- "It will however still process repositories that are inactive, etc. and do not"
print -r -- "have the emoji-indicators in their normal state." print -r -- "have the emoji-indicators in their normal state."
print
print -r -- "Option -q/--quiet will silence all messages except of stderr error messages."
print -r -- "Option -v/--verbose will add some messages or extend them (e.g. to show git's"
print -r -- "clone progress-bar (processed into an animated gauge)."
exit 0 exit 0
} }
[[ ! -e "$1" ]] && { [[ ! -e "$1" ]] && {
print -r -- "The input file ($1) doesn't exist, aborting" print -u2 -r -- "The input file ($1) doesn't exist, aborting"
exit 1 exit 1
} }
[[ ! -f "$1" ]] && { [[ ! -f "$1" ]] && {
print -r -- "The input file ($1) isn't a regular file, aborting" print -u2 -r -- "The input file ($1) isn't a regular file, aborting"
exit 1 exit 1
} }
[[ ! -r "$1" ]] && { [[ ! -r "$1" ]] && {
print -r -- "The input file ($1) is unreadable, aborting" print -u2 -r -- "The input file ($1) is unreadable, aborting"
exit 1 exit 1
} }
@ -113,7 +130,7 @@ typeset -ga input_file_lines gathered_plugins plugin_scores
typeset -gA plugin_to_url plugin_to_line_num plugin_to_score plugin_to_emoji_str plugin_no_process typeset -gA plugin_to_url plugin_to_line_num plugin_to_score plugin_to_emoji_str plugin_no_process
input_file_lines=( "${(@f)INPUT_FILE_CONTENTS}" ) input_file_lines=( "${(@f)INPUT_FILE_CONTENTS}" )
print -r -- "The input file has ${#input_file_lines} lines" [[ -z "$OPT_QUIET" ]] && print -r -- "The input file has ${#input_file_lines} lines"
# #
# Extract plugins # Extract plugins
@ -123,18 +140,18 @@ typeset -g LINE IN_PLUGINS_SECTION=0 IN_THEMES_SECTION=0
for LINE in "${input_file_lines[@]}"; do for LINE in "${input_file_lines[@]}"; do
(( ++ CURRENT_LINE )) (( ++ CURRENT_LINE ))
if (( ! IN_PLUGINS_SECTION && ! IN_THEMES_SECTION )); then if (( ! IN_PLUGINS_SECTION && ! IN_THEMES_SECTION )); then
[[ "$LINE" = "## Plugins" ]] && { IN_PLUGINS_SECTION=1; print -r -- "Processing plugins..."; } [[ "$LINE" = "## Plugins" ]] && { IN_PLUGINS_SECTION=1; [[ -z "$OPT_QUIET" ]] && print -r -- "Processing plugins..."; }
[[ "$LINE" = "## Themes" ]] && { IN_THEMES_SECTION=1; print -r -- "Processing themes..."; } [[ "$LINE" = "## Themes" ]] && { IN_THEMES_SECTION=1; [[ -z "$OPT_QUIET" ]] && print -r -- "Processing themes..."; }
else else
if [[ "$LINE" = "##"[[:blank:]]##[a-zA-Z0-9]##* ]]; then if [[ "$LINE" = "##"[[:blank:]]##[a-zA-Z0-9]##* ]]; then
(( IN_PLUGINS_SECTION )) && { (( IN_PLUGINS_SECTION )) && {
IN_PLUGINS_SECTION=0 IN_PLUGINS_SECTION=0
LAST_PLUGIN_IDX="${#gathered_plugins}" LAST_PLUGIN_IDX="${#gathered_plugins}"
print -r -- "Found #$NUMBER_OF_PLUGINS plugins" [[ -z "$OPT_QUIET" ]] && print -r -- "Found #$NUMBER_OF_PLUGINS plugins"
} }
(( IN_THEMES_SECTION )) && { (( IN_THEMES_SECTION )) && {
IN_THEMES_SECTION=0 IN_THEMES_SECTION=0
print -r -- "Found #$NUMBER_OF_THEMES themes" [[ -z "$OPT_QUIET" ]] && print -r -- "Found #$NUMBER_OF_THEMES themes"
} }
[[ "$LINE" = "## Themes" ]] && IN_THEMES_SECTION=1 [[ "$LINE" = "## Themes" ]] && IN_THEMES_SECTION=1
elif (( IN_PLUGINS_SECTION && DEBUG_PLUGIN_COUNT_LIMIT > 0 && NUMBER_OF_PLUGINS >= DEBUG_PLUGIN_COUNT_LIMIT )); then elif (( IN_PLUGINS_SECTION && DEBUG_PLUGIN_COUNT_LIMIT > 0 && NUMBER_OF_PLUGINS >= DEBUG_PLUGIN_COUNT_LIMIT )); then
@ -175,15 +192,15 @@ done
typeset -g WORK_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/zsh-plugin-assessor/clones" typeset -g WORK_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/zsh-plugin-assessor/clones"
print -r -- "== Removing clones from previous ZPA run... ==" [[ -z "$OPT_QUIET" ]] && print -r -- "== Removing clones from previous ZPA run... =="
builtin cd -q -- "${WORK_DIR:h}" builtin cd -q -- "${WORK_DIR:h}"
command rm -rf -- "$WORK_DIR" command rm -rf -- "$WORK_DIR"
command mkdir -p -- "$WORK_DIR" command mkdir -p -- "$WORK_DIR"
builtin cd -q -- "$WORK_DIR" builtin cd -q -- "$WORK_DIR"
print -r -- "== Working in $WORK_DIR ==" [[ -z "$OPT_QUIET" ]] && print -r -- "== Working in $WORK_DIR =="
print [[ -z "$OPT_QUIET" ]] && print
# #
# Clone each plugin, establish its score # Clone each plugin, establish its score
@ -194,13 +211,13 @@ for PLUGIN in "${gathered_plugins[@]}"; do
typeset -g URL="${plugin_to_url[$PLUGIN]}" typeset -g URL="${plugin_to_url[$PLUGIN]}"
if (( plugin_no_process[$PLUGIN] )); then if (( plugin_no_process[$PLUGIN] )); then
print "Skipping ${PLUGIN}... (it isn't a new, unprocessed plugin)" [[ -z "$OPT_QUIET" ]] && print "Skipping ${PLUGIN}...${OPT_VERBOSE:+ (it is not a new, unprocessed plugin)}"
plugin_to_score[$PLUGIN]="0000" plugin_to_score[$PLUGIN]="0000"
plugin_to_emoji_str[$PLUGIN]="" plugin_to_emoji_str[$PLUGIN]=""
continue continue
fi fi
if [[ -n "$OPT_VERBOSE" ]]; then if [[ -n "$OPT_VERBOSE" ]]; then
print [[ -z "$OPT_QUIET" ]] && print
command git clone --progress "$URL" "$PLUGIN" |& "${ZPA_DIR}/git-process-output.zsh" command git clone --progress "$URL" "$PLUGIN" |& "${ZPA_DIR}/git-process-output.zsh"
else else
command git clone --progress "$URL" "$PLUGIN" |& "${ZPA_DIR}/git-process-output.zsh" -q command git clone --progress "$URL" "$PLUGIN" |& "${ZPA_DIR}/git-process-output.zsh" -q
@ -363,7 +380,7 @@ for PLUGIN in "${gathered_plugins[@]}"; do
fi fi
fi fi
print "$PLUGIN: ${(l:4::0:)score}, emoji: $emoji_string" [[ -z "$OPT_QUIET" ]] && print -r -- "$PLUGIN: ${(l:4::0:)score}, emoji: $emoji_string"
plugin_to_score[$PLUGIN]="${(l:4::0:)score}" plugin_to_score[$PLUGIN]="${(l:4::0:)score}"
plugin_to_emoji_str[$PLUGIN]="${emoji_string%%[[:blank:]]##}" plugin_to_emoji_str[$PLUGIN]="${emoji_string%%[[:blank:]]##}"
@ -419,5 +436,5 @@ done
print -r -- "${(F)input_file_lines[line_num+1,-1]}" >>! "$OUTPUT_FILE_PATH" print -r -- "${(F)input_file_lines[line_num+1,-1]}" >>! "$OUTPUT_FILE_PATH"
float -F2 elapsed_time=$(( SECONDS / 60.0 )) float -F2 elapsed_time=$(( SECONDS / 60.0 ))
print "The processing took $elapsed_time minutes" [[ -z "$OPT_QUIET" ]] && print -r -- "The processing took $elapsed_time minutes"
# vim:ft=zsh:et:sw=4:sts=4 # vim:ft=zsh:et:sw=4:sts=4