Skip to content
go-libfossil Timeline
Login

Timeline

50 ancestors of 5d727706ddd31a54

2026-10-20
17:12
fix(sync): retain raw sparse provenance across rebuilds check-in: 5d727706dd user: [email protected] tags: feat/submanifest-reader, main, trunk
17:01
Merge sparse transfer with rebuild-safe compaction and schema guards check-in: a16e178c81 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:00
Merge commit '00162b8' into feat/submanifest-reader check-in: e73fd9e276 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:58
test(conformance): distinguish subtree classification from writer support check-in: 440f271b07 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:58
test(sparse): preserve compaction provenance across rebuild and sync

Exercise mixed held and nested missing S siblings after clearing and rebuilding derived tables. Repeated compaction preserves holdings and elided identities; ordinary sync must not request the rebuilt elided artifacts. check-in: 29a11b0aa8 user: [email protected] tags: feat/submanifest-reader, main, trunk

16:56
Merge commit 'bc7af6d' into feat/submanifest-reader check-in: 6edcdc4e4d user: [email protected] tags: feat/submanifest-reader, main, trunk
16:54
fix(content): compact healthy partial trees using shared provenance

Use raw cone references while independently verifying held bytes. Preserve leaves and nonterminal paths so missing descendants keep their range proofs. Exercise missing S nodes, stale derived indexes, and cancellation after an observed demotion. check-in: 55b3ca7155 user: [email protected] tags: feat/submanifest-reader, main, trunk

16:54
feat(sync): fetch widened cone policy through an explicit peer check-in: 293300a722 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:51
fix(content): import raw sparse cone reference classification

Import content-only changes from ab9f98d845b8ff29fedea32ac65561959c564fd4, retaining optional forumpost table handling. check-in: 5220dbc3f3 user: [email protected] tags: feat/submanifest-reader, main, trunk

