1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
wtf/modules/gitlab/gitlab_project.go
Chris Cummer cde904ff08
Use errcheck to find unhandled errors (#795)
Signed-off-by: Chris Cummer <chriscummer@me.com>
2019-12-17 08:26:16 -08:00

201 lines
4.7 KiB
Go

package gitlab
import (
glb "github.com/xanzy/go-gitlab"
)
type context struct {
client *glb.Client
user *glb.User
}
func newContext(settings *Settings) (*context, error) {
baseURL := settings.domain
gitlabClient := glb.NewClient(nil, settings.apiKey)
if baseURL != "" {
err := gitlabClient.SetBaseURL(baseURL)
if err != nil {
return nil, err
}
}
user, _, err := gitlabClient.Users.CurrentUser()
if err != nil {
return nil, err
}
context := context{
client: gitlabClient,
user: user,
}
return &context, nil
}
type GitlabProject struct {
context *context
path string
MergeRequests []*glb.MergeRequest
AssignedMergeRequests []*glb.MergeRequest
AuthoredMergeRequests []*glb.MergeRequest
AssignedIssues []*glb.Issue
AuthoredIssues []*glb.Issue
RemoteProject *glb.Project
}
func NewGitlabProject(context *context, projectPath string) *GitlabProject {
project := GitlabProject{
context: context,
path: projectPath,
}
return &project
}
// Refresh reloads the gitlab data via the Gitlab API
func (project *GitlabProject) Refresh() {
project.MergeRequests, _ = project.loadMergeRequests()
project.AssignedMergeRequests, _ = project.loadAssignedMergeRequests()
project.AuthoredMergeRequests, _ = project.loadAuthoredMergeRequests()
project.AssignedIssues, _ = project.loadAssignedIssues()
project.AuthoredIssues, _ = project.loadAuthoredIssues()
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 {
return project.AuthoredMergeRequests
}
// myAssignedMergeRequests returns a list of merge requests for which username has been
// assigned
func (project *GitlabProject) myAssignedMergeRequests(username string) []*glb.MergeRequest {
return project.AssignedMergeRequests
}
// myAssignedIssues returns a list of issues for which username has been assigned
func (project *GitlabProject) myAssignedIssues(username string) []*glb.Issue {
return project.AssignedIssues
}
// myIssues returns a list of issues created by username on this project
func (project *GitlabProject) myIssues(username string) []*glb.Issue {
return project.AuthoredIssues
}
func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
state := "opened"
opts := glb.ListProjectMergeRequestsOptions{
State: &state,
}
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
if err != nil {
return nil, err
}
return mrs, nil
}
func (project *GitlabProject) loadAssignedMergeRequests() ([]*glb.MergeRequest, error) {
state := "opened"
opts := glb.ListProjectMergeRequestsOptions{
State: &state,
AssigneeID: &project.context.user.ID,
}
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
if err != nil {
return nil, err
}
return mrs, nil
}
func (project *GitlabProject) loadAuthoredMergeRequests() ([]*glb.MergeRequest, error) {
state := "opened"
opts := glb.ListProjectMergeRequestsOptions{
State: &state,
AuthorID: &project.context.user.ID,
}
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
if err != nil {
return nil, err
}
return mrs, nil
}
func (project *GitlabProject) loadAssignedIssues() ([]*glb.Issue, error) {
state := "opened"
opts := glb.ListProjectIssuesOptions{
State: &state,
AssigneeID: &project.context.user.ID,
}
issues, _, err := project.context.client.Issues.ListProjectIssues(project.path, &opts)
if err != nil {
return nil, err
}
return issues, nil
}
func (project *GitlabProject) loadAuthoredIssues() ([]*glb.Issue, interface{}) {
state := "opened"
opts := glb.ListProjectIssuesOptions{
State: &state,
AuthorID: &project.context.user.ID,
}
issues, _, err := project.context.client.Issues.ListProjectIssues(project.path, &opts)
if err != nil {
return nil, err
}
return issues, nil
}
func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) {
projectsitory, _, err := project.context.client.Projects.GetProject(project.path, nil)
if err != nil {
return nil, err
}
return projectsitory, nil
}