9a505aa7

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Fix watch crash on attachment in nonexistent directory

When an attachment's path points into a directory that does not exist (for
example because of a typo), checkAttachment tried to list that directory with
listDirRel to suggest similar filenames, which threw an uncaught IO exception
(getDirectoryContents:openDirStream: does not exist). The watch loop only
catches ExitCode, so this crashed the whole watch process.

Wrap the directory listing in forgivingAbsence so a nonexistent parent
directory simply yields no suggestions, and the normal CE_MISSING_ATTACHMENT
error is reported instead.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 2s 2s 2s 0s
Eval 2s 49s 49s 51s 0s
Build 6s 13m29s 4m14s 4m20s 0s
Suite 0s 14m21s 4m20s 4m20s 0s

Timeline

0s20s40s1m1m20s1m40s2m2m20s2m40s3m3m20s3m40s4m4m20s