Skip to main content

Module child_class

Module child_class 

Source
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§

ChildClass
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-object and maintenance move bytes, and reset, read-tree, update-index, ls-files, diff, diff-index, show and ls-remote refresh 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.