-
Notifications
You must be signed in to change notification settings - Fork 1
/
provider.go
107 lines (91 loc) · 2.47 KB
/
provider.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package gits
import (
"github.com/jenkins-x/jx/pkg/auth"
"gopkg.in/AlecAivazis/survey.v1"
"sort"
"fmt"
)
type GitProvider interface {
ListOrganisations() ([]GitOrganisation, error)
CreateRepository(org string, name string, private bool) (*GitRepository, error)
ForkRepository(originalOrg string, name string, destinationOrg string) (*GitRepository, error)
RenameRepository(org string, name string, newName string) (*GitRepository, error)
ValidateRepositoryName(org string, name string) error
CreatePullRequest(data *GitPullRequestArguments) (*GitPullRequest, error)
IsGitHub() bool
}
type GitOrganisation struct {
Login string
}
type GitRepository struct {
AllowMergeCommit bool
HTMLURL string
CloneURL string
SSHURL string
}
type GitPullRequest struct {
URL string
}
type GitPullRequestArguments struct {
Owner string
Repo string
Title string
Body string
Head string
Base string
}
func CreateProvider(server *auth.AuthServer, user *auth.UserAuth) (GitProvider, error) {
// TODO lets default to github
return NewGitHubProvider(server, user)
}
// PickOrganisation picks an organisations login if there is one available
func PickOrganisation(provider GitProvider, userName string) (string, error) {
answer := ""
orgs, err := provider.ListOrganisations()
if err != nil {
return answer, err
}
if len(orgs) == 0 {
return answer, nil
}
if len(orgs) == 1 {
return orgs[0].Login, nil
}
orgNames := []string{userName}
for _, o := range orgs {
name := o.Login
if name != "" {
orgNames = append(orgNames, name)
}
}
sort.Strings(orgNames)
orgName := ""
prompt := &survey.Select{
Message: "Which organisation do you want to use?",
Options: orgNames,
Default: userName,
}
err = survey.AskOne(prompt, &orgName, nil)
if err != nil {
return "", err
}
if orgName == userName {
return "", nil
}
return orgName, nil
}
func (i *GitRepositoryInfo) PickOrCreateProvider(authConfigSvc auth.AuthConfigService) (GitProvider, error) {
config := authConfigSvc.Config()
server := config.GetOrCreateServer(i.Host)
userAuth, err := config.PickServerUserAuth(server, "git user name")
if err != nil {
return nil, err
}
return i.CreateProviderForUser(server, &userAuth)
}
func (i *GitRepositoryInfo) CreateProviderForUser(server *auth.AuthServer, user *auth.UserAuth) (GitProvider, error) {
if i.Host == GitHubHost {
return NewGitHubProvider(server, user)
}
return nil, fmt.Errorf("Git provider not supported for host %s", i.Host)
}