From e12d3d42cb25dc240b8dc0c2caa717f157ba6cf2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 25 Aug 2026 14:27:20 +0000 Subject: [PATCH] fix: robust flatpak timeout handling in updateall - wrap flatpak remote-ls check in timeout 5s with mktemp caching and proper exit code handling (124 = timeout) - fix inverted -n/-z logic and uninitialized flatpak_has_updates causing Missing argument error - distinguish timeout vs generic check failure with clear messages - add timeout 300s guard to flatpak update and handle 124 as update timed out - gracefully degrade when timeout binary missing instead of skipping flatpak entirely - quote temp file paths and handle mktemp failure reliably --- configs/arch_config.fish | 126 +++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/configs/arch_config.fish b/configs/arch_config.fish index 9344616..71a3a35 100755 --- a/configs/arch_config.fish +++ b/configs/arch_config.fish @@ -300,59 +300,83 @@ function updateall _print_section "Updating flatpak" set -l flatpak_status "skipped" set -l flatpak_color yellow - if type -q flatpak and type -q timeout - - set -l flatpak_tmp (mktemp) - timeout 5s flatpak remote-ls --updates >$flatpak_tmp 2>&1 - set -l flatpak_check_code $status - set -l flatpak_check (cat $flatpak_tmp) - rm $flatpak_tmp - - if test $flatpak_check_code -eq 0 - if test -n "$flatpak_check" # do not know why it works should maybe be test -n "$flatpak_check" instead of test -z "$flatpak_check" - set flatpak_has_updates 1 - end - else if test $flatpak_check_code -eq 124 - set flatpak_has_updates 2 - else - set flatpak_has_updates 0 - end - - if test $flatpak_has_updates -eq 2 - echo "flatpak: update check failed" - set flatpak_status "update check failed" - set flatpak_color red - else if test $flatpak_has_updates -eq 1 - echo "flatpak: up to date" - set flatpak_status "up to date" - set flatpak_color green - else - if test -n "$flatpak_check" - echo "Pending flatpak updates:" - printf "%s\n" $flatpak_check - end - flatpak update - set -l flatpak_code $status - if test $flatpak_code -eq 0 - set -l flatpak_recheck (flatpak remote-ls --updates 2>&1) - if test -z "$flatpak_recheck" - if test $flatpak_has_updates -eq 0 - set flatpak_status "updated" - else - set flatpak_status "up to date" - end - else - set flatpak_status "updated" - end - set flatpak_color green - else - set flatpak_status "failed ($flatpak_code)" - set flatpak_color red - end - end - else + if not type -q flatpak set flatpak_status "not installed" set flatpak_color yellow + else + set -l flatpak_tmp (mktemp) + if test $status -ne 0 -o -z "$flatpak_tmp" + echo "flatpak: failed to create temp file" + set flatpak_status "update check failed" + set flatpak_color red + else + set -l flatpak_check_code + set -l flatpak_check + if type -q timeout + timeout 5s flatpak remote-ls --updates >"$flatpak_tmp" 2>&1 + set flatpak_check_code $status + else + flatpak remote-ls --updates >"$flatpak_tmp" 2>&1 + set flatpak_check_code $status + end + set flatpak_check (cat "$flatpak_tmp") + rm -f "$flatpak_tmp" + + # flatpak_has_updates: 0 = pending updates, 1 = up to date, 2 = check failed/timeout + set -l flatpak_has_updates 0 + if test $flatpak_check_code -eq 0 + if test -z "$flatpak_check" + set flatpak_has_updates 1 + else + set flatpak_has_updates 0 + end + else if test $flatpak_check_code -eq 124 + set flatpak_has_updates 2 + else + set flatpak_has_updates 2 + end + + if test $flatpak_has_updates -eq 2 + if test $flatpak_check_code -eq 124 + echo "flatpak: update check timed out (5s)" + else + echo "flatpak: update check failed" + end + if test -n "$flatpak_check" + printf "%s\n" $flatpak_check + end + set flatpak_status "update check failed" + set flatpak_color red + else if test $flatpak_has_updates -eq 1 + echo "flatpak: up to date" + set flatpak_status "up to date" + set flatpak_color green + else + if test -n "$flatpak_check" + echo "Pending flatpak updates:" + printf "%s\n" $flatpak_check + end + set -l flatpak_code + if type -q timeout + timeout 300s flatpak update + set flatpak_code $status + else + flatpak update + set flatpak_code $status + end + if test $flatpak_code -eq 124 + echo "flatpak: update timed out (300s)" + set flatpak_status "update timed out" + set flatpak_color red + else if test $flatpak_code -eq 0 + set flatpak_status "updated" + set flatpak_color green + else + set flatpak_status "failed ($flatpak_code)" + set flatpak_color red + end + end + end end set -a _labels "flatpak" set -a _status $flatpak_status