preview PRs and issues in the terminal with -p
This commit is contained in:
parent
f0ab533bbc
commit
4925c3cf01
7 changed files with 211 additions and 14 deletions
|
|
@ -34,6 +34,8 @@ func init() {
|
|||
issueListCmd.Flags().StringSliceP("label", "l", nil, "Filter by label")
|
||||
issueListCmd.Flags().StringP("state", "s", "", "Filter by state: {open|closed|all}")
|
||||
issueListCmd.Flags().IntP("limit", "L", 30, "Maximum number of issues to fetch")
|
||||
|
||||
issueViewCmd.Flags().BoolP("preview", "p", false, "Preview PR in termianl")
|
||||
}
|
||||
|
||||
var issueCmd = &cobra.Command{
|
||||
|
|
@ -217,8 +219,39 @@ func issueView(cmd *cobra.Command, args []string) error {
|
|||
}
|
||||
openURL := issue.URL
|
||||
|
||||
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL)
|
||||
return utils.OpenInBrowser(openURL)
|
||||
preview, err := cmd.Flags().GetBool("preview")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if preview {
|
||||
coloredLabels := labelList(*issue)
|
||||
if coloredLabels != "" {
|
||||
coloredLabels = utils.Gray(fmt.Sprintf(" (%s)", coloredLabels))
|
||||
}
|
||||
meta := "opened by %s. %d comment"
|
||||
if issue.Comments.TotalCount != 1 {
|
||||
meta += "s."
|
||||
} else {
|
||||
meta += "."
|
||||
}
|
||||
meta += coloredLabels
|
||||
|
||||
fmt.Println(utils.Bold(issue.Title))
|
||||
fmt.Println(utils.Gray(fmt.Sprintf(meta,
|
||||
issue.Author.Login,
|
||||
issue.Comments.TotalCount,
|
||||
)))
|
||||
fmt.Println()
|
||||
fmt.Println(utils.RenderMarkdown(issue.Body))
|
||||
fmt.Println()
|
||||
fmt.Println(utils.Gray(fmt.Sprintf("View this issue on GitHub: %s", openURL)))
|
||||
return nil
|
||||
} else {
|
||||
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL)
|
||||
return utils.OpenInBrowser(openURL)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var issueURLRE = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/issues/(\d+)`)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ func init() {
|
|||
prListCmd.Flags().StringP("base", "B", "", "Filter by base branch")
|
||||
prListCmd.Flags().StringSliceP("label", "l", nil, "Filter by label")
|
||||
prListCmd.Flags().StringP("assignee", "a", "", "Filter by assignee")
|
||||
|
||||
prViewCmd.Flags().BoolP("preview", "p", false, "Preview PR in termianl")
|
||||
}
|
||||
|
||||
var prCmd = &cobra.Command{
|
||||
|
|
@ -253,9 +255,15 @@ func prView(cmd *cobra.Command, args []string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
preview, err := cmd.Flags().GetBool("preview")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var openURL string
|
||||
var pr *api.PullRequest
|
||||
if len(args) > 0 {
|
||||
pr, err := prFromArg(apiClient, baseRepo, args[0])
|
||||
pr, err = prFromArg(apiClient, baseRepo, args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -269,7 +277,7 @@ func prView(cmd *cobra.Command, args []string) error {
|
|||
if prNumber > 0 {
|
||||
openURL = fmt.Sprintf("https://github.com/%s/%s/pull/%d", baseRepo.RepoOwner(), baseRepo.RepoName(), prNumber)
|
||||
} else {
|
||||
pr, err := api.PullRequestForBranch(apiClient, baseRepo, branchWithOwner)
|
||||
pr, err = api.PullRequestForBranch(apiClient, baseRepo, branchWithOwner)
|
||||
if err != nil {
|
||||
var notFoundErr *api.NotFoundError
|
||||
if errors.As(err, ¬FoundErr) {
|
||||
|
|
@ -282,8 +290,31 @@ func prView(cmd *cobra.Command, args []string) error {
|
|||
}
|
||||
}
|
||||
|
||||
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL)
|
||||
return utils.OpenInBrowser(openURL)
|
||||
if preview {
|
||||
meta := "%s wants to merge %d commit"
|
||||
if pr.Commits.TotalCount == 1 {
|
||||
meta += " "
|
||||
} else {
|
||||
meta += "s "
|
||||
}
|
||||
meta += "into %s from %s"
|
||||
fmt.Println(utils.Bold(pr.Title))
|
||||
fmt.Println(utils.Gray(fmt.Sprintf(meta,
|
||||
pr.Author.Login,
|
||||
pr.Commits.TotalCount,
|
||||
pr.BaseRefName,
|
||||
pr.HeadRefName,
|
||||
)))
|
||||
fmt.Println()
|
||||
fmt.Println(utils.RenderMarkdown(pr.Body))
|
||||
fmt.Println()
|
||||
fmt.Println(utils.Gray(fmt.Sprintf("View this PR on GitHub: %s", openURL)))
|
||||
|
||||
return nil
|
||||
} else {
|
||||
fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL)
|
||||
return utils.OpenInBrowser(openURL)
|
||||
}
|
||||
}
|
||||
|
||||
var prURLRE = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue