summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsmael Luceno2022-07-23 17:54:15 +0200
committerIsmael Luceno2022-07-23 17:54:15 +0200
commit5c0b9670aba412867baf5266c327c91b4e47e06e (patch)
tree5ef7f1e76697bd52513f96be67400bee91ce7844
parentd8b100f6be0bdbeb8659c11bc35a9c9142f450f2 (diff)
gaze: Streamline show-spell-version functions
Change the behavior to only print grimoires containing the spell. Deduplicate code by rebasing two functions on top of gaze_show_spell_version_table. Changes to gaze_show_spell_version_table: - Take a list of grimoires - Avoid printing the table if no spells have been specified Rebased functions: - gaze_show_versions Removed functions: - gaze_show_section_version_table
-rwxr-xr-xusr/sbin/gaze172
1 files changed, 57 insertions, 115 deletions
diff --git a/usr/sbin/gaze b/usr/sbin/gaze
index 7e9c7878..262840c9 100755
--- a/usr/sbin/gaze
+++ b/usr/sbin/gaze
@@ -1056,60 +1056,58 @@ gaze_show_section() {
#---------------------------------------------------------------------
##
-## Given a section name, shows a table of spells in that section along
-## with their grimoire version and installed verion
-## @param Section
-##
-#---------------------------------------------------------------------
-gaze_show_section_version_table() {
-
- local SPELLS=$(codex_get_spells_in_section $1)
-
- (
-
- echo "Grimoire|Section|Spell|Grimoire Version|Installed Version"
- echo "--------|-------|-----|----------------|-----------------"
-
- for spell in $SPELLS; do
-
- codex_set_current_spell $spell &&
- local INSTALLED=$(installed_version $SPELL) &&
- echo "$GRIMOIRE_NAME|$SECTION|$SPELL|${VERSION:="-"}|${INSTALLED:="-"}"
-
- done
-
- ) | maybe_column -t -s "|"
-
-}
-
-
-#---------------------------------------------------------------------
-##
-## Shows the versions of spells, both the version in the grimoire and
-## the version installed on the system.
+## Shows a table with the installed version of a spell and the
+## versions available in the specified grimoires.
+## @param Grimoires space-separated list of grimoires to check, or "-"
+## to list the first found.
## @param Spell
## @param ...
##
#---------------------------------------------------------------------
gaze_show_spell_version_table() {
-
+ local grimoires installed_grimoire installed_ver
+ grimoires=($1)
+ shift
+ [[ $# != 0 ]] || return 0
(
echo "Grimoire|Section|Spell|Grimoire Version|Installed Version"
echo "--------|-------|-----|----------------|-----------------"
-
- for SPELL in $@; do
-
- codex_set_current_spell $SPELL &&
- local INSTALLED=$(installed_version $SPELL) &&
- echo "$GRIMOIRE_NAME|$SECTION|$SPELL|${VERSION:="-"}|${INSTALLED:="-"}"
-
+ for SPELL in "$@"; do
+ unset installed_grimoire
+ if [[ $grimoires != - ]]; then
+ codex_does_spell_exist $SPELL || continue
+ if tablet_find_spell_dir "$SPELL" tablet; then
+ # TODO change this if it will be stored in the less volatile
+ # state/packages file.
+ tablet_get_grimoire_name $tablet installed_grimoire
+ fi
+ fi
+ for grimoire in "${grimoires[@]}"; do
+ unset SECTION VERSION installed_ver
+ if [[ $grimoire == - ]]; then
+ SPELL_DIRECTORY="$SPELL"
+ else
+ SPELL_DIRECTORY=$(codex_cache_spell_lookup $SPELL $grimoire)
+ fi &&
+ codex_set_current_spell "$SPELL_DIRECTORY" || continue
+ # XXX old tablet/state files may not hold installed_grimoire,
+ # so match the first.
+ : ${installed_grimoire:=$GRIMOIRE_NAME}
+ case "$VERSION:$GRIMOIRE_NAME" in
+ # Always match the installed-from grimoire
+ (*:"$installed_grimoire")
+ installed_ver="$(installed_version "$SPELL")"
+ ;&
+ (?*:*)
+ echo "$GRIMOIRE_NAME|${SECTION:--}|$SPELL|${VERSION:--}|${installed_ver:--}"
+ ;;
+ esac
+ done
done
-
- ) | maybe_column -t -s "|"
-
+ ) 2>/dev/null | maybe_column -t -s "|"
+ echo
}
-
#---------------------------------------------------------------------
##
## Shows the versions of spells, both the version in the grimoire and
@@ -1119,42 +1117,26 @@ gaze_show_spell_version_table() {
##
#---------------------------------------------------------------------
gaze_show_version() {
-
- local SPELLS_AND_SECTIONS=$@
- local SPELLS=
- local UNKNOWN=
-
- for spell_or_section in $SPELLS_AND_SECTIONS; do
-
- if codex_find_spell_or_section_by_name $spell_or_section; then
-
- [ -n "$CODEX_FOUND_SECTION" ] &&
- gaze_show_section_version_table $CODEX_FOUND_SECTION 2> /dev/null &&
- echo " "
-
- [ -n "$CODEX_FOUND_SPELL" ] &&
- SPELLS="$SPELLS $CODEX_FOUND_SPELL"
-
+ local spells unknown
+ for spell_or_section in "$@"; do
+ if codex_find_spell_or_section_by_name "$spell_or_section"; then
+ [ -n "$CODEX_FOUND_SECTION" ] &&
+ gaze_show_spell_version_table - \
+ $(codex_get_spells_in_section "$CODEX_FOUND_SECTION")
+ [ -n "$CODEX_FOUND_SPELL" ] &&
+ spells+=("$CODEX_FOUND_SPELL")
else
- UNKNOWN="$spell_or_section $UNKNOWN"
+ unknown+=("$spell_or_section")
fi
-
done
- [ -n "$SPELLS" ] &&
- gaze_show_spell_version_table $SPELLS 2> /dev/null &&
- echo " "
-
-
- if [[ -n $UNKNOWN ]]; then
- message "Unknown Spells or Sections"
- message "--------------------------"
- message "$UNKNOWN"
- return 1
- else
- return 0
- fi
+ gaze_show_spell_version_table - "${spells[@]}"
+ [[ ${#unknown[@]} == 0 ]] && return 0
+ message "Unknown Spells or Sections"
+ message "--------------------------"
+ message "${unknown[*]}"
+ return 1
}
#---------------------------------------------------------------------
@@ -1165,47 +1147,7 @@ gaze_show_version() {
##
#---------------------------------------------------------------------
gaze_show_versions() {
- (
- echo "Grimoire|Section|Spell|Grimoire Version|Installed Version"
- echo "--------|-------|-----|----------------|-----------------"
- for SPELL in "$@"; do
- codex_does_spell_exist $SPELL || continue
- #saving them, since they will be overwritten later
- if tablet_find_spell_dir "$SPELL" tablet; then
- # TODO: change this if it will be stored in the less volatile state/packages file
- tablet_get_grimoire_name $tablet installed_grimoire
- fi
- installed=$(installed_version $SPELL)
-
- for grimoire in $(codex_get_all_grimoires)
- do
- if SPELL_DIRECTORY=$(codex_cache_spell_lookup $SPELL $grimoire)
- then
- codex_set_current_spell $SPELL_DIRECTORY
-
- # old states don't have the name stored so fall back to similar old
- # broken behaviour where the first matching grimoire was used
- [[ -z $installed_grimoire ]] && installed_grimoire=$GRIMOIRE_NAME
-
- if [[ $GRIMOIRE_NAME == $installed_grimoire ]]
- then
- echo "$GRIMOIRE_NAME|$SECTION|$SPELL|$VERSION|${installed:="-"}"
- else
- echo "$GRIMOIRE_NAME|$SECTION|$SPELL|$VERSION|-"
- fi
- else
- # handle also (re)moved spells
- smgl_basename "$grimoire" name
- if [[ $name == $installed_grimoire ]]; then
- echo "$name|-|-|-|$installed"
- else
- echo "$name|-|-|-|-"
- fi
- fi
- done
- done
- ) | maybe_column -t -s "|"
- echo
+ gaze_show_spell_version_table "$(codex_get_all_grimoires)" "$@"
}
#---------------------------------------------------------------------