List a file:// destination through a symlinked directory (closes #296)
check / check (push) Waiting to run
check / check (push) Waiting to run
List and ListStream walked the destination with afero.Walk, which uses Lstat and so reported a symlinked metadata/ or blobs/ directory as one file, while Put, Get and Stat follow the link. The store then listed as empty, and prune removed the local snapshot records and deleted every blob. Both listings now walk a view of the filesystem without its Lstat method, so afero falls back to Stat and enters the link. A listed prefix that is a symlink whose target is missing, such as a link to a volume that is not mounted, fails the listing, as a missing destination directory does. A symlink loop is not detected: it is followed until the system refuses the path for too many levels of links, and the listing fails. Model: opus-5-5
This commit is contained in:
@@ -22,6 +22,17 @@ the tag exists and is exercised; what is left is merging `next` to
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-10-13: Made a `file://` destination list through a symlinked
|
||||
directory ([issue #296](https://git.eeqj.de/sneak/vaultik/issues/296)).
|
||||
A `metadata/` or `blobs/` directory that was a symlink to a directory
|
||||
elsewhere was listed as one file, so the destination store listed as
|
||||
empty while backups and restores still worked through the link.
|
||||
`prune` then removed the local snapshot records and deleted every blob,
|
||||
and `remote info` and `remote nuke` found no blobs. The listings now
|
||||
read through the link as `Get` and `Stat` do. A link whose target is
|
||||
missing, such as one to a volume that is not mounted, or a link
|
||||
pointing back up the tree makes them fail.
|
||||
|
||||
- 2026-10-13: Stopped `remote info` counting a file under `blobs/` that
|
||||
is not a blob as an orphaned blob
|
||||
([issue #295](https://git.eeqj.de/sneak/vaultik/issues/295)). A stray
|
||||
|
||||
Reference in New Issue
Block a user