Changes touching this path

  • the forge reads the changes of a repo without scanning whole tables: changes_of, behind repo_changes and changes_with_manifests on Postgres, read the change rows through a join the planner could hash and their parent edges, predecessor edges and tree entries by id arrays, and past a repo or array size the forge row counts set each became a scan of the whole table (on throwaway forges of 298,000, 898,000 and 2,698,000 changes, parent edges from 2,070, 2,820 and 7,880 ids, predecessors from 820, 990 and 2,170, tree entries from 4,440, 8,440 and 18,700 manifests). pg::meta::ChangeReads now reads the change rows and both edge kinds as lateral subqueries with OFFSET 0 driven from repo_change, for the whole repo and for a named delta, and MANIFEST_ENTRIES reads tree_entry one manifest at a time by unnesting the manifest ids into a lateral subquery with OFFSET 0. measured on a throwaway Postgres 18 at eight repo sizes on three forge sizes, each arm for the whole repo and for a delta naming every id, the new reads examined the rows of the repo alone wherever their plans were read: 35.4 against 100 ms at 3,000 changes on the smallest forge and 13.2 against 33.8 ms at 1,000 on the middle one, while the largest repos read slower, 1,597 against 1,057 ms at 100,000 changes on the smallest forge and 2,457 against 1,976 ms on the largest; covering indexes on the edge tables were measured and moved the read by less than the run spread, so none is built, and ADR 0075 records the tables. a pg test asks the planner for each statement with nested loops and sequential scans priced out and refuses a read not keyed by the row its loop is on, sharing its check with the #2346 pin, and another writes the edges of a change backwards and reads them in ordinal order. red under named mutations, each restored: the rows as the old join, OFFSET 0 dropped from the rows, predecessors by an id array, OFFSET 0 dropped from the edges, tree entries by a manifest array, OFFSET 0 dropped from them and the named delta rows as the old join (7 passed and 1 failed each over 8 tests), and the edge ordinal dropped from the order and REPO_GRAPH without OFFSET 0 (8 passed and 1 failed each over 9); the named delta losing its repo scope stayed green, since migration 0017 binds repo_change to the repo. bash ci/local.sh is green against Postgres 18, 4632 passed over 142 binaries with 13 ignored and the site live suites at 78. no migration; the statements change, so this owes a forge deploy (#2449) 62ba0ebf · dbf3dbe6…

Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.