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
This commit is contained in:
Your Name
2026-08-25 14:27:20 +00:00
parent deb879b6c4
commit e12d3d42cb
+75 -51
View File
@@ -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