mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
194 lines
4.6 KiB
Go
194 lines
4.6 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(settings.apiKey, glb.WithBaseURL(baseURL))
|
|
|
|
user, _, err := gitlabClient.Users.CurrentUser()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctx := &context{
|
|
client: gitlabClient,
|
|
user: user,
|
|
}
|
|
|
|
return ctx, 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
|
|
}
|