mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
114 lines
2.5 KiB
Go
114 lines
2.5 KiB
Go
package gitlab
|
|
|
|
import (
|
|
glb "github.com/xanzy/go-gitlab"
|
|
)
|
|
|
|
type GitlabProject struct {
|
|
gitlab *glb.Client
|
|
Path string
|
|
|
|
MergeRequests []*glb.MergeRequest
|
|
RemoteProject *glb.Project
|
|
}
|
|
|
|
func NewGitlabProject(name string, namespace string, gitlab *glb.Client) *GitlabProject {
|
|
path := namespace + "/" + name
|
|
project := GitlabProject{
|
|
gitlab: gitlab,
|
|
Path: path,
|
|
}
|
|
|
|
return &project
|
|
}
|
|
|
|
// Refresh reloads the gitlab data via the Gitlab API
|
|
func (project *GitlabProject) Refresh() {
|
|
project.MergeRequests, _ = project.loadMergeRequests()
|
|
project.RemoteProject, _ = project.loadRemoteProject()
|
|
}
|
|
|
|
/* -------------------- Counts -------------------- */
|
|
|
|
func (project *GitlabProject) IssueCount() int {
|
|
if project.RemoteProject == nil {
|
|
return 0
|
|
}
|
|
|
|
return project.RemoteProject.OpenIssuesCount
|
|
}
|
|
|
|
func (project *GitlabProject) MergeRequestCount() int {
|
|
return len(project.MergeRequests)
|
|
}
|
|
|
|
func (project *GitlabProject) StarCount() int {
|
|
if project.RemoteProject == nil {
|
|
return 0
|
|
}
|
|
|
|
return project.RemoteProject.StarCount
|
|
}
|
|
|
|
/* -------------------- Unexported Functions -------------------- */
|
|
|
|
// myMergeRequests returns a list of merge requests created by username on this project
|
|
func (project *GitlabProject) myMergeRequests(username string) []*glb.MergeRequest {
|
|
mrs := []*glb.MergeRequest{}
|
|
|
|
for _, mr := range project.MergeRequests {
|
|
user := mr.Author
|
|
|
|
if user.Username == username {
|
|
mrs = append(mrs, mr)
|
|
}
|
|
}
|
|
|
|
return mrs
|
|
}
|
|
|
|
// myApprovalRequests returns a list of merge requests for which username has been
|
|
// requested to approve
|
|
func (project *GitlabProject) myApprovalRequests(username string) []*glb.MergeRequest {
|
|
mrs := []*glb.MergeRequest{}
|
|
|
|
for _, mr := range project.MergeRequests {
|
|
approvers, _, err := project.gitlab.MergeRequests.GetMergeRequestApprovals(project.Path, mr.IID)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, approver := range approvers.Approvers {
|
|
if approver.User.Username == username {
|
|
mrs = append(mrs, mr)
|
|
}
|
|
}
|
|
}
|
|
|
|
return mrs
|
|
}
|
|
|
|
func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
|
|
state := "opened"
|
|
opts := glb.ListProjectMergeRequestsOptions{
|
|
State: &state,
|
|
}
|
|
|
|
mrs, _, err := project.gitlab.MergeRequests.ListProjectMergeRequests(project.Path, &opts)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return mrs, nil
|
|
}
|
|
|
|
func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) {
|
|
projectsitory, _, err := project.gitlab.Projects.GetProject(project.Path, nil)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return projectsitory, nil
|
|
}
|