Skip to content
go-libfossil Timeline
Login

Timeline

8 descendants of e9b2985d62d22a45

2026-10-19
23:13
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. leaf check-in: 363ee3b9df user: [email protected] tags: feat/cli-snapshot, main, trunk

23:10
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. check-in: 69c95d4419 user: [email protected] tags: feat/cli-snapshot, main, trunk

23:06
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. check-in: 16d2c51f61 user: [email protected] tags: feat/cli-snapshot, main, trunk

23:02
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. check-in: e695dd75c7 user: [email protected] tags: feat/cli-snapshot, main, trunk

23:00
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. check-in: c9268f5571 user: [email protected] tags: feat/cli-snapshot, main, trunk

22:57
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. check-in: 3cc3cce1fe user: [email protected] tags: feat/cli-snapshot, main, trunk

22:55
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. check-in: 8fdb632783 user: [email protected] tags: feat/cli-snapshot, main, trunk

22:51
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. check-in: d17640749f user: [email protected] tags: feat/cli-snapshot, main, trunk

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

Tracked in #451 check-in: e9b2985d62 user: [email protected] tags: feat/cli-snapshot, main, trunk