commands/iteration/list/iteration_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 IterationListOptions struct { Group string Page int PerPage int OutputFormat string } func NewCmdList(f *cmdutils.Factory) *cobra.Command { opts := &IterationListOptions{} iterationListCmd := &cobra.Command{ Use: "list [flags]", Short: `List project iterations`, Long: ``, Aliases: []string{"ls"}, Example: heredoc.Doc(` - glab iteration list - glab iteration ls - glab iteration list -R owner/repository - glab iteration 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 } iterationApiOpts := &api.ListProjectIterationsOptions{} iterationApiOpts.IncludeAncestors = gitlab.Ptr(true) if p := opts.Page; p != 0 { iterationApiOpts.Page = p } if pp := opts.PerPage; pp != 0 { iterationApiOpts.PerPage = pp } var iterationBuilder strings.Builder if opts.Group != "" { iterations, err := api.ListGroupIterations(apiClient, opts.Group, iterationApiOpts) if err != nil { return err } if opts.OutputFormat == "json" { iterationListJSON, _ := json.Marshal(iterations) fmt.Fprintln(f.IO.StdOut, string(iterationListJSON)) } else { fmt.Fprintf(f.IO.StdOut, "Showing iteration %d of %d for group %s.\n\n", len(iterations), len(iterations), opts.Group) for _, iteration := range iterations { iterationBuilder.WriteString(formatIterationInfo(iteration.Description, iteration.Title, iteration.WebURL)) } } } else { iterations, err := api.ListProjectIterations(apiClient, repo.FullName(), iterationApiOpts) if err != nil { return err } if opts.OutputFormat == "json" { iterationListJSON, _ := json.Marshal(iterations) fmt.Fprintln(f.IO.StdOut, string(iterationListJSON)) } else { fmt.Fprintf(f.IO.StdOut, "Showing iteration %d of %d on %s.\n\n", len(iterations), len(iterations), repo.FullName()) for _, iteration := range iterations { iterationBuilder.WriteString(formatIterationInfo(iteration.Description, iteration.Title, iteration.WebURL)) } } } fmt.Fprintln(f.IO.StdOut, utils.Indent(iterationBuilder.String(), " ")) return nil }, } iterationListCmd.Flags().IntVarP(&opts.Page, "page", "p", 1, "Page number.") iterationListCmd.Flags().IntVarP(&opts.PerPage, "per-page", "P", 30, "Number of items to list per page.") iterationListCmd.Flags().StringVarP(&opts.OutputFormat, "output", "F", "text", "Format output as: text, json.") iterationListCmd.Flags().StringVarP(&opts.Group, "group", "g", "", "List iterations for a group.") return iterationListCmd } func formatIterationInfo(description string, title string, webURL string) string { if description != "" { description = fmt.Sprintf(" -> %s", description) } return fmt.Sprintf("%s%s (%s)\n", title, description, webURL) }