From 3dc1ee678bd2631e23c93b5777cdfafb28da8f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lucas?= Date: Tue, 7 Oct 2025 23:07:14 +0100 Subject: [PATCH] handle sync errors - syncandnotify() aborts early if mbsync or mpop fails - mailsync aborts early (exit code 1, before notmuch) if all syncs fail --- bin/mailsync | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/bin/mailsync b/bin/mailsync index 3a681f0..25e2e6e 100755 --- a/bin/mailsync +++ b/bin/mailsync @@ -58,7 +58,7 @@ syncandnotify() { case "$1" in imap) mbsync -q "$2" ;; pop) mpop -q "$2" ;; - esac + esac || return 1 new=$(find\ "$HOME/.local/share/mail/$2/"[Ii][Nn][Bb][Oo][Xx]/new/ \ "$HOME/.local/share/mail/$2/"[Ii][Nn][Bb][Oo][Xx]/cur/ \ @@ -100,15 +100,34 @@ else done || echo "error $arg"; done)" fi +pids= # PIDs of backgrounded subshells +count=0 # number of accounts in $tosync +failed=0 # number of failed sync attempts for account in $tosync; do + count=$((count+1)) case $account in - Channel*) syncandnotify imap "${account##* }" & ;; - account*) syncandnotify pop "${account##* }" & ;; - error*) echo "ERROR: Account ${account##* } not found." ;; + Channel*) + syncandnotify imap "${account##* }" & + pids="$pids $!" + ;; + account*) + syncandnotify pop "${account##* }" & + pids="$pids $!" + ;; + error*) + echo "ERROR: Account ${account##* } not found." + failed=$((failed+1)) + ;; esac done -wait +IFS=' ' +for pid in $pids; do + wait $pid || failed=$((failed+1)) +done + +# Abort if no account sync succeeded +[ "$count" -gt "$failed" ] || exit 1 notmuch new --quiet