diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-04 12:04:31 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-04 12:54:59 +0200 |
| commit | 74d1da2755ff8e1a47bda676fab7b84e910ef738 (patch) | |
| tree | e32bcf4a5d752c64255ae779666a504385434813 /CHANGELOG.md | |
| parent | 1f25f2b10d995dd0978d5846e175c9094b69f53f (diff) | |
| download | qtmaildir-74d1da2755ff8e1a47bda676fab7b84e910ef738.tar.gz qtmaildir-74d1da2755ff8e1a47bda676fab7b84e910ef738.zip | |
feat(sync): bring mailsync.sh here, print to stdout, exit truthfully
The reference sync script lived in the companion mailctl project, which
documents that it never calls it: sync and organization are separate
there on purpose. qtmaildir is the only thing that runs it
programmatically, and two of its behaviours were live bugs here, so it
belongs in this repo where the constraints on it are.
It printed nothing a caller could see. Everything was redirected to
$LOGFILE, so MailSync captured an empty stream and the sync log pane
stayed blank, a known limitation carried since 0.1.0. It now writes to
both through tee: cron keeps its log, and the pane has something to show.
It also ended in an unconditional exit 0, discarding statuses it had
already computed. qtmaildir believes that exit code: a failed mbsync
reported success, cleared the unsynced-changes count, and would have
allowed a sync-on-exit to quit over a sync that never happened, which is
exactly the case the exit prompt exists to prevent. It now exits with
mbsync's status, or notmuch's when mbsync succeeded.
The statuses move through files rather than shell variables because the
run block is piped into tee, which puts it in a subshell where an
assignment does not survive.
Verified against stub mbsync and notmuch binaries in a fake HOME, so no
mail or database was touched: output reaches stdout, the log still gets
every line, and a failing mbsync or notmuch produces its own exit code
rather than zero.
Both properties are now recorded in CLAUDE.md, since they exist for this
application's sake and an edit that looks like a cleanup would remove
them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index e09e176..e50b2da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,23 @@ point at which they are stable. ## [Unreleased] -Nothing yet. +### Added + +- **`assets/mailsync.sh`**, the reference sync command, moved here from the + companion `mailctl` project. It never belonged there: `mailctl` does not call + it, while qtmaildir runs it as a subprocess and depends on how it behaves. + Symlink it into `~/bin` rather than copying, so one script serves both cron + and the application. + +### Fixed + +- **The sync log pane stayed empty**, listed as a known limitation since 0.1.0. + The reference `mailsync.sh` redirected all its output to a log file, so the + subprocess printed nothing for the pane to show. It now writes to both. +- **A failed sync reported success.** That script ended in an unconditional + `exit 0`, so qtmaildir could not tell a clean sync from a broken one: it + cleared the unsynced-changes count either way, and would have quit on a + sync-on-exit that had not synced anything. It now exits with the real status. ## [0.7.0] - 2026-08-04 |
