snapshot_restore_fixture_test.go RawHistoryFolder

1package daemon
2
3import (
4	"fmt"
5
6	"github.com/bnema/vev/internal/domain"
7	"github.com/bnema/vev/internal/ports"
8	snapcodec "github.com/bnema/vev/internal/snapshotcodec"
9)
10
11func acceptancePublication(snapshot snapcodec.Session) (ports.SnapshotPublication, error) {
12	// acceptancePublication converts a restore fixture to repository form.
13	incarnation := domain.IncarnationID{1}
14	manifest := snapcodec.Manifest{Generation: 1, IncarnationID: incarnation, Name: snapshot.Name, CreatedAt: snapshot.CreatedAt, Active: snapshot.Active, Tabs: make([]snapcodec.ManifestTab, 0, len(snapshot.Tabs))}
15	objects := make([]ports.SnapshotObject, 0)
16	for _, tab := range snapshot.Tabs {
17		outTab := snapcodec.ManifestTab{StableID: tab.StableID, Cols: tab.Cols, Rows: tab.Rows, NextPaneID: tab.NextPaneID, Focus: tab.Focus, Tree: tab.Tree, Panes: make([]snapcodec.ManifestPane, 0, len(tab.Panes))}
18		for _, pane := range tab.Panes {
19			outPane := snapcodec.ManifestPane{ID: pane.ID, StableID: pane.StableID, Cwd: pane.Cwd, Process: pane.Process}
20			for i, payload := range pane.SealedChunks {
21				object, err := snapcodec.MarshalObject(snapcodec.HistoryChunk, payload)
22				if err != nil {
23					return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q sealed chunk %d: marshal object: %w", tab.StableID, pane.ID, i, err)
24				}
25				outPane.Sealed = append(outPane.Sealed, objectRef(snapcodec.HistoryChunk, object))
26				objects = append(objects, object)
27			}
28			tail, err := snapcodec.MarshalObject(snapcodec.HistoryTail, pane.Tail)
29			if err != nil {
30				return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q tail: marshal object: %w", tab.StableID, pane.ID, err)
31			}
32			transcript, err := snapcodec.MarshalObject(snapcodec.RecoveryTranscript, pane.Transcript)
33			if err != nil {
34				return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: tab %q pane %q recovery transcript: marshal object: %w", tab.StableID, pane.ID, err)
35			}
36			outPane.Tail, outPane.Transcript = objectRef(snapcodec.HistoryTail, tail), objectRef(snapcodec.RecoveryTranscript, transcript)
37			objects = append(objects, tail, transcript)
38			outTab.Panes = append(outTab.Panes, outPane)
39		}
40		manifest.Tabs = append(manifest.Tabs, outTab)
41	}
42	encoded, err := snapcodec.MarshalManifest(manifest)
43	if err != nil {
44		return ports.SnapshotPublication{}, fmt.Errorf("snapshot fixture conversion: marshal manifest: %w", err)
45	}
46	return ports.SnapshotPublication{IncarnationID: incarnation, Name: snapshot.Name, Generation: 1, Manifest: encoded, Objects: objects}, nil
47}

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