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:
+45
-21
@@ -300,26 +300,51 @@ function updateall
|
||||
_print_section "Updating flatpak"
|
||||
set -l flatpak_status "skipped"
|
||||
set -l flatpak_color yellow
|
||||
if type -q flatpak and type -q timeout
|
||||
|
||||
if not type -q flatpak
|
||||
set flatpak_status "not installed"
|
||||
set flatpak_color yellow
|
||||
else
|
||||
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 $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 -n "$flatpak_check" # do not know why it works should maybe be test -n "$flatpak_check" instead of test -z "$flatpak_check"
|
||||
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 0
|
||||
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
|
||||
@@ -331,28 +356,27 @@ function updateall
|
||||
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 -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"
|
||||
set flatpak_code $status
|
||||
end
|
||||
else
|
||||
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"
|
||||
end
|
||||
set flatpak_color green
|
||||
else
|
||||
set flatpak_status "failed ($flatpak_code)"
|
||||
set flatpak_color red
|
||||
end
|
||||
end
|
||||
else
|
||||
set flatpak_status "not installed"
|
||||
set flatpak_color yellow
|
||||
end
|
||||
end
|
||||
set -a _labels "flatpak"
|
||||
set -a _status $flatpak_status
|
||||
|
||||
Reference in New Issue
Block a user