Skip to content

Releases: danmestas/go-libfossil

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 17:33
9efb84a

What's Changed

  • test(conformance): sync-protocol conformance suite (#262) by @danmestas in #311
  • test(conformance): sync suite follows the s7.3 uvgimme Read erratum by @danmestas in #313
  • fix(checkout): count only open leaves for forks and fork warnings (#291) by @danmestas in #315
  • fix(branch): refuse an open branch's name on create; close a branch by its newest check-in (#292) by @danmestas in #317
  • fix(repo): resolve version names in fossil's order and forms (#290) by @danmestas in #318
  • fix(blob): fill a phantom in place when its content is stored (#278) by @danmestas in #319
  • fix(delta): refuse a source or target of 2^32 bytes or more in Create (#279) by @danmestas in #320
  • fix(manifest): refuse check-in filenames outside the writer profile (#270) by @danmestas in #321
  • fix(manifest): reject a non-baseline as a delta manifest's baseline (#275) by @danmestas in #322
  • fix(hash): default to sha3 when empty and persist the auto promotion (#274) by @danmestas in #323
  • fix(manifest): write the first check-in's sym-trunk as propagating (#289) by @danmestas in #324
  • fix(manifest): make root check-in mlink derivation idempotent (#294) by @danmestas in #325
  • fix(manifest): refuse a technote with a non-self or non-singleton T-card (#287) by @danmestas in #326
  • fix(manifest): apply the parent (reparent) tag (#286) by @danmestas in #327
  • fix(tag): keep a propagated-tag cancel from deleting newer inherited rows (#288) by @danmestas in #328
  • fix(libfossil): sym- prefix and reserved-prefix refusal in Repo.Tag (#293) by @danmestas in #329
  • fix(deck): judge artifact framing by the rule it breaks, not the Z checksum (#265) by @danmestas in #330
  • fix(deck): tokenize cards as fossil does and enforce per-card arity (#266, #267) by @danmestas in #331
  • fix(deck): validate every artifact-hash and checksum position (#268) by @danmestas in #332
  • fix(deck): enforce the pathname, wiki-name and reserved-name rules (#269) by @danmestas in #333
  • fix(verify): derive Rebuild state through the crosslink sweep (#285) by @danmestas in #336
  • fix(deck): parse D and E timestamps with the full 4.6.4 grammar (#271) by @danmestas in #337
  • fix(deck): re-encode present-but-empty values and keep timestamp precision (#272) by @danmestas in #338
  • fix(deck): enforce card legality, required cards and per-type semantics (#273) by @danmestas in #339
  • fix(xfer): follow the draft's card grammar, not whole-message failure (#299) by @danmestas in #340
  • fix(sync): handle unknown, error and pull-only cards per the draft (#300) by @danmestas in #341
  • fix(sync): frame HTTP requests and replies as fossil's http.c does (#310) by @danmestas in #342
  • fix(manifest): set event.mtime from the newest date tag (#334) by @danmestas in #344
  • fix(verify): rebuild derived state in one transaction (#335) by @danmestas in #345
  • fix(branch): check the open branch name in the check-in transaction (#316) by @danmestas in #346
  • fix(checkout): make WouldFork fossil's commit-time fork check (#347) by @danmestas in #348
  • fix(sync): refuse push and pull cards naming another project (#309) by @danmestas in #353
  • fix(sync): take a uvfile on y alone, without a push card (#296) by @danmestas in #354
  • fix(sync): drop shunned artifacts and never ask for a shunned phantom (#302) by @danmestas in #355
  • fix(sync): send pragma send-private first and keep a private basis private (#307) by @danmestas in #356
  • fix(sync): end client sessions by section 3.7 and keep igot phantoms (#301) by @danmestas in #357
  • fix(sync): exchange server-version and gate SHA3 content by peer release (#303) by @danmestas in #358
  • fix(sync): answer pushed config, ci-unlock and req-clusters (#305) by @danmestas in #359
  • fix(sync): send clone replies as fossil's page_xfer does (#306) by @danmestas in #360
  • fix(sync): apply received unversioned files as fossil does (#308) by @danmestas in #361
  • fix(sync): log in through the x-f-l-c cookie and accept cleartext passwords (#304) by @danmestas in #362
  • fix(sync): let Clone imply Read at the server's read gates (#312) by @danmestas in #363
  • fix(tag): apply bgcolor, user and comment tags to event as fossil does (#343) by @danmestas in #364
  • fix(test): kill fossil server's process group before cleanup (#352) by @danmestas in #365
  • fix(testutil): isolate fossil's global config in tests (#284) by @danmestas in #366
  • fix(sync): server igot handling skips shunned hashes (#349) by @danmestas in #367
  • fix(sync): keep the client's gimme limit as fossil's mxPhantomReq (#350) by @danmestas in #368
  • fix(sync): gate xtable-hash on a direction card (#351) by @danmestas in #369
  • test(conformance): check the -01 drafts of artifact, repo-state and sync by @danmestas in #377
  • fix(deck): accept the full Julian-day grammar of artifact-format-01 4.6.4 by @danmestas in #378
  • fix(manifest): resolve a delta manifest's baseline one level (artifact-format-01 4.7.3) by @danmestas in #379
  • fix(tag): derive the check-in event time from direct date tags only (#372) by @danmestas in #380
  • fix(xfer): treat a payload cut short as its card's handler failure (#373) by @danmestas in #381
  • fix(sync): end card processing on refused writes and logins, count errors as fossil (#374) by @danmestas in #382
  • fix(sync): answer a private gimme with igot HASH 1 for a recent peer (#375) by @danmestas in #383
  • fix(sync): withhold SHA3 unversioned files from a pre-SHA3 server (#303) by @danmestas in #384
  • test(conformance): cover artifact K, delta-lookup and delta-size requirements by @danmestas in #388
  • fix(sync): handle server cards in request order, phantom gimme after push, clone bad cards by @danmestas in #393
  • fix(sync): cover the sync-protocol-01 coverage rows by @danmestas in #394
  • test(conformance): cover the repo-state GAP and PARTIAL rows by @danmestas in #395
  • fix(manifest,hash): verify the R card at commit; reject an unrecognized hash-policy by @danmestas in #396
  • fix(checkout): pick the no-target update target as fossil does; read untagged check-ins as the default branch by @danmestas in #399
  • fix(sync): apply ci-lock and ci-unlock for any requester by @danmestas in #400
  • fix(sync): send the clone reply and cluster igots in place by @danmestas in #401
  • fix(sync): end card processing when a pushed file fails its handler by @danmestas in #402
  • fix(sync): reclassify held artifacts and phantoms from igot by @danmestas in #403
  • fix(sync): stop the client reply loop at a card with no artifact name by @danmestas in #404
  • fix(manifest): link a check-in atop an absent parent despite absent files by @danmestas in #407
  • feat(repo): set the hash policy by name by @danmestas in #408
  • feat(resolve): resolve checkout-relative names and branch-type requests by @danmestas in #409
  • feat(repo): name ...
Read more

v0.11.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 13:33
c1f3fc9

What's Changed

  • test(conformance): repository-state conformance suite (#262) by @danmestas in #295
  • fix(sync): send content only to readers; never follow HTTPS to HTTP (security) by @danmestas in #297
  • chore(release): v0.11.1 changelog by @danmestas in #298

Full Changelog: v0.11.0...v0.11.1

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 01:39
6279ad9

What's Changed

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 18:38
554084e

What's Changed

Full Changelog: v0.9.0...v0.10.0

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 17:41
106274c

What's Changed

  • fix(blob): name new artifacts by the repo's hash-policy by @danmestas in #224
  • fix(db): seed hash-policy so new repos name artifacts like fossil init by @danmestas in #226
  • docs: backfill 0.8.0/0.8.1 and add the 0.9.0 changelog entry by @danmestas in #227

Full Changelog: v0.8.1...v0.9.0

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 30 Jul 15:01
857555e

What's Changed

  • chore: untrack generated and local-only files by @danmestas in #219
  • fix(test): reap fossil servers before temp-dir cleanup; raise unit-test timeout by @danmestas in #220
  • fix(manifest): preserve crosslink failure cause by @danmestas in #222

Full Changelog: v0.8.0...v0.8.1

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 02:39
61cc1dd

What's Changed

  • docs: reconcile CHANGELOG with the 15-tag release history by @danmestas in #181
  • test: build the chain-bound fixture in one transaction instead of ~65k by @danmestas in #182
  • fix: defer cascade-linked check-ins referencing unavailable blobs by @danmestas in #183
  • test: add an opt-in corpus-parity gate against canonical fossil by @danmestas in #191
  • fix: crosslink ticket artifacts and stop warning for ordinary file blobs by @danmestas in #192
  • fix: pin submodules to v0.7.0 instead of an orphaned pseudo-version by @danmestas in #195
  • fix(sync): retry a dropped exchange round instead of aborting the clone by @danmestas in #196
  • fix: derive leaf by canonical's branch rule, in both the sweep and the commit path by @danmestas in #197
  • fix(sync): derive the project code, and write artifact visibility inside the storing transaction by @danmestas in #204
  • ci: gate the js/wasm build on every PR by @danmestas in #205
  • fix: stop tag propagation from crossing branch boundaries by @danmestas in #206
  • refactor(tag): give the three tag-apply paths one propagation helper by @danmestas in #209
  • fix: make authenticated sync interoperate with canonical fossil by @danmestas in #207
  • perf: stop the post-sync crosslink sweep re-examining the whole repository (#202) by @danmestas in #210
  • fix: derive mlink, plink, tagxref and leaf the way canonical fossil does (#193) by @danmestas in #211
  • perf: stop clone re-seeking blob.uuid per F-card and over-allocating delta output (#187) by @danmestas in #212
  • manifest: unify direct and crosslinked mlink derivation by @danmestas in #216
  • perf(sync): reuse received content in crosslink by @danmestas in #217
  • feat(cli): select SQLite driver by build tag by @danmestas in #218

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 16:00
fe62a3d

What's Changed

  • fix: DSN _txlock=immediate to serialize concurrent writers (#33) by @danmestas in #34
  • Fix checkout portability under ncruces by @danmestas in #39
  • Rebrand to go-libfossil + add acknowledgements by @danmestas in #40
  • chore(deps): bump the go_modules group across 2 directories with 1 update by @dependabot[bot] in #42
  • Provision ticket schema at repo creation by @danmestas in #46
  • fix: tolerate NULL event.user/comment in manifest.Log by @danmestas in #47
  • fix: capture executable bit at Add/Manage time and propagate to commit by @danmestas in #48
  • fix: separate blob existence from blob availability (#43) by @danmestas in #52
  • fix: split repository enumeration from ancestry walking by @danmestas in #54
  • fix: make Timeline pagination cursor an exact total order by @danmestas in #62
  • checkout: Update returns UpdateResult so conflicts are visible by @danmestas in #61
  • fix: populate mlink parent columns on the Crosslink check-in path by @danmestas in #63
  • Remove unused UpdateOpts.Force field by @danmestas in #69
  • Remove unused CloneOpts.ProjectCode and ServerCode fields by @danmestas in #77
  • fix: give Timeline its own result type so an Ancestry cursor cannot compile into it by @danmestas in #78
  • checkout: re-stat executable bit at commit time by @danmestas in #80
  • fix: store delta content against a phantomized base instead of discarding it by @danmestas in #83
  • fix: distinguish absent, empty, and valued U-cards in manifest parsing by @danmestas in #73
  • cli: add repo serve command wiring the xfer HTTP server by @danmestas in #72
  • Deltify predecessors on the commit path by @danmestas in #87
  • Enforce card occurrence classes and intra-run ordering by @danmestas in #94
  • fix: clone_seqno is server-to-client only by @danmestas in #96
  • fix: remove StatusOpts, MergeOpts, CheckoutOpts — no call sites by @danmestas in #97
  • Add libfossil version command by @danmestas in #99
  • fix: bound clone batches by output size, not artifact count by @danmestas in #100
  • perf: memoize delta-chain interiors during crosslink by @danmestas in #107
  • fix: never parse a compressed body as cards (#104) by @danmestas in #111
  • content: unify delta-chain walk bound on maxDeltaChainDepth by @danmestas in #115
  • fix: correct go.mod module path to go-libfossil (#76) by @danmestas in #117
  • fix: J/T card escape-encoding symmetry and T-card §4.7.16 validation (#90, #91, #93) by @danmestas in #116
  • fix: correct stale module path broken by concurrent module-rename and #93 merges by @danmestas in #122
  • fix: xfer parse guards — degrade unparseable clone tokens (#95) and reject oversized §4.1 length before zlib (#110) by @danmestas in #124
  • test: route every fossil-binary gate through one REQUIRE_FOSSIL_BIN helper by @danmestas in #125
  • sync: store received wire frames verbatim instead of re-encoding by @danmestas in #132
  • manifest: visit Crosslink candidates in delta-chain order by @danmestas in #126
  • delta: bound Apply growth per-command, cut ~5x allocation overhead by @danmestas in #127
  • clone: emit cfile with stored content per §7.2, not expanded file cards by @danmestas in #131
  • fix: zero-length file commit panic and stale missing-file carry-forward by @danmestas in #128
  • fix: return error when clone stalls with phantoms outstanding by @danmestas in #129
  • db: keep ScanJulianDay's float64 branch exact, close driver-divergence coverage gap by @danmestas in #121
  • xfer: select framing by Content-Type; bound clone rounds by client decode limit by @danmestas in #133
  • manifest: wire AfterDephantomize into the phantom fill path by @danmestas in #130
  • sync: send explicit Content-Length on xfer replies so fossil <=2.23 can clone by @danmestas in #134
  • ci: build all packages so broken imports fail loud by @danmestas in #135
  • deck: complete the §4.3 escape table in FossilEncode/FossilDecode by @danmestas in #137
  • test(sync): guard clone against expanded-file-card wire amplification by @danmestas in #139
  • clone: add --timeout override and make the deadline reliably fire by @danmestas in #144
  • content: add delta-chain depth benchmark for #85 re-measurement by @danmestas in #146
  • checkin: emit renames as a single F-card with the w placeholder by @danmestas in #147
  • ci: gate docs/site Hugo module with a build job by @danmestas in #148
  • sync: emit clone push card after clone_seqno to stop real-client re-clone by @danmestas in #149
  • content: cut sub-64KiB delta-chain expansion allocation ~18x by @danmestas in #150
  • perf: route history-walking expansions through content.Cache by @danmestas in #153
  • sync: retransmit deltas during clone instead of expanding them by @danmestas in #154
  • fix: frame cfile wire payload as fossil on-disk blob [4-byte size][zlib] by @danmestas in #155
  • manifest: fix crosslink's WAL/availability/mlink working-set problems by @danmestas in #158
  • manifest: run leaf/tag repair on interrupted crosslink sweep by @danmestas in #159
  • deck: strip PGP/SSH clearsign framing before VerifyZ by @danmestas in #160
  • manifest: emit delete rows for omitted files and fix rename pid by @danmestas in #163
  • chore: drop go.mod replace directives, unblock release by @danmestas in #161
  • fix: decode sync replies by the wire's real Content-Type, not a hardcoded assumption by @danmestas in #165
  • fix: make the mid-round phantom-fill crosslink cascade honor the clone deadline by @danmestas in #168
  • sync: thread the general sync path's deadline to the phantom-fill crosslink cascade by @danmestas in #169
  • perf: cache prepared statements in db.Querier to stop per-call SQL re-parse by @danmestas in #171
  • ci: pin canonical fossil to 2.28 instead of the distro package by @danmestas in #173
  • perf: batch the phantom-fill crosslink cascade onto a shared content cache by @danmestas in #175
  • ci: warm fossil's global config database once before the test steps by @danmestas in #177
  • perf: bound the delta encoder's hash-collision chain walk by @danmestas in #178

New Contributors

Full Changelog: v0.6.2...v0.7.0

v0.6.3

Choose a tag to compare

@github-actions github-actions released this 13 May 19:10
877292f

Bug fixes

  • Concurrent-writer SQLITE_BUSY race (#33, #34): db.WithTx opened BEGIN DEFERRED, so under WAL two concurrent writers raced the SHARED→RESERVED upgrade and SQLite's deadlock-avoidance returned SQLITE_BUSY immediately — bypassing busy_timeout entirely.

    DSN now sets _txlock=immediate in both db/driver/modernc and db/driver/ncruces drivers so every BEGIN acquires RESERVED upfront. The second concurrent writer blocks at BEGIN (where busy_timeout applies) instead of racing at the upgrade.

    Verified empirically: 50/50 fail without fix, 0/50 with fix.

Downstream impact

Unblocks sesh's --scope=project mode for symmetric-concurrent-write workloads. Sesh consumers should bump to github.com/danmestas/libfossil@v0.6.3 and remove any single-writer caveats from --scope=project documentation.

What's Changed

  • fix: DSN _txlock=immediate to serialize concurrent writers (#33) by @danmestas in #34

Full Changelog: v0.6.2...v0.6.3

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 12 May 23:55
e6d34fb

What's Changed

Full Changelog: v0.6.1...v0.6.2