From 6b65665eca8a4b36b0b6eae4d761fccd7b4c1fc4 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 26 Apr 2026 01:08:50 -0500 Subject: refactor: extract get_raid_level fzf preview into raid.sh helper `get_raid_level()` carried a 98-line inline fzf `--preview` shell snippet that contained five nearly-parallel `case` branches emitting per-level preview text, plus three exported variables (`RAID_DISK_COUNT`, `RAID_TOTAL_GB`, `RAID_SMALLEST_GB`) just to pass values into the fzf preview subshell. The inline shell-in-shell had no syntax highlighting, no shellcheck on the inner snippet, and any edit to preview copy meant editing inside a single-quoted argument. I extracted the per-level text into a new `raid_preview(level, disk_count, total_gb, smallest_gb)` helper in `lib/raid.sh`. It reuses the existing `raid_fault_tolerance` and `raid_usable_bytes` primitives for the data lines instead of redoing the arithmetic inline. That keeps the math in one place. The fzf `--preview` argument is now a one-liner that calls `raid_preview` with the sizing values, and the env-var exports are gone. `export -f raid_preview raid_fault_tolerance raid_usable_bytes` makes the functions visible in fzf's preview subshell. I verified this against a fresh `bash -c` subshell, which is what fzf spawns internally. `get_raid_level()` shrinks from 144 to 49 lines. Preview text is now bats-tested. Added 8 unit tests across the 5 RAID levels (headline, fault-tolerance line, computed usable space), mixed-size handling for mirror (smallest disk, not average), unknown level returning 1 with empty output, and a sanity loop confirming every valid level produces non-empty output. No behavior change. The preview pane shows the same text, the same level options, the same selected output. The pure logic in `lib/raid.sh` is unchanged. --- installer/lib/raid.sh | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) (limited to 'installer/lib') diff --git a/installer/lib/raid.sh b/installer/lib/raid.sh index 3e28177..6eccfa7 100644 --- a/installer/lib/raid.sh +++ b/installer/lib/raid.sh @@ -68,3 +68,122 @@ raid_fault_tolerance() { *) return 1 ;; esac } + +############################# +# Preview text +############################# + +# Print preview text for a single RAID level. Used by get_raid_level() +# in the fzf preview pane. Calls raid_fault_tolerance and +# raid_usable_bytes for the data lines so the math stays in one place. +# Numeric arguments are unit-agnostic — pass GB if you want GB out. +# +# Usage: raid_preview LEVEL DISK_COUNT TOTAL_GB SMALLEST_GB +# Returns 1 for unknown level (no output). +raid_preview() { + local level=$1 count=$2 total=$3 small=$4 + local tol usable + + tol=$(raid_fault_tolerance "$level" "$count") || return 1 + usable=$(raid_usable_bytes "$level" "$count" "$small" "$total") || return 1 + + case "$level" in + mirror) + cat <