v0.3.0 99dc266

output_state.go RawHistoryFolder

1package client
2
3import "github.com/bnema/vev/internal/ports"
4
5// outputApplyState is the client-side dependency chain for one attachment.
6// State-bearing frames are accepted only when their epoch, base, and view
7// revision continue the last frame; a new epoch must carry a full reset.
8type outputApplyState struct {
9	epoch        uint64
10	state        uint64
11	viewRevision uint64
12	initialized  bool
13}
14
15func (s outputApplyState) next(output ports.Output) (outputApplyState, bool) {
16	if output.Epoch == 0 {
17		return outputApplyState{}, false
18	}
19	if !s.initialized {
20		if output.New == 0 {
21			return s, true
22		}
23		if output.Base != 0 || !output.Full {
24			return outputApplyState{}, false
25		}
26		return outputApplyState{epoch: output.Epoch, state: output.New, viewRevision: output.ViewRevision, initialized: true}, true
27	}
28	if output.Epoch < s.epoch {
29		return outputApplyState{}, false
30	}
31	if output.Epoch == s.epoch {
32		if output.ViewRevision != s.viewRevision {
33			return outputApplyState{}, false
34		}
35		if output.New == 0 {
36			if output.Base != 0 || output.Full {
37				return outputApplyState{}, false
38			}
39			return s, true
40		}
41		if output.Full || output.Base != s.state || output.New != output.Base+1 {
42			return outputApplyState{}, false
43		}
44		return outputApplyState{epoch: s.epoch, state: output.New, viewRevision: s.viewRevision, initialized: true}, true
45	}
46	if !output.Full || output.Base != 0 {
47		return outputApplyState{}, false
48	}
49	return outputApplyState{epoch: output.Epoch, state: output.New, viewRevision: output.ViewRevision, initialized: true}, true
50}

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 12

Tags 11

↑↓ moveenter openesc close