50 descendants of 87f4be291465f041
|
2026-09-11
| ||
| 18:49 | 0.3.12: version bump and release notes check-in: 5a962c69ff user: dmestas tags: trunk, version-0.3.12 | |
| 18:43 |
serve: mint clusters on a pull reply (zit#184)
Once a pull finds 100 or more held artifacts no cluster names, fold them into cluster artifacts — sorted, 800 M cards each, md5 Z — at fossil's create_cluster point and thresholds. They persist with the round and extend the index; the next reply announces the clusters, not the members. A zit-born repository clusters itself the first time anyone pulls from it: 161 artifacts, one cluster, 201 bytes on the next pull. check-in: 10c905d27b user: dmestas tags: trunk | |
| 17:52 |
sync: announce only what no held cluster names (zit#184)
A pull or push announced every held artifact with igot, every round — 1.25M lines, ~63 MB per direction on pkgsrc. Clusters are igot in bulk: index the held clusters (.zit-cache/clusters, keyed to the log prefix, kept warm by persist), announce held minus what they name, seed the promises they made that this repository never collected, absorb pushed clusters server-side so the reply begs for their members, and honour send-catalog (full inventory) and req-clusters (enclosed cluster igots). A no-op pkgsrc pull now sends 4.7 KB. Cluster promises the peer cannot keep are a warning, not a failed pull. No format changed. check-in: e1ca72a8ef user: dmestas tags: trunk | |
| 16:10 |
pull: persist only what was received, not the whole holdings store (zit#185)
A pull walked every held artifact in persistStore, reading each once from the lazy disk-backed holdings store just to early-return it: 194s of a 197s no-op pull at 1.25M artifacts, reconstructing nothing. Received artifacts are appended beyond the holdings' log-backed prefix, so persist now begins the walk there and processes only the received set. A no-op pull persists nothing; an incremental pull persists what it received, not the millions it already holds. No-op pkgsrc pull 209s to 7s. check-in: a25dcf28f5 user: dmestas tags: trunk | |
|
2026-09-10
| ||
| 23:56 | 0.3.11: version bump and release notes check-in: b1dc991ac0 user: dmestas tags: trunk, version-0.3.11 | |
| 23:42 |
serve: suppress announced igot with a set, not a scan per artifact (zit#183)
emitReply walked every held rid and, for each, linear-scanned the peer's announced list to suppress a redundant igot — O(held × announced), so a no-op pull where both sides hold everything cost 760 s of server CPU at 1.25M artifacts. Build the announced/requested names into one set per reply and probe it once per rid. ZIT reports the probe count; a test pins it to the held count at two sizes regardless of what the peer announced. check-in: a93f014321 user: dmestas tags: trunk | |
|
2026-09-09
| ||
| 22:53 | 0.3.10: version bump and release notes check-in: 77f89b0bec user: dmestas tags: trunk, version-0.3.10 | |
| 20:04 |
derive: a disposition sidecar skips what cannot contribute a record (zit#182)
One bit per log frame in .zit-cache/dispositions: crosslink-relevant or not. A full derive consults it and never reconstructs the file blobs and SUBMANIFEST tree nodes that were most of a wide store's walk; the walk distills a fresh map either way. Same trust tier as the log-scan index: self-checksummed, keyed to a validated log prefix, stamped with the shun fingerprint, absent on any doubt. pkgsrc submanifest cold derive 302 s to 22 s; a consuming derive's body is byte-identical, pinned by test. check-in: a18d2edd67 user: dmestas tags: trunk | |
| 17:58 |
derive: write the cache in place, never a second copy (zit#182)
repocache.store and checkpoint.store concatenated header + body + image into a full resident copy before writing; both now stream the pieces to the file with the checksum folded incrementally, byte-identical output. The clone path frees its view before the reopen builds a second derived state. ZIT_DERIVE_FOOTPRINT reports the derive body's composition. pkgsrc cold open: peak RSS 2.32 GB to 2.07 GB. check-in: 3107e23e24 user: dmestas tags: trunk | |
| 14:26 | 0.3.9: version bump and release notes check-in: c641321230 user: dmestas tags: trunk, version-0.3.9 | |
| 14:13 |
clone: persist each round as it converges, release what is written (zit#172)
A dense clone no longer holds the repository in memory until the exchange ends: each round's artifacts land in the log and their resident bytes are released, the shape of git's index-pack. A delta whose basis has not arrived defers on its hash; a basis first seen as a phantom is revisited when its content lands. Cone-scoped clones keep the batched pass, whose keep set needs the converged store. Streamed and batched logs are byte-identical, pinned by test. ZIT_PERSIST_WAITING reports the drain's peak deferred set. check-in: 533b0a6490 user: dmestas tags: trunk | |
|
2026-09-07
| ||
| 16:17 | README: describe zit as it is today check-in: bc8f8da929 user: dmestas tags: trunk | |
| 01:44 | 0.3.8: version bump and release notes check-in: f0b4cd974f user: dmestas tags: trunk, version-0.3.8 | |
| 01:37 |
settings: read the checkout the way fossil does (zit#175)
Fossil-dialect globs treat ! as a class member; only ^ negates. open reads a versioned-only manifest setting out of the check-in and remembers --manifest=off so update cannot re-enable stamps. add --force adds a named ignore-glob match; directory expansion always honours ignore and clean globs. .fos root names compare case-sensitively on Linux. check-in: b7e077e430 user: dmestas tags: trunk | |
| 01:09 |
annotate: per-file hashes in the crosslink record, Myers diff
The crosslink record now carries each changed file's artifact hash (fossil's mlink shape), so annotate reads blobs by hash instead of re-deriving every manifest on the walk. merge3 moves to a linear-space Myers LCS and annotate caches plaintext and baselines across versions. Repocache format 5, checkpoint format 5: the first open after upgrading re-derives. Help states the 12-character prefix annotate actually prints. check-in: a6c2215859 user: dmestas tags: trunk | |
| 00:09 | info: many names in one call, -F json check-in: e751c1c8a2 user: dmestas tags: trunk | |
|
2026-09-06
| ||
| 21:49 | 0.3.7: version bump and release notes check-in: 1f12f7b9a9 user: dmestas tags: trunk, version-0.3.7 | |
| 21:39 |
info: render Q cards from the state, not the manifest (zit#177)
The crosslink record, the state and the image now carry each check-in's Q cards (sign and target), so the cherrypick/backout line needs no manifest read. Record format 4, image layout 7. info NAME 16 ms to 6 ms on libspatialite, level with leaves; output unchanged. check-in: adb05cc14e user: dmestas tags: trunk | |
| 20:59 |
repocache: a hit rewrites a stale or missing image (zit#180)
A cache whose image is absent or at an old layout replayed the record body on every fast_read open, since only a miss stored. The hit now serializes the image from the view it just built and stores it, so the fallback is paid once. check-in: 98c5d6c61a user: dmestas tags: trunk | |
| 20:47 |
timeline: read the image, not a full derive (zit#181)
The image has carried adjacency since layout 2 and comment/login since layout 6, so every default row renders from the zero-parse path; only full/-v/-p still read manifests. 60 ms to 8 ms on a 22k check-in store, output byte-identical across formats. check-in: 18ffce5678 user: dmestas tags: trunk | |
| 20:06 |
grep: read manifests only where the record says PATH changed (zit#178)
One record scan, as annotate, instead of a manifest per check-in: 20,937 reads to 272 on VERSION, 19s to 0.4s. Each version is reported once under its oldest introducer, matching fossil grep's list byte for byte. check-in: 6be0341149 user: dmestas tags: trunk | |
| 14:06 |
sync: read the Content-Type media type, not the whole header (zit#179)
A front web server that appends "; charset=utf-8" made the clone reply look compressed, so its plaintext was read as a 1.6 GB container and refused as too large. parseMediaType now ignores parameters and case, as fossil does; serve uses it instead of its own copy. check-in: 8488af309e user: dmestas tags: trunk, version-0.3.6 | |
| 14:06 | 0.3.6: version bump and release notes check-in: 762cd0d3cc user: dmestas tags: trunk | |
|
2026-09-05
| ||
| 17:34 | 0.3.5: version bump and release notes check-in: 882eaddc57 user: dmestas tags: trunk, version-0.3.5 | |
| 15:13 |
Honour every Fossil checkout setting file (#174)
Glob lists follow Fossil's tokenizer and '#' comment lines; crnl-glob, clean-glob, empty-dirs, encoding-glob, dotfiles and mimetypes work at every tier. Dotfiles are hidden by default and Fossil's checkout-state names are never listed. UTF-16 and invalid UTF-8 classify as Fossil's lookslike.c does; tokenizer rules from glob.c. check-in: 982afa3d8f user: dmestas tags: trunk | |
|
2026-09-02
| ||
| 22:25 | 0.3.4: version bump and release notes check-in: f785e3286b user: dmestas tags: trunk, version-0.3.4 | |
| 22:15 | zit#173: route ordering tiebreaks through the hashOf door; trap the raw store under image backing check-in: 8216f43a66 user: dmestas tags: trunk | |
| 02:57 | 0.3.3: version bump and release notes check-in: 441d99370f user: dmestas tags: trunk, version-0.3.3 | |
| 01:32 |
annotate walks the file's versions, not the whole ancestry
Every ancestor cost a manifest read and a full-file line diff — ~36k of each on SQLite where ~400 touched the file. The cache records already say who changed PATH (their diff is against the primary parent, so unlisted means byte-equal there): untouched ancestors inherit the parent's content pointer, the engine copies the parent's origins on pointer-identity, and the LCS trims the common prefix/suffix before its O(n*m) table. Unfinishable on SQLite before; 0.5-1.2s typical, 57s for a 15k-line heavily-edited file (the multi-hunk quadratic middle remains — a real diff core is the named follow-up). Attribution of a repeated line between equally-valid origins can shift, as any LCS tiebreak may. zit#172 check-in: 22bdf84fd3 user: dmestas tags: trunk | |
|
2026-09-01
| ||
| 23:10 |
timeline reads no manifest for what the state answers; count the reads that remain
The default-format timeline inflated a manifest per row — the fetch condition still said 'a.format != .oneline' from when oneline was the default, so zit#170's medium default made every row read one for two strings the image now carries. 66.5s to 0.37s for the full SQLite timeline, output identical. Repository.manifest counts its reads (ZIT_MANIFEST_READS=1 reports on exit), and an e2e runs ten listings over two history sizes and requires identical counts — a per-row reader fails by construction, no timing, no constants. zit#172 check-in: 09fa1a7fb3 user: dmestas tags: trunk | |
|
2026-08-31
| ||
| 17:02 |
image: carry the comment and login per rid, so a listing reads no manifest
zit leaves read and parsed a whole manifest per row — through its delta chain — for the comment's first line and the login. A warm store is image-backed and the image carried neither, so commentOf answered null and every row fell back to that read: 472 leaves, one second, on sqlite. The image now materializes both: the comment CSR-addressed per rid, the login interned (a repository has a handful of committers). layout_version 6 — an older image is a miss and rebuilds, as the disposable cache intends. 0.3.2. check-in: 71d327a695 user: dmestas tags: trunk, version-0.3.2 | |
| 01:01 | import-fossil help: keep 'zit submanifest enable' on one line check-in: edac449311 user: dmestas tags: trunk, version-0.3.1 | |
|
2026-08-30
| ||
| 16:50 | 0.3.1: version bump and release notes check-in: b5afbdb45f user: dmestas tags: trunk | |
| 16:20 |
clone: diff a check-in against its parent by their changed files, not two whole file lists
The derive built the complete effective file list for every check-in and its parent, then compared them — O(files) per check-in, which on pkgsrc is 100k entries twice over, 305k times. Fossil's add_mlink merges the two deltas' own F cards and seeks the shared baseline; do the same, and walk the lists side by side when the baselines differ instead of materializing them. Keeps recently-read manifests parsed, pinned while a step holds them. zit#172 check-in: 669593f624 user: dmestas tags: trunk | |
|
2026-08-29
| ||
| 23:53 | import-fossil help: say the shape of pack's effect, not a corpus figure check-in: 97a7015b74 user: dmestas tags: trunk | |
| 22:30 | import-fossil --submanifest: recommend 'zit pack' next; the source's chains are rarely the best bases (zit#169) check-in: 24bc789080 user: dmestas tags: trunk | |
| 20:54 | An empty check-in name is refused, not a crash: guard the resolver's precondition at the repository door (zit#171) check-in: c2b38c3ca8 user: dmestas tags: trunk | |
| 20:30 | diff prints Fossil's Index banner; update's changes line reads as a sentence (zit#170) check-in: 9e3ba34bb0 user: dmestas tags: trunk | |
| 20:11 | Fossil's words by default: status rows, ADDED/DELETED/RENAME/REVERT/UNDO lines, blame's user column, a no-op update's checkout line, singular counts (zit#170) check-in: 201202f4c8 user: dmestas tags: trunk | |
| 19:39 | muscle: fourteen more session steps (stash, branch cycle, conflicting merge, undo, help); zig build ux keeps every step's bytes under zig-out/ux (zit#170) check-in: 11b68d9d99 user: dmestas tags: trunk | |
| 19:21 | Prefixes resolve through aliases and name the shortest spelling that works; verb help lists its aliases (zit#170) check-in: bb2f45e4ff user: dmestas tags: trunk | |
| 18:27 | Receipts: commit summary and content notes, undo per-file rows, stash file names, revert undo hint, short hashes in update (zit#170) check-in: 69f708db73 user: dmestas tags: trunk | |
| 17:46 |
listings take Fossil's shape: ls names, leaves lines, day-grouped timeline, annotate line numbers; branch -v (zit#170)
Twelve-character hashes and the weekday in day headers and leaf lines are the departures; -F oneline keeps the one-line timeline for scripts. check-in: 16c197b4dc user: dmestas tags: trunk | |
| 16:57 |
status leads with Fossil's checkout block; changes drops it; bare info adds the count (zit#170)
Twelve-character names and the weekday in the times are the only departures from Fossil's shape. cli.shortHash and cli.humanTime are the primitives the rest of the terminal-speech work builds on. check-in: d72b6372ab user: dmestas tags: trunk | |
| 15:33 |
info with no NAME describes the current check-in; revert names only the files it changes
Both found by running one session through fossil and zit side by side. check-in: a0690841c1 user: dmestas tags: trunk | |
| 14:40 |
update: with no CHECKIN move to the branch's newest check-in, as Fossil does
A bare 'zit update' was a usage error; Fossil's means --latest. check-in: b618fc675d user: dmestas tags: trunk | |
| 12:44 |
logstore: putArtifactPreferring takes a known base before searching (zit#169)
The converter's hints are the source's own chains and each manifest's parent, so one delta usually settles it; the best-of-N window is the fallback. Conversion is now faster than the old convert-then-pack. check-in: 598d040de5 user: dmestas tags: trunk | |
| 12:04 |
import-fossil --submanifest: delta-encode the converted store as it is written (zit#169)
Blobs take the flat source's own delta base as the hint, manifests their parent, carried artifacts the recent window. A 28x full-form gap on a toy corpus became 1.3x of packed, with no second pass and no double-disk peak. check-in: 38b9743ff8 user: dmestas tags: trunk | |
| 10:18 |
release: prepare zit 0.3.0
Fossil parity on the everyday verbs, landings and strata, protected branches behind a trusted front, Fossil's user table, and the read paths that now scale with the change rather than the store. check-in: 1e2a7bbc0d user: dmestas tags: trunk, version-0.3.0 | |
| 09:26 |
ui launches quarry's local mode (zit#165, quarry RFC 0010)
Runs quarry ui on the checkout root with the terminal inherited; the binary comes from ZIT_QUARRY or PATH, and an absent one is a three-line pointer, exit 1. check-in: 95553946e3 user: dmestas tags: trunk | |
| 09:07 |
diff --by, timeline -F html, and a reserved ui verb (zit#165)
--by writes a side-by-side page under $TMPDIR and opens it from a terminal; -F html renders the timeline as a table; ui names quarry's local mode and exits 1 until it exists. check-in: 87f4be2914 user: dmestas tags: trunk | |