v3.0.0 f19f453

push_behavior_test.go RawHistoryFolder

1package cli
2
3import (
4	"context"
5	"io"
6	"testing"
7
8	"github.com/stretchr/testify/require"
9)
10
11type recordingPushOps struct {
12	existsRef string
13	tags      [][2]string
14	pushes    []string
15	exists    bool
16}
17
18func (o *recordingPushOps) Exists(_ context.Context, ref string) (bool, error) {
19	o.existsRef = ref
20	return o.exists, nil
21}
22
23func (o *recordingPushOps) Tag(_ context.Context, source, target string) error {
24	o.tags = append(o.tags, [2]string{source, target})
25	return nil
26}
27
28func (o *recordingPushOps) Push(_ context.Context, ref string) error {
29	o.pushes = append(o.pushes, ref)
30	return nil
31}
32
33func (*recordingPushOps) Build(context.Context, []string) error { return nil }
34
35func TestTagAndPushPreservesExactSourceReference(t *testing.T) {
36	ops := &recordingPushOps{exists: true}
37	img := imagePush{
38		SourceRef: "registry.example.com/team/app:v3",
39		Version:   "v4", VersionRef: "registry.example.com/team/app:v4",
40		LatestRef: "registry.example.com/team/app:latest",
41	}
42
43	require.NoError(t, tagAndPush(context.Background(), io.Discard, ops, img))
44	require.Equal(t, img.SourceRef, ops.existsRef)
45	require.Equal(t, [][2]string{
46		{img.SourceRef, img.VersionRef},
47		{img.SourceRef, img.LatestRef},
48	}, ops.tags)
49	require.Equal(t, []string{img.VersionRef, img.LatestRef}, ops.pushes)
50}
51
52func TestTagAndPushRejectsMissingSourceReference(t *testing.T) {
53	ops := &recordingPushOps{exists: true}
54	err := tagAndPush(context.Background(), io.Discard, ops, imagePush{
55		Registry: "registry.example.com", ImageName: "team/app", Version: "v4",
56	})
57	require.EqualError(t, err, "push source image reference cannot be empty")
58	require.Empty(t, ops.existsRef)
59	require.Empty(t, ops.tags)
60	require.Empty(t, ops.pushes)
61}

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 7

Tags 106

↑↓ moveenter openesc close