109 lines
3.1 KiB
Go
109 lines
3.1 KiB
Go
|
package pull_request
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"gitee_cli/config"
|
|||
|
"gitee_cli/internal/api/enterprises"
|
|||
|
"gitee_cli/internal/api/pull_request"
|
|||
|
"gitee_cli/utils"
|
|||
|
"gitee_cli/utils/git_utils"
|
|||
|
"gitee_cli/utils/tui"
|
|||
|
"github.com/charmbracelet/bubbles/table"
|
|||
|
"github.com/fatih/color"
|
|||
|
"github.com/pkg/browser"
|
|||
|
"github.com/spf13/cobra"
|
|||
|
"os"
|
|||
|
"strconv"
|
|||
|
)
|
|||
|
|
|||
|
var ListCmd = &cobra.Command{
|
|||
|
Use: "list",
|
|||
|
Short: "List pull requests related",
|
|||
|
Run: func(cmd *cobra.Command, args []string) {
|
|||
|
keyword, _ := cmd.Flags().GetString("keyword")
|
|||
|
scope, _ := cmd.Flags().GetString("scope")
|
|||
|
commitSha, _ := cmd.Flags().GetString("commit")
|
|||
|
openInBrowser, _ := cmd.Flags().GetBool("open")
|
|||
|
convertEntUrl, _ := cmd.Flags().GetBool("convert")
|
|||
|
if commitSha != "" {
|
|||
|
pathWithNamespace, err := git_utils.ParseCurrentRepo()
|
|||
|
if err != nil {
|
|||
|
color.Red(err.Error())
|
|||
|
return
|
|||
|
}
|
|||
|
pr, err := pull_request.FindPullRequestByIid(commitSha, pathWithNamespace)
|
|||
|
if err != nil {
|
|||
|
color.Red(err.Error())
|
|||
|
return
|
|||
|
}
|
|||
|
if openInBrowser {
|
|||
|
browser.OpenURL(pr.HtmlUrl)
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Printf("该 commit 由 PR: 「%v」 合入,访问地址: %s\n", utils.Green(pr.Title), utils.Blue(pr.HtmlUrl))
|
|||
|
return
|
|||
|
}
|
|||
|
pullRequests := pull_request.List(scope)
|
|||
|
if keyword != "" {
|
|||
|
pullRequests = pull_request.FuzzySearch(pullRequests, keyword)
|
|||
|
}
|
|||
|
if len(pullRequests) == 0 {
|
|||
|
color.Cyan("无匹配的 Pull requests.")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
columns := []table.Column{
|
|||
|
{Title: "PR 标题", Width: 60},
|
|||
|
{Title: "IID", Width: 10},
|
|||
|
{Title: "创建人", Width: 12},
|
|||
|
{Title: fmt.Sprintf("%s审查状态", config.Conf.UserName), Width: 18},
|
|||
|
{Title: "冲突", Width: 10},
|
|||
|
{Title: "是否可合入", Width: 10},
|
|||
|
}
|
|||
|
rows := make([]table.Row, 0)
|
|||
|
for _, pr := range pullRequests {
|
|||
|
mergeCheckMsg := "No"
|
|||
|
if pr.CanMergeCheck {
|
|||
|
mergeCheckMsg = utils.Green("Yes")
|
|||
|
}
|
|||
|
conflictMsg := "No"
|
|||
|
if !pr.Mergeable {
|
|||
|
conflictMsg = utils.Magenta("Yes")
|
|||
|
}
|
|||
|
acceptMsg := utils.Magenta("未审查")
|
|||
|
if pr.User.Id == 0 {
|
|||
|
acceptMsg = "-"
|
|||
|
} else if pr.User.Accept {
|
|||
|
acceptMsg = utils.Green("通过")
|
|||
|
}
|
|||
|
rows = append(rows, table.Row{pr.Title, strconv.Itoa(pr.Number), pr.Creator.Name, acceptMsg, conflictMsg, mergeCheckMsg})
|
|||
|
}
|
|||
|
|
|||
|
prTable := tui.NewTable(enterprises.Enterprise{}, tui.PullRequest, columns, rows)
|
|||
|
|
|||
|
if convertEntUrl {
|
|||
|
os.Setenv("CONVERT_ENT_URL", "true")
|
|||
|
}
|
|||
|
|
|||
|
defer func() {
|
|||
|
os.Unsetenv("CONVERT_ENT_URL")
|
|||
|
}()
|
|||
|
//var model tea.Model
|
|||
|
var err error
|
|||
|
if _, err = prTable.Run(); err != nil {
|
|||
|
color.Red("pr渲染失败!")
|
|||
|
os.Exit(1)
|
|||
|
}
|
|||
|
//utils.PrRender(pullRequests, convert)
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
func init() {
|
|||
|
ListCmd.Flags().StringP("keyword", "k", "", "filter pr by keyword")
|
|||
|
//ListCmd.Flags().BoolP("reviewed", "r", false, "filter pr by review state")
|
|||
|
ListCmd.Flags().StringP("scope", "s", "", "filter pr by scope (owner)")
|
|||
|
ListCmd.Flags().StringP("commit", "c", "", "find pr by commit")
|
|||
|
ListCmd.Flags().BoolP("open", "o", false, "open in browser, only effective for searching pr via commit sha")
|
|||
|
ListCmd.Flags().BoolP("convert", "", false, "transfer url in enterprise")
|
|||
|
}
|