gitlab.com/zaquestion/lab@v0.14.0/cmd/issue_list.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/spf13/cobra"
     8  	"github.com/xanzy/go-gitlab"
     9  	lab "github.com/zaquestion/lab/internal/gitlab"
    10  )
    11  
    12  var (
    13  	issueLabels []string
    14  	issueState  string
    15  	issueNumRet int
    16  	issueAll    bool
    17  )
    18  
    19  var issueListCmd = &cobra.Command{
    20  	Use:     "list [remote]",
    21  	Aliases: []string{"ls"},
    22  	Short:   "List issues",
    23  	Long:    ``,
    24  	Run: func(cmd *cobra.Command, args []string) {
    25  		rn, _, err := parseArgs(args)
    26  		if err != nil {
    27  			log.Fatal(err)
    28  		}
    29  
    30  		opts := gitlab.ListProjectIssuesOptions{
    31  			ListOptions: gitlab.ListOptions{
    32  				PerPage: issueNumRet,
    33  			},
    34  			Labels:  issueLabels,
    35  			State:   &issueState,
    36  			OrderBy: gitlab.String("updated_at"),
    37  		}
    38  		num := issueNumRet
    39  		if issueAll {
    40  			num = -1
    41  		}
    42  		issues, err := lab.IssueList(rn, opts, num)
    43  		if err != nil {
    44  			log.Fatal(err)
    45  		}
    46  		for _, issue := range issues {
    47  			fmt.Printf("#%d %s\n", issue.IID, issue.Title)
    48  		}
    49  	},
    50  }
    51  
    52  func init() {
    53  	issueListCmd.Flags().StringSliceVarP(
    54  		&issueLabels, "label", "l", []string{}, "Filter issues by label")
    55  	issueListCmd.Flags().StringVarP(
    56  		&issueState, "state", "s", "opened",
    57  		"Filter issues by state (opened/closed)")
    58  	issueListCmd.Flags().IntVarP(
    59  		&issueNumRet, "number", "n", 10,
    60  		"Number of issues to return")
    61  	issueListCmd.Flags().BoolVarP(&issueAll, "all", "a", false, "List all issues on the project")
    62  	issueCmd.AddCommand(issueListCmd)
    63  }