Artifact a553711d3b1c31fe4398e7cf10074ea312f348b57db3f21dd389a1e994df08b4:
- File
internal/checkout/perm.go
-
2026-10-19 18:27:23
— part of check-in
[8cad365e82]
on branch feat/submanifest-reader
— fix(checkout): write symlink entries as fossil does, so a fresh checkout extracts
Since the scan began recording islink and chnged 7/9, Create followed by Extract without Force failed on any repository with an "l" file: the file was missing, the scan read it as UNLINK, and the missing-file skip only covered plain edits.
Extract and Update now write a symlink entry as fossil's vfile_to_disk does: as a symlink to the blob content while allow-symlinks is on and the storage can make links, otherwise as a plain file holding the target. A symlink is deleted before a file is written over it, and setMergedMode leaves symlinks and directories alone, as file_setexe does. Extract's missing-file skip covers mode changes too, so the first Extract after Create plays fossil's open whatever the entry.
With allow-symlinks off, fossil itself reports such a file UNLINK and its checkout refuses without --force; Extract keeps that behavior, and an interop test pins it against fossil's open in both modes.
ScanENotFile no longer refuses a directory at a pending add or removal recorded with chnged=0, matching the else-if in vfile_check_signature.
Tracked in #449 (user: [email protected], size: 6466) [annotate] [blame] [check-ins using]
-
2026-10-19 18:29:32
— part of check-in
[6708292b55]
on branch feat/submanifest-reader
— Merge branch 'fix/scan-symlink-extract' into feat/submanifest-reader
# Conflicts: # internal/checkout/update.go (user: [email protected], size: 6466) [annotate] [blame] [check-ins using]
-
2026-10-19 18:27:23
— part of check-in
[8cad365e82]
on branch feat/submanifest-reader
— fix(checkout): write symlink entries as fossil does, so a fresh checkout extracts