-
Notifications
You must be signed in to change notification settings - Fork 33
/
github.go
87 lines (76 loc) · 2.21 KB
/
github.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
"context"
"log"
"strings"
"github.com/google/go-github/v34/github"
)
func getGithubRepositories(
client interface{},
service string, githubRepoType string, githubNamespaceWhitelist []string,
gitlabProjectVisibility string, gitlabProjectMembershipType string,
ignoreFork bool,
) ([]*Repository, error) {
if client == nil {
log.Fatalf("Couldn't acquire a client to talk to %s", service)
}
var repositories []*Repository
var cloneURL string
ctx := context.Background()
if githubRepoType == "starred" {
options := github.ActivityListStarredOptions{}
for {
stars, resp, err := client.(*github.Client).Activity.ListStarred(ctx, "", &options)
if err == nil {
for _, star := range stars {
if *star.Repository.Fork && ignoreFork {
continue
}
namespace := strings.Split(*star.Repository.FullName, "/")[0]
if useHTTPSClone != nil && *useHTTPSClone {
cloneURL = *star.Repository.CloneURL
} else {
cloneURL = *star.Repository.SSHURL
}
repositories = append(repositories, &Repository{CloneURL: cloneURL, Name: *star.Repository.Name, Namespace: namespace, Private: *star.Repository.Private})
}
} else {
return nil, err
}
if resp.NextPage == 0 {
break
}
options.ListOptions.Page = resp.NextPage
}
return repositories, nil
}
options := github.RepositoryListOptions{Type: githubRepoType}
githubNamespaceWhitelistLength := len(githubNamespaceWhitelist)
for {
repos, resp, err := client.(*github.Client).Repositories.List(ctx, "", &options)
if err == nil {
for _, repo := range repos {
if *repo.Fork && ignoreFork {
continue
}
namespace := strings.Split(*repo.FullName, "/")[0]
if githubNamespaceWhitelistLength > 0 && !contains(githubNamespaceWhitelist, namespace) {
continue
}
if useHTTPSClone != nil && *useHTTPSClone {
cloneURL = *repo.CloneURL
} else {
cloneURL = *repo.SSHURL
}
repositories = append(repositories, &Repository{CloneURL: cloneURL, Name: *repo.Name, Namespace: namespace, Private: *repo.Private})
}
} else {
return nil, err
}
if resp.NextPage == 0 {
break
}
options.ListOptions.Page = resp.NextPage
}
return repositories, nil
}