v0.4.0 76a5504

cancel.go RawHistoryFolder

1// SPDX-License-Identifier: MIT
2
3package executor
4
5import "sync"
6
7// CancelReason says why a job is stopped.
8type CancelReason int
9
10// Cancel reasons.
11const (
12	// CancelUser is a cancellation by the owner or by fail-fast: the job ends
13	// cancelled.
14	CancelUser CancelReason = iota + 1
15	// CancelTimeout is the job timeout: the job ends timed_out.
16	CancelTimeout
17	// CancelShutdown is the runner stopping: the job ends cancelled with
18	// RunnerShutdown set, and the steps that did not start are skipped.
19	CancelShutdown
20)
21
22// Canceller stops a job. The first Cancel wins; later calls are ignored (the
23// server only sends the first reason too).
24type Canceller struct {
25	once   sync.Once
26	ch     chan struct{}
27	mu     sync.Mutex
28	reason CancelReason
29}
30
31// NewCanceller returns a Canceller that has not fired.
32func NewCanceller() *Canceller { return &Canceller{ch: make(chan struct{})} }
33
34// Cancel stops the job for reason.
35func (c *Canceller) Cancel(reason CancelReason) {
36	c.once.Do(func() {
37		c.mu.Lock()
38		c.reason = reason
39		c.mu.Unlock()
40		close(c.ch)
41	})
42}
43
44// Done is closed when the job is cancelled.
45func (c *Canceller) Done() <-chan struct{} { return c.ch }
46
47// Reason returns why the job was cancelled; zero before Done is closed.
48func (c *Canceller) Reason() CancelReason {
49	c.mu.Lock()
50	defer c.mu.Unlock()
51	return c.reason
52}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 11

↑↓ moveenter openesc close