Skip to content
zit Timeline
Login

Timeline

50 ancestors of 1ed38cab8a330815

2026-11-08
04:02
log for a path takes --offset, as Fossil's finfo spells it, and --cursor, the daemon's cursor, returning the next one in -F json; a check-in's entry for one file is found by searching its manifest instead of parsing it whole, and JSON rows take user and comment from derived state, so a cursor page of a deep history costs tens of milliseconds check-in: 1ed38cab8a user: dmestas tags: trunk
03:00
annotate finds a file's versions from the file-history index and walks only as far as -n or the nearest cached version needs, and a repository lookup that scanned the whole image per call builds a table instead, so annotate -n 50 on a 644 MB store costs 50 ms instead of 38 s check-in: 19bcb02c0c user: dmestas tags: trunk
01:44
The line diff and merge3 size every buffer from the line counts up front, so their allocations depend only on the input check-in: 501d2ba05f user: dmestas tags: trunk
01:18
Every line diff in zit, from diff and its line counts to annotate and merge, is a port of Fossil's diff.c line diff (D. Richard Hipp), replacing the patience and Myers engines, so zit aligns repeated lines as Fossil does and annotate credits only the lines a check-in's diff adds; the blame cache and line-count cache are rebuilt check-in: 382fad4bad user: dmestas tags: trunk
2026-11-07
23:33
annotate keeps a per-file blame cache of recently annotated versions and starts its walk from the nearest cached ancestor, so annotating a tip after a new commit costs tens of milliseconds instead of seconds; an answer that depended on a missing parent, a gap, a limit or a policy absence is never cached check-in: a1c2a0fd4d user: dmestas tags: trunk
22:21
log for a path reads content only for the rows on the page, deciding the rest from the file index, so a 200-row page of a 2,000-version history costs tens of milliseconds; annotate -n N stops after N versions of the file as Fossil's annotate does, leaving older lines unattributed check-in: 3b7445b9cb user: dmestas tags: trunk
20:28
Release 0.12.1 check-in: e5e40bc894 user: dmestas tags: trunk, version-0.12.1
20:02
annotate frees each version once nothing still reads it and bounds its content cache, so a 29,000-line file over 1,600 check-ins peaks at 76 MB instead of 2.7 GB; log for a path lists newest first by check-in time, ties broken as timeline does, so -n and the daemon's cursor page the history without repeats or gaps check-in: bcda930fb8 user: dmestas tags: trunk
19:00
ls --long takes a file's size from its frame and its class from the recorded memo, as Fossil's ls -v reads blob.size, rebuilding a file only when its class is unknown; zit verify, not ls, proves content readable check-in: 6aba9adfd9 user: dmestas tags: trunk
17:49
The 0.12.0 notes give the forge's measured first-command rebuild costs, which land on whichever command comes first check-in: 5a94678fe8 user: dmestas tags: trunk
16:32
Release 0.12.0 check-in: 9fd8bf44bd user: dmestas tags: trunk, version-0.12.0
16:06
The log index and the file-history index check their contents in 4 KiB blocks as a call reads them, behind a header and block table checked at open, so an open no longer checksums whole files; a damaged block is repaired from the log, and a log that cannot be rescanned fails as an unreadable store; the file index gains a path table so a lookup bisects check-in: b377071cb2 user: dmestas tags: trunk
13:22
log for a path reads each sub-manifest node through the walk's plaintext cache and parses only the line that decides the descent, so a one-shot log of 20 versions on a 42k-file tree store costs about 3 ms instead of 11 check-in: 5aea2fedb9 user: dmestas tags: trunk
12:29
A diff between two check-ins walks both trees together and skips every sub-manifest both share by hash, so a one-file diff on a 42k-file tree store costs about 3 ms instead of 83; used by diff, the daemon's diff and timeline -v check-in: 3d9d26ef9b user: dmestas tags: trunk
03:02
Release 0.11.0 check-in: b182f0e6c1 user: dmestas tags: trunk, version-0.11.0
02:39
Sync and pull open the store before reading leaves for the fork report, so a torn last frame left by a crash is repaired first; the simulator counts a forked sync or pull as success check-in: 5da8555024 user: dmestas tags: trunk
01:41
A no-op sync or pull does work in proportion to what changed: nothing is persisted when nothing arrived, the store is opened once for its settings, resolved clusters and outstanding sub-manifest references are kept in sidecars checked against the log, and fork leaves come from the cached view, so a no-op sync at 42k files costs about 7 ms of CPU instead of 476 check-in: 645e0a6060 user: dmestas tags: trunk
01:21
A process reads and checks its .zit-checkout container once and serves every section from those bytes, and annotate opens the repository the fast way, so info, cat and annotate cost about a millisecond less at 42k files check-in: 0856fc67a4 user: dmestas tags: trunk
00:14
The store-lock e2e asks storelock for the in-process refusal instead of reopening the store, so the runner no longer prints a lock notice; the test runner fails any test that ends holding a store lock check-in: 42354433d6 user: dmestas tags: trunk
2026-11-06
23:29
sync and pull report a branch left with several open leaves, on stderr and in -F json with the leaves and the paths that differ, and exit 9 when this exchange brought or made the fork; a bare pull keeps its options check-in: bb47520972 user: dmestas tags: trunk
22:54
The daemon folds its own commits into the view it holds and writes the cache, log index and file index lazily, so a one-file commit costs about 4 ms at 42k files instead of 24; log for a path finds each version by walking the tree and reads its size from the frame, 1 ms for 20 rows at 42k; muscle works in its own scratch directory check-in: 0e8724bbad user: dmestas tags: trunk
21:19
zit daemon answers log for a path in pages, annotate with or without --partial, and a single file's diff with line text, sharing the CLI's code so the answers match check-in: d5b1152455 user: dmestas tags: trunk
21:15
Each dst and smoke run works in its own scratch directory, kept and named on failure, so two runs from one checkout no longer delete each other's workspace check-in: 845e3c2b35 user: dmestas tags: trunk
19:37
zit daemon drains a refused client before closing, up to 64 MiB or 2 s, so a client still sending an oversized header or trailer reads the error line instead of a broken pipe check-in: 8d52c3ce9a user: dmestas tags: trunk
18:58
Release 0.10.1 check-in: 1ad8b1a063 user: dmestas tags: trunk, version-0.10.1
18:54
A sub-manifest received as a delta before its basis closes its tree's gap when the basis arrives, so a deepen from a zit server completes; a store header torn while its version is restamped reads as the stamp it was leaving instead of corrupt, and a new horizon clone writes its version when the store is created check-in: 8a547a40f9 user: dmestas tags: trunk
18:17
zit daemon records merges: commit takes a parents list, written as zit merge and a commit write it, so two devices sending the same merge converge on one check-in; merge_base and diff ops answer read-only, diff sharing its comparison with zit diff check-in: 4aab5d6849 user: dmestas tags: trunk
16:55
The release workflow checks the version constant in main.zig, where the version string now lives check-in: 9423667c03 user: dmestas tags: trunk
16:13
Release 0.10.0 check-in: 9fd9d8e3e9 user: dmestas tags: trunk, version-0.10.0
15:47
zit daemon answers lookup: whether a check-in with a given time, user and comment is stored, optionally on a given parent, by the same match a resend uses, without taking the writer lock or writing check-in: abb6786b0e user: dmestas tags: trunk
14:30
A commit may rename a file and give it new content in one check-in, as a rename plus a put of its new name; commit takes --date-override with Fossil's formats, and with -R a resend carrying the same date, user and comment answers with the stored check-in check-in: 560c41cefc user: dmestas tags: trunk
13:56
New names follow Fossil's strict path rule when written by commit, add, addremove and mv: valid UTF-8, nothing above U+FFFF, no private-use characters, no backslash, plus no control bytes; user and branch refuse control bytes; Fossil's reserved names are refused; names read from existing check-ins stay lenient, so a delete or rename can remove one check-in: d040bd2d7f user: dmestas tags: trunk
12:58
zit daemon serves one store over a local Unix socket: commit, batch with one fsync per batch, feed, get and status as JSON with raw trailers, acknowledging only after the fsync; a resend is matched on time, user and comment and answered with the stored check-in; the socket directory and file are owner-only and other users are refused check-in: d78ffcad0b user: dmestas tags: trunk
04:10
commit -R takes repeatable --rename OLD NEW and --delete PATH with or without --stdin, applied as one check-in through the direct-commit core, byte-identical to mv or rm and a checkout commit; a resend of a stored request returns its check-in check-in: 289dd7f6b7 user: dmestas tags: trunk
02:58
commit -R --stdin records through a direct-commit core that builds the check-in from the parent manifest and its edits, with no ephemeral checkout, byte-identical to a checkout commit of the same change; the core takes put, delete and rename, imports nothing from the CLI, and a caller holding it open commits in about 20 ms on a 42k-file tree store check-in: e1d2e2fbff user: dmestas tags: trunk
00:23
annotate --partial reads through a purged or shunned version and marks the lines it cannot trace with '~', exiting 0; plain annotate still refuses with exit 8 check-in: 3a52ad2bc9 user: dmestas tags: trunk
2026-11-05
22:54
Release 0.9.1 check-in: 7b62e60bb2 user: dmestas tags: trunk, version-0.9.1
22:50
log PATH -F json lists a purged, shunned or elided version with null size and its reason instead of failing; log PATH for a name no check-in held answers from the file index without walking history; a clone that fails before its store commits removes what it made; help exit-codes lists commit's exit 3 check-in: a22983364f user: dmestas tags: trunk
21:24
Smoke starts every fossil and zit server through the retrying starter, so a port taken between pick and bind tries a fresh one, and a server that never binds is reported with how it ended and its stderr check-in: affdc72275 user: dmestas tags: trunk
19:13
Release 0.9.0 check-in: b4566e6aad user: dmestas tags: trunk, version-0.9.0
18:43
purge artifacts removes named file versions to thin a history, keeping every check-in and refusing any version an open leaf or the checkout holds; a local .zit-thinned list keeps pull and serve from bringing them back; cat, diff and annotate exit 8 for content absent by policy, and annotate no longer credits a removed version's lines to the next one check-in: 79903b742d user: dmestas tags: trunk
15:54
crosslink --lines finds each changed file's old side by name, through the parent's sub-manifest slots or a search of its F cards, instead of flattening the parent's whole tree per check-in, and reads parent manifests through its plaintext cache check-in: 399cc6b321 user: dmestas tags: trunk
13:19
A sender answers a gimme or uploads an artifact it stores as a delta in Fossil's delta form, sending the stored delta when its basis is held, unshunned, in the requester's cone and readable by the peer, so a pull of a few one-file check-ins moves kilobytes check-in: d8cc78e946 user: dmestas tags: trunk
10:37
Sync, pull and a server taking a push store an artifact received whole as a delta, a check-in against its parent, so receiving a one-file check-in costs about what the sender paid instead of a full manifest check-in: 863ba33f03 user: dmestas tags: trunk
09:31
A flat manifest is stored as a delta of its skip base, the ancestor at its height with the lowest set bit cleared, so a chain is popcount(height) deep and no commit stores a whole manifest; pack keeps the structure. Skip deltas after Subversion (Greg Hudson) check-in: bed8346191 user: dmestas tags: trunk
02:23
log CHECKIN PATH and annotate follow renames, continuing under the old name below the check-in that recorded one, with --no-follow for the name-literal view; crosslink adds a rename line and log -F json names each row check-in: dc3fb3ca95 user: dmestas tags: trunk
00:47
commit -R STORE --stdin PATH records one file's bytes from stdin as a check-in with no checkout of the caller's, holding the store's lock throughout so concurrent writers land in order; unchanged bytes exit 3 check-in: fd764eed5e user: dmestas tags: trunk
2026-11-04
23:45
The cache carries a checksum of its image alone, so an open checks what it reads instead of the whole cache, and the record body is read through a mapping instead of copied onto the heap check-in: e9027611fe user: dmestas tags: trunk
23:04
A sparse cone can carry the parents property (--cone-parents): the root's files and the files directly in each parent directory of a member are covered too, so a narrow cone is navigable; the sparse-cone draft states the rule and its cone-parents pragma check-in: 2199ee2ef3 user: dmestas tags: trunk
21:15
log CHECKIN PATH and diff between check-ins take -F json, in Fossil's field names, so an application reads a file's history and a two-version diff without parsing text check-in: 49bd94f30d user: dmestas tags: trunk
20:15
Persist stores a received delta whose basis is not memoised as it arrived, and checks every such delta before the commit by walking each delta tree once, so a large clone no longer rebuilds each artifact through its whole chain check-in: d8c302d1ab user: dmestas tags: trunk