Re-review 2 of #313:
- n1: the cross-mount guard also matches when one path within its source
ends with the other on a whole folder name (sources listed at different
depths, e.g. 2024/x.png and x.png on a FUSE or noserverino mount).
- n2: after a file's records move and right before its unlink, the held
kept copy must still be the file at its path (fstat of the hold against
os.stat) and the cross-mount guard must still hold; otherwise the file
is kept, its records move back to it, and it counts as not removed.
Re-review of #313, round 2:
- R1: a removal on another device than its kept copy, with the same
size and mtimes within 2 s, is protected when its inode is equal or its
path within its source is the same ("May be the same file reached
through another mount or share"), in the preview and again right before
each unlink. The job holds the kept copy open during the unlink, so on
Windows deleting the kept copy itself through another path fails.
- R2: a file's spellings are found by containment: every configured,
monitored, ComfyUI-output or listed folder whose stat identity is a
folder above the file. Parent spellings of nested sources and case
variants match; favorites move under every listed root holding the
file. Lookups stay index searches.
- m1: a failed unlink's row says the links now name the kept copy.
- m2: a volume with no file ids reads "Can't confirm this is a separate
file on this drive".