aboutsummaryrefslogtreecommitdiff
path: root/tests/test-duet-classify-path.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-06 15:36:25 -0500
committerCraig Jennings <c@cjennings.net>2026-06-06 15:36:25 -0500
commit3b244ba0492fd86fca051713196067f833f34a1b (patch)
tree177b51527c268262cf83b7b55ad6109bfd94761e /tests/test-duet-classify-path.el
parent0155eb670c2f9e072c34671537d95c716a54e011 (diff)
downloadduet-main.tar.gz
duet-main.zip
feat: add the local transfer execution engine and queueHEADmain
Phase 5 turns the pure transfer-specs from Phase 3 into running transfers. duet--run-transfer spawns the backend over make-process, and a serial queue (duet-max-concurrent-transfers, default 1) holds the rest until a slot frees. Each transfer carries a state machine: queued, running, stalled, cancelling, then a terminal done, failed, or cleanup-unverified. The process filter is the hot path, so it stays cheap: it counts output, bounds it to a trailing window, and schedules one coalesced log render. It never refreshes panes. Pane refresh runs once per batch from the sentinel, also coalesced. A move deletes its sources only after the copy exits 0, so a failed move leaves the source untouched. Cancellation kills the process and, for a backend declaring verifiable cleanup, checks the destination for stray temp files before settling on failed versus cleanup-unverified. The process boundary and the temp-file lister are injectable, so the queue and classification logic test against fake results while real rsync gets its own slow integration file. duet-copy, duet-move, duet-mkdir, and duet-delete are wired to the engine. The viewer actions stay stubs until their phase. In-process TRAMP and both-remote rsync still refuse to run here. They land with Phase 6. 172 tests, duet.el at 100% line coverage, compile/lint/complexity green.
Diffstat (limited to 'tests/test-duet-classify-path.el')
0 files changed, 0 insertions, 0 deletions