fix(repo): reject --repo on commands that act on no repository

tea repo list -R acme/service listed the account's repositories and
tea repo create foo -R alice/project created alice/foo: the flag was
silently ignored. repo list, repo create, repo migrate and search repo
now fail with a usage error that suggests the intended command, such as
"--repo is not used by repo list; did you mean: tea repo list acme".

repo list takes the owner as an argument (--owner still works), and
repo create accepts OWNER/NAME, creating in the organization OWNER.

Signed-off-by: bircni <bircni@icloud.com>
This commit is contained in:
bircni committed 2026-10-11 23:51:43 +02:00
1 parent ea2e9aadbb
commit 2330d174ea
7 files changed
+96 -7

No files matched your search

+25 -1
View File
@@ -5,9 +5,11 @@ package app
import (
"errors"
"strings"
"gitea.dev/tea/internal/clierr"
"gitea.dev/tea/internal/services"
"gitea.dev/tea/internal/settings"
"gitea.dev/tea/internal/terminal"
"github.com/spf13/cobra"
)
@@ -24,10 +26,32 @@ func (a *application) repositoryArgument(args []string) error {
return nil
}
// rejectRepoFlag fails when --repo is passed to a command that acts on no repository; suggest
// words the command the user probably meant for the owner that --repo names.
func (a *application) rejectRepoFlag(cmd *cobra.Command, suggest func(owner string) string) error {
if a.options.repo == "" {
return nil
}
text := "--repo is not used by " + strings.TrimPrefix(cmd.CommandPath(), cmd.Root().Name()+" ")
if ref, err := settings.ParseRepository(a.options.repo, nil); err == nil && ref.Owner != "" {
text += "; did you mean: " + suggest(ref.Owner)
}
return clierr.Wrap(clierr.Usage, errors.New(text))
}
func (a *application) repoCommand() *cobra.Command {
group := &cobra.Command{Use: "repo", Short: "Work with Gitea repositories"}
var opts services.RepositoryListOptions
list := &cobra.Command{Use: "list", Short: "List your repositories", Args: argsExact(0), RunE: func(cmd *cobra.Command, _ []string) error {
list := &cobra.Command{Use: "list [<owner>]", Short: "List your repositories", Args: usageArgs(cobra.MaximumNArgs(1)), RunE: func(cmd *cobra.Command, args []string) error {
if err := a.rejectRepoFlag(cmd, func(owner string) string { return "tea repo list " + owner }); err != nil {
return err
}
if len(args) > 0 {
if cmd.Flags().Changed("owner") {
return clierr.Wrap(clierr.Usage, errors.New("supply the owner as an argument or --owner, not both"))
}
opts.Owner = args[0]
}
if err := validateRepositoryKind(opts.Kind); err != nil {
return err
}