-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
repository.go
114 lines (102 loc) · 2.73 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"fmt"
"github.com/BurntSushi/toml"
"github.com/fatih/color"
"gopkg.in/src-d/go-git.v4"
"io/ioutil"
"log"
"os"
"path/filepath"
"strings"
)
type Repository struct {
Name string
LocalFolder string
Vendor string
}
type solver struct {
Name string
Class string
}
type solvers struct {
Solvers []solver
}
func readRepos() []Repository {
configs := readConfig()
repos := configs.Repositories
return repos
}
func readClientRepos(currentHomedir string) []Repository {
configs := readClientConfig(currentHomedir)
repos := configs.Repositories
return repos
}
func addRepo(repos []Repository, repo Repository) []Repository {
alreadyInstalled := false
for _, existed_repo := range repos {
if repo.Name == existed_repo.Name && repo.Vendor == existed_repo.Vendor {
alreadyInstalled = true
}
}
if alreadyInstalled {
log.Fatal("Repo Already Exists! Remove it first.")
}
repos = append(repos, repo)
return repos
}
func delRepo(repos []Repository, Vendor string, Name string) []Repository {
for i, repo := range repos {
if repo.Name == Name && repo.Vendor == Vendor {
repos = append(repos[:i], repos[i+1:]...)
}
}
return repos
}
func runRepo(Vendor string, Name string, Solver string) {
repos := readRepos()
existed := false
for _, existed_repo := range repos {
if existed_repo.Name == Name && existed_repo.Vendor == Vendor {
files, _ := ioutil.ReadDir(existed_repo.LocalFolder)
for _, file := range files {
if file.Name() == "runner_"+Solver+".py" {
existed = true
RunningRepos = append(RunningRepos, existed_repo)
runfileFullPath := filepath.Join(existed_repo.LocalFolder, file.Name())
python([]string{runfileFullPath})
}
}
}
}
if !existed {
log.Fatal("Solver Not Found!")
}
}
func CloneFromGit(remoteURL string, targetFolder string) Repository {
localFolderName := strings.Split(remoteURL, "/")
vendorName := localFolderName[len(localFolderName)-2]
repoName := localFolderName[len(localFolderName)-1]
localFolder := filepath.Join(targetFolder, vendorName, repoName)
color.Cyan("Cloning " + remoteURL + " into " + localFolder)
_, err := git.PlainClone(localFolder, false, &git.CloneOptions{
URL: remoteURL,
Progress: os.Stdout,
})
if err != nil {
fmt.Println(err)
}
repo := Repository{Name: repoName, Vendor: vendorName, LocalFolder: localFolder}
return repo
}
func InstallDependencies(localFolder string) {
pip([]string{"install", "-r", filepath.Join(localFolder, "requirements.txt"), "--user"})
}
func GeneratingRunners(localFolder string) {
var mySolvers solvers
cvpmFile := filepath.Join(localFolder, "cvpm.toml")
if _, err := toml.DecodeFile(cvpmFile, &mySolvers); err != nil {
log.Fatal(err)
}
renderRunnerTpl(localFolder, mySolvers)
}