50 descendants of e114f7a174f6f212
|
2026-09-09
| ||
| 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 | |
| 08:46 |
settings editor and autosync pullonly, --changed/--value; grep -i -c -l -v --once; annotate -n -l (zit#164)
The two new settings ride the keyed config block; a configured editor makes commit editor-capable without a terminal. check-in: 7d9dcb2de1 user: dmestas tags: trunk | |
| 07:53 |
stash: snapshot, diff, goto, and apply --merge (zit#164)
--merge three-way merges a stashed change into a dirty file; conflicts get markers, are listed, and exit 5 with the entry kept. check-in: 21ce2c785d user: dmestas tags: trunk | |
| 07:35 |
merge: --integrate, --baseline, -n, and a bare merge onto the one other leaf (zit#164)
The checkout record carries the integrated leaf's hash as an optional sixth field; commit closes it with the same control artifact branch close mints. check-in: 2a522aab40 user: dmestas tags: trunk | |
| 07:01 |
diff: PATH operands, --numstat, --invert, --checkin, --branch (zit#164)
-Z is -w; -N is accepted (an added file's hunks already carry it all). check-in: 39c88046ab user: dmestas tags: trunk | |
| 06:35 |
mv takes many operands and directories; revert -r/-n, undo -n (zit#164)
The managed set records one pending rename per moved file. mv moves files into a directory or a tracked directory as a unit, --soft records without moving, -n previews. revert -r VERSION restores another check-in's content; revert/undo/redo -n name what they would touch. add -f takes ignored files; clean gains -n/-f and --emptydirs. check-in: ece16d74a9 user: dmestas tags: trunk | |
| 05:30 |
branch sub-verbs; clone opens its tree, open URL clones (zit#164)
branch new/close/reopen/hide/unhide/current/info. clone DIR defaults from the URL and is followed by open (--no-open keeps the bare store); open URL delegates to clone. check-in: 5d2f9a7e6e user: dmestas tags: trunk | |
| 03:36 |
timeline filters and formats, status classification, -R for the sync family
timeline gains -b/-c/-p/-u filters, -r and --offset, -F medium|full (a date header per day, *CURRENT* on the checkout's check-in, user and tags) and -v for changed files; the default line is unchanged. status gains --classify (Fossil's words, aligned), --added/--edited/--missing/--conflict/--extra/ --differ filters, -v's header block, CONFLICT for an edited file still carrying markers under a pending merge, and MERGED_WITH. pull, push, sync and remote accept -R, so a bare mirror needs no working tree. current/ ckout/prev/next take effect in these verbs through the same hint. Refs zit#163. check-in: 6c84f304f4 user: dmestas tags: trunk | |
| 02:33 |
Everyday verbs: update receipt, network narration, commit editor, checkout-relative names
update prints Fossil's receipt on stderr (per-file UPDATE/ADD/REMOVE/MERGE/ CONFLICT, the from/to block, the undo hint) and gains -n, --latest and -v. Every sync-family line names the peer, a no-op is always 'already in sync', clone prints the project code, an unreachable peer is named, and pull/push/ sync show per-round progress on a terminal. commit takes -M FILE, composes the comment in $VISUAL/$EDITOR/--editor over a template of the change set (kept in .zit-ci-comment when the commit then fails), and gains -n and --allow-empty; --no-warnings is accepted as Fossil's spelling of --no-checks — the content gate stays opt-in by design. The names current/ ckout, prev/previous and next resolve against the checkout. The muscle harness now enforces all of it. Closes zit#157, zit#158, zit#159, zit#160, zit#161. check-in: e5beabd7c0 user: dmestas tags: trunk | |
| 00:59 |
fossil-muscle-memory: a differential transcript through fossil and zit
zig build muscle runs one scripted session — 27 lines a Fossil user types most — through the real fossil and the real zit against local servers, and compares each step's exit-status class and whether the verb spoke at all. Deliberate divergences carry their reason, known gaps carry their issue; anything else fails the run. CI runs it beside smoke. Closes zit#162. check-in: 741f6d428b user: dmestas tags: trunk | |
| 00:59 |
Verb prefixes, Fossil aliases, and a suggester that never says 'rm'
Any unambiguous prefix of a command dispatches (zit up, zit tim); an ambiguous one names its candidates; an exact verb always wins, so stat stays the store census. Aliases: ci/checkin, co/checkout, changes, delete/forget/ remove, rename, blame/praise, new. A token of three letters or fewer is only suggested at edit distance 1, and an unknown verb prints two lines, never the command list. Closes zit#156. check-in: e114f7a174 user: dmestas tags: trunk | |