16:43
Merge commit 'e913b16' into feat/submanifest-reader check-in: a3f11a2baf user: [email protected] tags: feat/submanifest-reader, main, trunk
16:40
test(manifest): demonstrate sparse parent pin ambiguity check-in: 00784f9384 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:40
fix(sparse): infer partial tree provenance from raw artifacts check-in: d50ca873b3 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:34
test(manifest): expose sparse final-merge conflict check-in: 3975828d27 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:32
test(manifest): pin sparse boundary witness sizes check-in: 554db00b39 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:31
test(manifest): expose sparse canonical partition conflict check-in: 4312d7724d user: [email protected] tags: feat/submanifest-reader, main, trunk
16:27
style: format transfer flags and storage forwarding methods check-in: 5a53dae34f user: [email protected] tags: feat/submanifest-reader, main, trunk
16:25
Merge commit '575d5e3' into feat/submanifest-reader check-in: 0cf8b7a09b user: [email protected] tags: feat/submanifest-reader, main, trunk
16:24
Merge commit '0938087' into feat/sparse-transfer check-in: bed21ff045 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:21
test(conformance): register sparse compaction with explicit remaining gaps check-in: e7477e64f8 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:20
Merge commit 'f2c70bd' into feat/submanifest-reader check-in: e2829629bd user: [email protected] tags: feat/submanifest-reader, main, trunk
16:20
fix(content): tolerate repositories without the forum table check-in: 7a12c245df user: [email protected] tags: feat/submanifest-reader, main, trunk
16:19
test(content): prove compaction reader snapshots and local delta closure check-in: 6b1244bac2 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:18
refactor(repo): hold sparse compaction public surface pending review check-in: 84c5070f16 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:18
feat(sync): filter sparse receives without losing shared blobs or delta bases check-in: 9b60d9b691 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:17
fix(content): keep forum and cherry-pick dependencies dense check-in: 6fcada6c23 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:16
feat(repo): expose explicit sparse store compaction check-in: c18b7fba43 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:13
docs: keep feature notes above the unchanged v0.13 release check-in: ea92f1c237 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:13
test(sparse): prove compaction closures rollback and recovery check-in: 3fdb608c79 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:10
feat(sync): scope flat clone content and reject uncovered sparse origins check-in: 6a22fdc165 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:08
fix(content): retain structural phantoms and transitive delta bases check-in: 097e8fa156 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:02
feat(content): compact sparse file holdings transactionally check-in: 91f8ae67bc user: [email protected] tags: feat/submanifest-reader, main, trunk
16:02
feat(sync): encode and validate sparse cone request pragmas check-in: 5c1fbd5ece user: [email protected] tags: feat/submanifest-reader, main, trunk
16:01
Merge main release fixes while preserving feature ticket coverage check-in: 67c2af8525 user: [email protected] tags: feat/submanifest-reader, main, trunk
15:58
Merge commit '8961b59' into feat/sparse-store check-in: dd6f1125ed user: [email protected] tags: feat/submanifest-reader, main, trunk
04:31
chore(release): v0.13.0 changelog (#458) check-in: ae2704ef94 user: [email protected] tags: main, trunk, v0.13.0
03:15
fix(manifest): honor fossil's optional ticket columns (#456)

* test(manifest): cover ticket schemas without fossil's optional columns

Fossil treats the ticket table, ticket.tkt_ctime, the ticketchng table, ticketchng.tkt_rid and ticketchng.tkt_user as optional. Each schema here must derive the rows fossil rebuild derives; all fail today.

* fix(manifest): honor fossil's optional ticket columns

Port ticket_insert and ticket_rebuild_entry's schema probes from src/tkt.c: the ticket table, tkt_ctime, the ticketchng table, tkt_rid and tkt_user are optional, a change row is written only when it has a field or bookkeeping column to fill, fields stored in both tables are copied from the ticket row, and baseline columns record the assigning rid. Rebuilding fossil's own repository failed on its missing tkt_user.

* docs(changelog): note optional ticket columns fix

* test(manifest): pin ticket append to an unset field, baselines and shared columns

The corpus now appends to a field no artifact set, to a field with a baseline column, and to a field stored in both tables, so the comparison against fossil rebuild covers each branch of the append path. check-in: 1f46e25556 user: [email protected] tags: main, trunk

03:01
Merge remote-tracking branch 'origin/main' into feat/submanifest-reader

# Conflicts: # internal/checkout/vfile.go check-in: 741864259c user: [email protected] tags: feat/submanifest-reader, main, trunk

02:58
fix(cli): match PATH as fossil does; run pragmas in a fixed order (#457)

* fix(cli): match PATH as fossil does; run pragmas in a fixed order

log --path, cat --at and diff drop a leading ./, a trailing / and doubled or /./ separators, and compare names with the repository's case-sensitive setting, fossil's platform default when unset. Not found stays exit 2, where fossil exits 1; the docs now say so. SettingBoolean moves to internal/repo, shared by sync and checkout.

Opening a repository runs every pragma in a fixed order, not only busy_timeout first.

Tracked in #451

* feat(cli): document and pin repo new for embedding apps

repo new takes the path from -R as the other embedding commands do, refuses a missing parent directory with a message naming it, and is documented in the embedding contract with its output and exit statuses. Tests pin each behaviour and that stock fossil opens the result.

Tracked in #451

* docs(cli): say how ../x, absolute paths and the global case-sensitive setting behave

Tracked in #451 check-in: 8de2ae751d user: [email protected] tags: main, trunk

02:48
fix(checkout): restore the database/sql import the merge dropped check-in: ab7f1cde7b user: [email protected] tags: feat/submanifest-reader, main, trunk
02:45
Merge branch 'feat/submanifest-reader' into feat/sparse-store check-in: e4f56e44a9 user: [email protected] tags: feat/submanifest-reader, main, trunk
02:40
Merge branch 'fix/revert-swap-chain' into feat/submanifest-reader

# Conflicts: # internal/checkout/revert.go check-in: 32155296d0 user: [email protected] tags: feat/submanifest-reader, main, trunk

02:37
Merge branch 'fix/symlink-write-paths' into feat/submanifest-reader check-in: 79679cc3fa user: [email protected] tags: feat/submanifest-reader, main, trunk
02:09
Merge branch 'docs/repin-00' into feat/submanifest-reader check-in: d868c1b189 user: [email protected] tags: feat/submanifest-reader, main, trunk
02:08
conformance: re-pin the three drafts to their -00 names

zit check-in 68a3f76cb7 renames the artifact-format, repo-state and sync-protocol drafts from -01 to -00 in their headers, cross-references and reference entries, and retitles each Changes appendix "Changes in This Revision". No normative text changed and no section number moved.

The pinned copies take zit's file names, the requirement tables pin the new hashes, and the comments, tests and docs that cited the -01 drafts cite the -00 ones. The refresh script copies every draft under its own name. The sparse-cone copy is re-pinned to d497c2432f, whose text is unchanged. Coverage counts are identical before and after. check-in: 245a0ed306 user: [email protected] tags: feat/submanifest-reader, main, trunk

01:42
test(stash): fossil and go both refuse to merge a repointed symlink check-in: aec658f5a9 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:42
fix(stash): do not merge a changed symlink, as fossil's stash apply does

Where a symlink was stashed or is now on disk, Apply writes the stashed file only when both are links and the link still holds the baseline. Otherwise it leaves the file and its row alone and reports it, as fossil's stash_apply prints "Cannot merge symlink" and counts a conflict. Apply and Pop now return the files they did not merge; Pop still drops the entry, as fossil's does. check-in: 2ee5684bf3 user: [email protected] tags: feat/submanifest-reader, main, trunk

01:40
test(stash): pop over a changed symlink does not merge it (red) check-in: d19a7ecca7 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:36
Merge remote-tracking branch 'origin/main' into feat/submanifest-reader

# Conflicts: # CHANGELOG.md # internal/fsltype/julian_test.go check-in: 63f78ed893 user: [email protected] tags: feat/submanifest-reader, main, trunk

01:30
Merge branch 'docs/drafts-without-errata' into feat/submanifest-reader check-in: 27732942f1 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:30
test: read isLink as an integer under both drivers check-in: 179069251f user: [email protected] tags: feat/submanifest-reader, main, trunk
01:30
feat(cli): checkout-free snapshot, per-path log, cat --at and diff --json (#453)

* feat(cli): checkout-free snapshot, per-path log, cat --at and diff --json

repo snapshot commits one file's bytes onto trunk with no checkout, a no-op when they equal the tip. repo log --path lists the check-ins that changed a path, repo cat --at reads a file as a version holds it, and repo diff --json A B [PATH] diffs two versions. Exit 2 means not found. A snapshot re-checks the check-in stamp inside its write transaction and retries, so concurrent processes build one linear trunk.

Tracked in #451

* test(cli): cover log across a rename; order exit statuses in the docs

Tracked in #451

* fix(db): convert Julian days to the millisecond SQLite gives

log --json printed most check-in times 1ms before their D card: db.julianToTime truncated where SQLite's date.c rounds with (sqlite3_int64)(r*86400000.0+0.5). fsltype.MillisFromJulianDay now does exactly that, JulianToTime and ScanTime use it, and ScanTime rounds the time.Time ncruces hands back to the millisecond as well.

* fix(cli): print usage errors on stderr and pin their exit status 80

The documented status was right for the binary; go run turns it into 1. Usage text went to stdout, so an embedder reading stdout saw it on a failure. The doc now says which status a measurement under go run shows, and a test pins 80 for an unknown flag, a missing flag or argument and an unknown subcommand.

* fix(cli): refuse a snapshot path holding a control byte or a reserved name

validateRepoPath now applies fossil's own rules for a new file name: file_is_simple_pathname in strict form (deck.StrictPathname), no byte below 0x20, and file_is_reserved_name, whose existing port in deck is exported as IsReservedName. Each refusal exits 1 and names the reason.

* fix(cli): diff A B PATH matches fossil's PATH rules

A PATH in neither version printed [] and exited 0; fossil diff --from A --to B fails with "not found". It now exits 2 (not found), and PATH also matches a directory, as fossil's file_dir_match does. The test runs fossil on the same repository as the oracle.

* fix(cli): refuse a snapshot into a repository with no main-branch check-in

When the main branch resolved to nothing, snapshot took the repository for empty and committed a second root beside the existing history. It now treats only a repository with no check-ins as empty, and otherwise fails at exit 1 naming the branch.

* test(cli): compare log across a rename with fossil finfo

The rename test built its history through manifest.Checkin and checked our own idea of the result. It now builds the history with the fossil binary and compares repo log with fossil finfo on the same repository: both stop a name's history at the rename. The doc tells an embedder how to follow a file across renames, and where log differs from finfo.

* fix(db): set busy_timeout before any other pragma on open

The drivers build the DSN's _pragma parameters from a map and run them in that order, so journal_mode or foreign_keys often ran before busy_timeout. An open while another process held a lock then failed at once with "database is locked" instead of waiting: one cause of TestSnapshotConcurrentProcesses failing under -tags test_ncruces.

* fix(cli): hold the write lock from snapshot's read of the tip to its commit

Under -tags test_ncruces, TestSnapshotConcurrentProcesses failed 8 of 20 runs. Besides the open-time lock error fixed in db, a snapshot read the tip's manifest outside any transaction while another process's check-in re-deltaed it, and failed with a hash mismatch. A snapshot now runs in one bound write transaction from the read of the tip to its commit, so no other check-in can land in between; the optimistic retry loop it replaces is gone. check-in: 90345545d3 user: [email protected] tags: main, trunk