diff options
| author | Luke Smith <luke@lukesmith.xyz> | 2026-06-29 23:14:04 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-06-29 23:14:04 -0400 |
| commit | 1b98bbc3be3252b1e37b86434ee9c209b8b4165f (patch) | |
| tree | 36adf2afc0d0ca6bffff977210910c6add64a44c | |
| parent | 18d6f4b2f70e49f66ac0935facb067e09e8c953c (diff) | |
| parent | 3dc1ee678bd2631e23c93b5777cdfafb28da8f34 (diff) | |
Merge pull request #1028 from jlucas8/error-handling
Handle sync errors (set exit code accordingly)
| -rwxr-xr-x | bin/mailsync | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/bin/mailsync b/bin/mailsync index 7114836..7bca2d0 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 |
