1package gitlab 2 3import ( 4 glb "github.com/xanzy/go-gitlab" 5) 6 7type GitlabProject struct { 8 gitlab *glb.Client 9 Path string 10 11 MergeRequests []*glb.MergeRequest 12 RemoteProject *glb.Project 13} 14 15func NewGitlabProject(name string, namespace string, gitlab *glb.Client) *GitlabProject { 16 path := namespace + "/" + name 17 project := GitlabProject{ 18 gitlab: gitlab, 19 Path: path, 20 } 21 22 return &project 23} 24 25// Refresh reloads the gitlab data via the Gitlab API 26func (project *GitlabProject) Refresh() { 27 project.MergeRequests, _ = project.loadMergeRequests() 28 project.RemoteProject, _ = project.loadRemoteProject() 29} 30 31/* -------------------- Counts -------------------- */ 32 33func (project *GitlabProject) IssueCount() int { 34 if project.RemoteProject == nil { 35 return 0 36 } 37 38 return project.RemoteProject.OpenIssuesCount 39} 40 41func (project *GitlabProject) MergeRequestCount() int { 42 return len(project.MergeRequests) 43} 44 45func (project *GitlabProject) StarCount() int { 46 if project.RemoteProject == nil { 47 return 0 48 } 49 50 return project.RemoteProject.StarCount 51} 52 53/* -------------------- Unexported Functions -------------------- */ 54 55// myMergeRequests returns a list of merge requests created by username on this project 56func (project *GitlabProject) myMergeRequests(username string) []*glb.MergeRequest { 57 mrs := []*glb.MergeRequest{} 58 59 for _, mr := range project.MergeRequests { 60 user := mr.Author 61 62 if user.Username == username { 63 mrs = append(mrs, mr) 64 } 65 } 66 67 return mrs 68} 69 70// myApprovalRequests returns a list of merge requests for which username has been 71// requested to approve 72func (project *GitlabProject) myApprovalRequests(username string) []*glb.MergeRequest { 73 mrs := []*glb.MergeRequest{} 74 75 for _, mr := range project.MergeRequests { 76 approvers, _, err := project.gitlab.MergeRequests.GetMergeRequestApprovals(project.Path, mr.IID) 77 if err != nil { 78 continue 79 } 80 for _, approver := range approvers.Approvers { 81 if approver.User.Username == username { 82 mrs = append(mrs, mr) 83 } 84 } 85 } 86 87 return mrs 88} 89 90func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) { 91 state := "opened" 92 opts := glb.ListProjectMergeRequestsOptions{ 93 State: &state, 94 } 95 96 mrs, _, err := project.gitlab.MergeRequests.ListProjectMergeRequests(project.Path, &opts) 97 98 if err != nil { 99 return nil, err 100 } 101 102 return mrs, nil 103} 104 105func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) { 106 projectsitory, _, err := project.gitlab.Projects.GetProject(project.Path, nil) 107 108 if err != nil { 109 return nil, err 110 } 111 112 return projectsitory, nil 113} 114