Skip to content
go-libfossil Check-in [6708292b55]
Login

Check-in [6708292b55]

Overview
Comment:Merge branch 'fix/scan-symlink-extract' into feat/submanifest-reader

# Conflicts: # internal/checkout/update.go

Timelines: family | ancestors | descendants | both | main | trunk | feat/submanifest-reader
Files: files | file ages | folders
SHA3-256: 6708292b550b8282e513574f8fb5a0e33a9c4925b3940489b0fe2b0d3b2a05fd
User & Date: [email protected] on 2026-10-19 18:29:32.975
Original User & Date: [email protected] on 2026-10-19 18:29:33.000
Other Links: branch diff | manifest | tags
Context
2026-10-19
18:29
Merge branch 'feat/cones' into feat/submanifest-reader check-in: 1a17a3defe user: [email protected] tags: feat/submanifest-reader, main, trunk
18:29
Merge branch 'fix/scan-symlink-extract' into feat/submanifest-reader

# Conflicts: # internal/checkout/update.go check-in: 6708292b55 user: [email protected] tags: feat/submanifest-reader, main, trunk

18:27
Merge branch 'fix/receipt-followups' into feat/submanifest-reader check-in: 41ff5d315a user: [email protected] tags: feat/submanifest-reader, main, trunk
18:27
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 check-in: 8cad365e82 user: [email protected] tags: feat/submanifest-reader, main, trunk

Changes