Expand description
The classes of Git step a commit starts for itself, with the bound and the notice grace of each.
What:
The two kinds of Git step a commit starts for itself, and the bound and the notice grace of each.
Why:
One bound for every step had to be long enough for the slowest, so a stalled rev-parse held a commit for as long
as a stalled pack-objects, and the first notice came after one second for steps that only needed a moment.
The classes follow what a step touches, measured on the repository this crate lives in
(doc/planning/cli-git-commit-timeouts.md):
a query reads refs, commits and trees and ends in milliseconds whatever the worktree holds, while a step that
writes objects, or that compares the index with the worktree, costs time in proportion to the bytes it reads
(reset, update-index --refresh and ls-files --modified took 2.9 s on a stat-dirty 20 000-file index against
0.03 s on a clean one, and a cold disk multiplies that).
The user’s own git commit with its hooks is not a class: its runtime belongs to the user and it is never bounded.
In TS you’d write (pseudocode):
const limit = QUERY_SUBCOMMANDS.includes(subcommandOf(args)) ? QUERY_LIMIT_MS : BULK_LIMIT_MS;Enums§
- Child
Class - What: The kind of a Git step, which decides its bound and when its first notice comes. Why: The two kinds differ by orders of magnitude in how long a healthy step takes.
Constants§
- CHILD_
WAIT_ VARIABLE - Environment variable that sets, in whole seconds, how long any Git step the wrapper starts for itself may run before it is stopped, whatever its class.
- OBJECT_
CHILD_ WAIT - How long a bulk step may run: its time grows with the bytes it moves or compares, so the bound leaves room for a large or stat-dirty worktree on a loaded host.
- OBJECT_
NOTICE_ GRACE - How long a bulk step runs before the first notice.
- PLUMBING_
CHILD_ WAIT - How long a query step may run: a hundred times the slowest such step measured on a host at several times its core count in load.
- PLUMBING_
NOTICE_ GRACE - How long a query step runs before the first notice.
- PLUMBING_
SUBCOMMANDS - Subcommands that only read refs, commits and trees, or write one ref or one tree from the index as it is:
they end in milliseconds whatever the worktree holds.
Every other subcommand, named or not, is a bulk step and gets the longer bound instead of an early stop:
pack-objects,index-pack,add,hash-objectandmaintenancemove bytes, andreset,read-tree,update-index,ls-files,diff,diff-index,showandls-remoterefresh the index, compare it with the worktree or talk to a remote.
Functions§
- class_
of - What:
The class of the Git step a request runs.
Why:
A step is a query only when its subcommand is named in
PLUMBING_SUBCOMMANDS; every other step, a request with no subcommand included, gets the longer bound.