summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Smith <luke@lukesmith.xyz>2026-06-29 23:14:04 -0400
committerGitHub <noreply@github.com>2026-06-29 23:14:04 -0400
commit1b98bbc3be3252b1e37b86434ee9c209b8b4165f (patch)
tree36adf2afc0d0ca6bffff977210910c6add64a44c
parent18d6f4b2f70e49f66ac0935facb067e09e8c953c (diff)
parent3dc1ee678bd2631e23c93b5777cdfafb28da8f34 (diff)
Merge pull request #1028 from jlucas8/error-handling
Handle sync errors (set exit code accordingly)
-rwxr-xr-xbin/mailsync29
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