1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//! What:
//! Pushes:
//! the automatic push after a commit,
//! manual push handling,
//! bounded Git queries,
//! retries and progress watching.
//! Why:
//! Push has a long lifecycle with many waits.
//!
//! In TS you'd write (pseudocode):
//! ```ts
//! // push/index.ts: one `export * from './file'` per module below.
//! ```
/// Controls for stopping a push on no progress, with real Git and a local remote.
/// Controls for a push that waits for a slow server while connected, on probes that hold sockets and on Git over HTTP.
/// Controls for a push whose server runs a silent check after the pack is sent, over HTTP and over a local path.
/// The push of a merge that integrated a lost race, planned and run inside the running wrapper.
/// The service's own retry of a push it stopped or that failed: the pauses, the waiting branches, the final failure.
/// The retry plan on disk, in the service instance's journal, so that a restarted service keeps trying the pushes it was trying.
/// The per-branch file name of the push failure notice: a reversible, flat, case-safe key.
/// The shared clock of every wait notice: the grace, the repeat interval and a queued commit's place in line.
/// A watcher for waits that block on a child process: notices at the cadence and the child stopped at the bound.
/// The classes of Git step a commit starts for itself, with the bound and the notice grace of each.
/// Read-only Git queries of the auto-push, each with a deadline and separate output streams.
/// The auto-push's real `git push` with a deadline and its low-speed abort.
/// The bytes a push and its processes move, sampled, and the clock that stops it on a stall.
/// The connected TCP sockets of the machine with their byte counts, and the sockets a process holds.
/// The real Git of a push, its query runner and the failure types of a push.
/// Where a plain `git push` of one named branch goes, from the configuration and the local refs.
/// The push a merge, pull, cherry-pick, revert or am hands to the service when it leaves the branch ahead of its upstream.
/// The record of each decision of the push trigger: handed over, or declined with its reason.
/// Publishing a landed commit that a moved remote branch rejected: the merge is made from objects alone and pushed.
/// The paths of a dirty worktree and of a fast-forward, and their overlap.
/// Post-commit auto-push of a landed commit: the push argv, the surfaced output and the failure reporting.
/// Authoritative manual-push updates discovered by a private dry-run push and confirmed with ls-remote.
/// Why a manual push's scope could not be established, as the cause its hint is chosen by.
/// The updates a manual `git push` would send, learned from Git's own dry-run report and confirmed against the remote.
/// Published-set and range computation for manual-push scans: which pushed commits a remote does not have.
/// An explicit push that lost a race: run as a child, merge in what landed on the remote and publish the merge.
/// Starting a child again when the operating system refuses it for lack of processes, within a bounded wait.
/// The manual-push candidate scope of one push: the commits and trees the destination lacks.
/// The record of a failed backup push and the rule for when a wrapper command shows it.
/// The words that say how to change the push deadline, for the terminal and for the resident commit service.