mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
package gerrit
|
|
|
|
import (
|
|
glb "github.com/andygrunwald/go-gerrit"
|
|
"github.com/wtfutil/wtf/wtf"
|
|
)
|
|
|
|
type GerritProject struct {
|
|
gerrit *glb.Client
|
|
Path string
|
|
|
|
Changes *[]glb.ChangeInfo
|
|
ReviewCount int
|
|
IncomingReviews []glb.ChangeInfo
|
|
OutgoingReviews []glb.ChangeInfo
|
|
}
|
|
|
|
func NewGerritProject(path string, gerrit *glb.Client) *GerritProject {
|
|
project := GerritProject{
|
|
gerrit: gerrit,
|
|
Path: path,
|
|
}
|
|
|
|
return &project
|
|
}
|
|
|
|
// Refresh reloads the gerrit data via the Gerrit API
|
|
func (project *GerritProject) Refresh() {
|
|
username := wtf.Config.UString("wtf.mods.gerrit.username")
|
|
project.Changes, _ = project.loadChanges()
|
|
|
|
project.ReviewCount = project.countReviews(project.Changes)
|
|
project.IncomingReviews = project.myIncomingReviews(project.Changes, username)
|
|
project.OutgoingReviews = project.myOutgoingReviews(project.Changes, username)
|
|
|
|
}
|
|
|
|
/* -------------------- Counts -------------------- */
|
|
|
|
func (project *GerritProject) countReviews(changes *[]glb.ChangeInfo) int {
|
|
if changes == nil {
|
|
return 0
|
|
}
|
|
|
|
return len(*changes)
|
|
}
|
|
|
|
/* -------------------- Unexported Functions -------------------- */
|
|
|
|
// myOutgoingReviews returns a list of my outgoing reviews created by username on this project
|
|
func (project *GerritProject) myOutgoingReviews(changes *[]glb.ChangeInfo, username string) []glb.ChangeInfo {
|
|
var ors []glb.ChangeInfo
|
|
|
|
if changes == nil {
|
|
return ors
|
|
}
|
|
|
|
for _, change := range *changes {
|
|
user := change.Owner
|
|
|
|
if user.Username == username {
|
|
ors = append(ors, change)
|
|
}
|
|
}
|
|
|
|
return ors
|
|
}
|
|
|
|
// myIncomingReviews returns a list of merge requests for which username has been requested to ChangeInfo
|
|
func (project *GerritProject) myIncomingReviews(changes *[]glb.ChangeInfo, username string) []glb.ChangeInfo {
|
|
var irs []glb.ChangeInfo
|
|
|
|
if changes == nil {
|
|
return irs
|
|
}
|
|
|
|
for _, change := range *changes {
|
|
reviewers := change.Reviewers
|
|
|
|
for _, reviewer := range reviewers["REVIEWER"] {
|
|
if reviewer.Username == username {
|
|
irs = append(irs, change)
|
|
}
|
|
}
|
|
}
|
|
|
|
return irs
|
|
}
|
|
|
|
func (project *GerritProject) loadChanges() (*[]glb.ChangeInfo, error) {
|
|
opt := &glb.QueryChangeOptions{}
|
|
opt.Query = []string{"(projects:" + project.Path + "+ is:open + owner:self) " + " OR " +
|
|
"(projects:" + project.Path + " + is:open + ((reviewer:self + -owner:self + -star:ignore) + OR + assignee:self))"}
|
|
opt.AdditionalFields = []string{"DETAILED_LABELS", "DETAILED_ACCOUNTS"}
|
|
changes, _, err := project.gerrit.Changes.QueryChanges(opt)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return changes, err
|
|
}
|