Skip to content

Commit 7083f6d

Browse files
committed
💡 (gh repo delete) Add warning when --yes is ignored without a repository, Closes: cli#12033
1 parent eb79e4a commit 7083f6d

2 files changed

Lines changed: 41 additions & 30 deletions

File tree

‎pkg/cmd/repo/delete/delete.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ func NewCmdDelete(f *cmdutil.Factory, runF func(*DeleteOptions) error) *cobra.Co
6262
if !opts.IO.CanPrompt() {
6363
return cmdutil.FlagErrorf("cannot non-interactively delete current repository. Please specify a repository or run interactively")
6464
}
65+
_, _ = fmt.Fprintln(opts.IO.ErrOut, "Warning: `--yes` is ignored since no repository was specified")
6566
opts.Confirmed = false
6667
}
6768

‎pkg/cmd/repo/delete/delete_test.go‎

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ import (
1616

1717
func TestNewCmdDelete(t *testing.T) {
1818
tests := []struct {
19-
name string
20-
input string
21-
tty bool
22-
output DeleteOptions
23-
wantErr bool
24-
errMsg string
19+
name string
20+
input string
21+
tty bool
22+
output DeleteOptions
23+
wantErr bool
24+
wantErrMsg string
25+
wantStderr string
2526
}{
2627
{
2728
name: "confirm flag",
@@ -36,11 +37,12 @@ func TestNewCmdDelete(t *testing.T) {
3637
output: DeleteOptions{RepoArg: "OWNER/REPO", Confirmed: true},
3738
},
3839
{
39-
name: "no confirmation notty",
40-
input: "OWNER/REPO",
41-
output: DeleteOptions{RepoArg: "OWNER/REPO"},
42-
wantErr: true,
43-
errMsg: "--yes required when not running interactively",
40+
name: "no confirmation notty",
41+
input: "OWNER/REPO",
42+
output: DeleteOptions{RepoArg: "OWNER/REPO"},
43+
wantErr: true,
44+
wantErrMsg: "--yes required when not running interactively",
45+
wantStderr: "Error: --yes required when not running interactively\n",
4446
},
4547
{
4648
name: "base repo resolution",
@@ -49,33 +51,39 @@ func TestNewCmdDelete(t *testing.T) {
4951
output: DeleteOptions{},
5052
},
5153
{
52-
name: "yes flag ignored when no argument tty",
53-
tty: true,
54-
input: "--yes",
55-
output: DeleteOptions{Confirmed: false}, // --yes should be ignored
54+
name: "yes flag ignored when no argument tty",
55+
tty: true,
56+
input: "--yes",
57+
output: DeleteOptions{Confirmed: false}, // --yes should be ignored
58+
wantErr: false,
59+
wantStderr: "Warning: `--yes` is ignored since no repository was specified\n",
5660
},
5761
{
58-
name: "yes flag error when no argument notty",
59-
input: "--yes",
60-
wantErr: true,
61-
errMsg: "cannot non-interactively delete current repository. Please specify a repository or run interactively",
62+
name: "yes flag error when no argument notty",
63+
input: "--yes",
64+
wantErr: true,
65+
wantErrMsg: "cannot non-interactively delete current repository. Please specify a repository or run interactively",
66+
wantStderr: "Error: cannot non-interactively delete current repository. Please specify a repository or run interactively\n",
6267
},
6368
{
64-
name: "confirm flag error when no argument notty",
65-
input: "--confirm",
66-
wantErr: true,
67-
errMsg: "cannot non-interactively delete current repository. Please specify a repository or run interactively",
69+
name: "confirm flag error when no argument notty",
70+
input: "--confirm",
71+
wantErr: true,
72+
wantErrMsg: "cannot non-interactively delete current repository. Please specify a repository or run interactively",
73+
wantStderr: "Error: cannot non-interactively delete current repository. Please specify a repository or run interactively\n",
6874
},
6975
{
70-
name: "confirm flag also ignored when no argument tty",
71-
tty: true,
72-
input: "--confirm",
73-
output: DeleteOptions{Confirmed: false}, // --confirm should also be ignored
76+
name: "confirm flag also ignored when no argument tty",
77+
tty: true,
78+
input: "--confirm",
79+
output: DeleteOptions{Confirmed: false}, // --confirm should also be ignored
80+
wantStderr: "Warning: `--yes` is ignored since no repository was specified\n",
81+
// Note: This does not confuse the user, as deprecation warnings are shown: "Flag --confirm has been deprecated, use `--yes` instead"
7482
},
7583
}
7684
for _, tt := range tests {
7785
t.Run(tt.name, func(t *testing.T) {
78-
ios, _, _, _ := iostreams.Test()
86+
ios, _, _, stdErr := iostreams.Test()
7987
ios.SetStdinTTY(tt.tty)
8088
ios.SetStdoutTTY(tt.tty)
8189
f := &cmdutil.Factory{
@@ -91,12 +99,14 @@ func TestNewCmdDelete(t *testing.T) {
9199
cmd.SetArgs(argv)
92100
cmd.SetIn(&bytes.Buffer{})
93101
cmd.SetOut(&bytes.Buffer{})
94-
cmd.SetErr(&bytes.Buffer{})
102+
cmd.SetErr(stdErr)
95103

96104
_, err = cmd.ExecuteC()
105+
106+
assert.Equal(t, tt.wantStderr, stdErr.String())
97107
if tt.wantErr {
98108
assert.Error(t, err)
99-
assert.Equal(t, tt.errMsg, err.Error())
109+
assert.Equal(t, tt.wantErrMsg, err.Error())
100110
return
101111
}
102112
assert.NoError(t, err)

0 commit comments

Comments
 (0)