Repository navigation
Shellhand 0.0.4
An empty file can be carried. A zero-byte file — a lock file, a .keep, a
log that had just been rotated — came back as "0 of 0 bytes arrived" and was
simply uncarryable, in every release up to 0.0.3. The download side could not
tell "the server said zero" from "the server would not say" and had to treat
both as a failure. It can tell now, and a size the server does give has to
match exactly, zero included.
A file session that dies no longer takes the app with it. When the ssh
process behind a transfer went away, the write that noticed it raised an error
from underneath Foundation of a kind nothing in Swift can catch — so the app
vanished instead of saying the session had ended. The message it was always
meant to show now actually arrives, whether the far end closed or simply
stopped listening.
Nothing else is visible from the outside. The suite went from 315 checks to
383, and the SFTP conversation is now held against a server written in Swift
inside the test process — one that can misbehave on purpose, answering a read
with fewer bytes than its own listing promised, or replying to a request
nobody made. A real server will not do either on request, and that is what
turned up the empty-file bug on its first run. The host-key question and a
terminal session's own bookkeeping are checked without a pty now, and a file
pane's derived values without connecting to anything.