fix(release): refuse a stray true or false word after --draft and --prerelease on release edit

Signed-off-by: bircni <bircni@icloud.com>
This commit is contained in:
bircni committed 2026-10-18 17:14:46 +02:00
1 parent 7437f45d9a
commit f75568a8df
2 files changed
+22

No files matched your search

+19
View File
@@ -309,6 +309,22 @@ $ tea release create v1.1.0-rc1 --target release/1.1 --draft --prerelease --titl
return command
}
// rejectSwitchValue refuses the old tea syntax "--draft false": a switch reads no value, so the
// word would be edited as one more release after the switch was applied as true.
func rejectSwitchValue(cmd *cobra.Command, args []string, switches ...string) error {
for _, name := range switches {
if !cmd.Flags().Changed(name) {
continue
}
for _, arg := range args {
if strings.EqualFold(arg, "true") || strings.EqualFold(arg, "false") {
return clierr.Wrap(clierr.Usage, fmt.Errorf("--%s takes no value; use --%s or --%s=false", name, name, name))
}
}
}
return nil
}
func (a *application) releaseEditCommand() *cobra.Command {
var fields releaseFields
command := &cobra.Command{
@@ -320,6 +336,9 @@ $ tea release edit v1.0.0-rc1 v1.0.0-rc2 --prerelease=false`,
RunE: func(cmd *cobra.Command, args []string) (runErr error) {
var editorDraft terminal.Draft
defer finishDraft(&editorDraft, &runErr)
if err := rejectSwitchValue(cmd, args, "draft", "prerelease"); err != nil {
return err
}
if err := validateTextSources(cmd, "notes", "notes-file"); err != nil {
return err
}
+3
View File
@@ -145,6 +145,9 @@ func TestUsageErrorsPrecedeRequests(t *testing.T) {
{[]string{"release", "create", "--body-file", "-"}, "--notes-file - requires a tag"},
{[]string{"release", "edit", "v1"}, "supply release fields to edit"},
{[]string{"release", "edit", "v1", "v2", "--tag", "v3"}, "--tag requires one release and a nonempty new tag"},
{[]string{"release", "edit", "v1", "--draft", "false"}, "--draft takes no value; use --draft or --draft=false"},
{[]string{"release", "edit", "v1", "-d", "false", "-p", "False"}, "--draft takes no value; use --draft or --draft=false"},
{[]string{"release", "edit", "v1", "v2", "--prerelease", "TRUE"}, "--prerelease takes no value; use --prerelease or --prerelease=false"},
{[]string{"repo", "create"}, "missing required input: supply --name"},
{[]string{"repo", "create", "acme/bad/name"}, "repository name must be nonempty, at most 100 bytes, and contain no path separators or whitespace"},
{[]string{"repo", "create", "name", "--name", "other"}, "supply name as an argument or --name, not both"},