commands/label/list/label_list.go (96 lines of code) (raw):

package list import ( "encoding/json" "fmt" "strings" "github.com/MakeNowJust/heredoc/v2" "gitlab.com/gitlab-org/cli/api" "gitlab.com/gitlab-org/cli/commands/cmdutils" "gitlab.com/gitlab-org/cli/pkg/utils" "github.com/spf13/cobra" gitlab "gitlab.com/gitlab-org/api/client-go" ) type LabelListOptions struct { Group string Page int PerPage int OutputFormat string } func NewCmdList(f *cmdutils.Factory) *cobra.Command { opts := &LabelListOptions{} labelListCmd := &cobra.Command{ Use: "list [flags]", Short: `List labels in the repository.`, Long: ``, Aliases: []string{"ls"}, Example: heredoc.Doc(` - glab label list - glab label ls - glab label list -R owner/repository - glab label list -g mygroup `), Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { var err error apiClient, err := f.HttpClient() if err != nil { return err } repo, err := f.BaseRepo() if err != nil { return err } labelApiOpts := &api.ListLabelsOptions{} labelApiOpts.WithCounts = gitlab.Ptr(true) if p := opts.Page; p != 0 { labelApiOpts.Page = p } if pp := opts.PerPage; pp != 0 { labelApiOpts.PerPage = pp } var labelBuilder strings.Builder if opts.Group != "" { labels, err := api.ListGroupLabels(apiClient, opts.Group, labelApiOpts) if err != nil { return err } if opts.OutputFormat == "json" { labelListJSON, _ := json.Marshal(labels) fmt.Fprintln(f.IO.StdOut, string(labelListJSON)) } else { fmt.Fprintf(f.IO.StdOut, "Showing label %d of %d for group %s.\n\n", len(labels), len(labels), opts.Group) for _, label := range labels { labelBuilder.WriteString(formatLabelInfo(label.Description, label.Name, label.Color)) } } } else { labels, err := api.ListLabels(apiClient, repo.FullName(), labelApiOpts) if err != nil { return err } if opts.OutputFormat == "json" { labelListJSON, _ := json.Marshal(labels) fmt.Fprintln(f.IO.StdOut, string(labelListJSON)) } else { fmt.Fprintf(f.IO.StdOut, "Showing label %d of %d on %s.\n\n", len(labels), len(labels), repo.FullName()) for _, label := range labels { labelBuilder.WriteString(formatLabelInfo(label.Description, label.Name, label.Color)) } } } fmt.Fprintln(f.IO.StdOut, utils.Indent(labelBuilder.String(), " ")) return nil }, } labelListCmd.Flags().IntVarP(&opts.Page, "page", "p", 1, "Page number.") labelListCmd.Flags().IntVarP(&opts.PerPage, "per-page", "P", 30, "Number of items to list per page.") labelListCmd.Flags().StringVarP(&opts.OutputFormat, "output", "F", "text", "Format output as: text, json.") labelListCmd.Flags().StringVarP(&opts.Group, "group", "g", "", "List labels for a group.") return labelListCmd } func formatLabelInfo(description string, name string, color string) string { if description != "" { description = fmt.Sprintf(" -> %s", description) } return fmt.Sprintf("%s%s (%s)\n", name, description, color) }