-
Notifications
You must be signed in to change notification settings - Fork 0
/
repository.go
91 lines (80 loc) · 2.04 KB
/
repository.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
package pr_helper
import (
"fmt"
"log"
"os/exec"
"github.com/google/go-github/github"
)
type Repository struct {
Organization string
Project string
Client *github.Client
}
func (repo *Repository) listPRsbyQuery(query string) []PR {
prs, _, err := repo.Client.Search.Issues(query, &github.SearchOptions{})
if err != nil {
log.Fatal(err)
}
ret := []PR{}
for _, github_pr := range prs.Issues {
pr, err := repo.GetPR(*github_pr.Number)
if err != nil {
log.Fatal(err)
}
ret = append(ret, *pr)
}
return ret
}
func (repo *Repository) PRs() []PR {
query := "is:open repo:" + repo.Organization + "/" + repo.Project + " label:" + getSettings().Label
return repo.listPRsbyQuery(query)
}
func (repo *Repository) GetPR(number int) (*PR, error) {
pr := PR{Repository: repo, Number: number}
return &pr, pr.validate()
}
func (repo *Repository) LocalPath() string {
return getSettings().RepositoryPath + "/" + repo.Organization + "/" + repo.Project
}
func (repo *Repository) RootPath() string {
return getSettings().RepositoryPath + "/" + repo.Organization
}
func (repo *Repository) Init(cb Callback) error {
path := repo.LocalPath()
exist, err := exists(path)
if err != nil {
return err
}
if !exist {
repo.Create(cb)
} else {
command := exec.Command("git", "status")
command.Dir = repo.LocalPath()
err := command.Run()
if err != nil {
repo.Create(cb)
}
}
// Update repo
command := exec.Command("git", "pull")
command.Dir = repo.LocalPath()
return command.Run()
}
func (repo *Repository) Create(cb Callback) {
cb("Creating %s...", repo.LocalPath())
err := repo.ExecuteCommandInDir("", "mkdir", "-p", repo.RootPath())
if err != nil {
log.Fatal(err)
}
// Remove subdirectory
err = repo.ExecuteCommandInDir(repo.RootPath(), "rm", "-rf", repo.Project)
if err != nil {
log.Fatal(err)
}
path := fmt.Sprintf("https://%s@github.com/%s/%s.git",
getSettings().AuthToken, repo.Organization, repo.Project)
err = repo.ExecuteCommandInDir(repo.RootPath(), "git", "clone", path)
if err != nil {
log.Fatal(err)
}
}