Fix firmware variant prompt TTY detection

This commit is contained in:
w1n5t0n 2026-04-16 00:44:52 +09:00
parent 074d4b3005
commit d1c12dd2b1
2 changed files with 12 additions and 6 deletions

View file

@ -2,3 +2,5 @@
{"id":"int-55a0a37d","kind":"field_change","created_at":"2026-04-15T15:32:17.624534929Z","actor":"w1n5t0n","issue_id":"meml-kx6a","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Added firmware helper scripts and updated docs to the RP2350/C++20/O3 build flow"}}
{"id":"int-c4271206","kind":"field_change","created_at":"2026-04-15T15:35:23.153751063Z","actor":"w1n5t0n","issue_id":"meml-efb2","extra":{"field":"status","new_value":"in_progress","old_value":"open"}}
{"id":"int-4ab84a6f","kind":"field_change","created_at":"2026-04-15T15:37:55.547397813Z","actor":"w1n5t0n","issue_id":"meml-efb2","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Added variant-aware firmware build selection and interactive prompting"}}
{"id":"int-6deafb72","kind":"field_change","created_at":"2026-04-15T15:44:14.681880459Z","actor":"w1n5t0n","issue_id":"meml-zbbs","extra":{"field":"status","new_value":"in_progress","old_value":"open"}}
{"id":"int-fd7690f3","kind":"field_change","created_at":"2026-04-15T15:44:48.605669713Z","actor":"w1n5t0n","issue_id":"meml-zbbs","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Prompt variant selection now uses /dev/tty so interactive shells are detected correctly"}}

View file

@ -141,6 +141,7 @@ choose_firmware_variant() {
local resolved=""
local variant
local choice
local tty_fd=""
load_firmware_variants
@ -158,30 +159,33 @@ choose_firmware_variant() {
exit 1
fi
if [[ -t 0 && -t 1 ]]; then
echo "Select a firmware variant to build:"
if exec {tty_fd}<>/dev/tty 2>/dev/null; then
printf 'Select a firmware variant to build:\n' >&"$tty_fd"
local idx=1
for variant in "${FIRMWARE_VARIANTS[@]}"; do
if [[ "$variant" == "$ACTIVE_FIRMWARE_VARIANT" ]]; then
echo " $idx) $(variant_alias "$variant") ($variant, current)"
printf ' %d) %s (%s, current)\n' "$idx" "$(variant_alias "$variant")" "$variant" >&"$tty_fd"
else
echo " $idx) $(variant_alias "$variant") ($variant)"
printf ' %d) %s (%s)\n' "$idx" "$(variant_alias "$variant")" "$variant" >&"$tty_fd"
fi
idx=$((idx + 1))
done
while true; do
read -r -p "Variant number or name: " choice
printf 'Variant number or name: ' >&"$tty_fd"
IFS= read -r -u "$tty_fd" choice
if [[ "$choice" =~ ^[0-9]+$ ]]; then
if (( choice >= 1 && choice <= ${#FIRMWARE_VARIANTS[@]} )); then
exec {tty_fd}>&-
printf '%s\n' "${FIRMWARE_VARIANTS[choice-1]}"
return 0
fi
elif resolved="$(resolve_firmware_variant "$choice" 2>/dev/null)"; then
exec {tty_fd}>&-
printf '%s\n' "$resolved"
return 0
fi
echo "Invalid selection. Enter a number from the list or a variant name."
printf 'Invalid selection. Enter a number from the list or a variant name.\n' >&"$tty_fd"
done
fi