in commands/issuable/view/issuable_view.go [43:137]
func NewCmdView(f *cmdutils.Factory, issueType issuable.IssueType) *cobra.Command {
examplePath := "issues/123"
if issueType == issuable.TypeIncident {
examplePath = "issues/incident/123"
}
opts := &ViewOpts{
IO: f.IO,
}
issueViewCmd := &cobra.Command{
Use: "view <id>",
Short: fmt.Sprintf(`Display the title, body, and other information about an %s.`, issueType),
Long: ``,
Aliases: []string{"show"},
Example: heredoc.Doc(fmt.Sprintf(`
- glab %[1]s view 123
- glab %[1]s show 123
- glab %[1]s view --web 123
- glab %[1]s view --comments 123
- glab %[1]s view https://gitlab.com/NAMESPACE/REPO/-/%s
`, issueType, examplePath)),
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
apiClient, err := f.HttpClient()
if err != nil {
return err
}
cfg, _ := f.Config()
issue, baseRepo, err := issueutils.IssueFromArg(apiClient, f.BaseRepo, args[0])
if err != nil {
return err
}
opts.Issue = issue
valid, msg := issuable.ValidateIncidentCmd(issueType, "view", opts.Issue)
if !valid {
fmt.Fprintln(opts.IO.StdErr, msg)
return nil
}
// open in browser if --web flag is specified
if opts.Web {
if f.IO.IsaTTY && f.IO.IsErrTTY {
fmt.Fprintf(opts.IO.StdErr, "Opening %s in your browser.\n", utils.DisplayURL(opts.Issue.WebURL))
}
browser, _ := cfg.Get(baseRepo.RepoHost(), "browser")
return utils.OpenInBrowser(opts.Issue.WebURL, browser)
}
if opts.ShowComments {
l := &gitlab.ListIssueNotesOptions{
Sort: gitlab.Ptr("asc"),
}
if opts.CommentPageNumber != 0 {
l.Page = opts.CommentPageNumber
}
if opts.CommentLimit != 0 {
l.PerPage = opts.CommentLimit
}
opts.Notes, err = api.ListIssueNotes(apiClient, baseRepo.FullName(), opts.Issue.IID, l)
if err != nil {
return err
}
}
glamourStyle, _ := cfg.Get(baseRepo.RepoHost(), "glamour_style")
f.IO.ResolveBackgroundColor(glamourStyle)
err = f.IO.StartPager()
if err != nil {
return err
}
defer f.IO.StopPager()
if opts.OutputFormat == "json" {
return printJSONIssue(opts)
}
if f.IO.IsErrTTY && f.IO.IsaTTY {
return printTTYIssuePreview(opts)
}
return printRawIssuePreview(opts)
},
}
issueViewCmd.Flags().BoolVarP(&opts.ShowComments, "comments", "c", false, fmt.Sprintf("Show %s comments and activities.", issueType))
issueViewCmd.Flags().BoolVarP(&opts.ShowSystemLogs, "system-logs", "s", false, "Show system activities and logs.")
issueViewCmd.Flags().BoolVarP(&opts.Web, "web", "w", false, fmt.Sprintf("Open %s in a browser. Uses the default browser, or the browser specified in the $BROWSER variable.", issueType))
issueViewCmd.Flags().IntVarP(&opts.CommentPageNumber, "page", "p", 1, "Page number.")
issueViewCmd.Flags().IntVarP(&opts.CommentLimit, "per-page", "P", 20, "Number of items to list per page.")
issueViewCmd.Flags().StringVarP(&opts.OutputFormat, "output", "F", "text", "Format output as: text, json.")
return issueViewCmd
}