/
load.go
86 lines (72 loc) · 1.68 KB
/
load.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
package repo
import (
"errors"
"log"
"os"
"path/filepath"
"gopkg.in/yaml.v2"
)
var project Manifest
func (prj *Project) fixupProject(grp *ProjectGroup) error {
//log.Printf("Fixing up %s (%s)", prj.Repo, prj.RepoUrl)
var userepo string
if len(prj.RepoUrl) > 1 {
userepo = prj.RepoUrl
} else {
userepo = grp.Server + prj.Repo
}
prj.UseRepo = userepo
if len(prj.Path) < 1 {
log.Printf("Always provide a work area for repo %s", userepo)
return errors.New("No path provided for " + userepo)
}
prj.Path = filepath.Join(grp.Workarea, prj.Path)
if len(prj.Reference) < 1 {
if len(grp.Reference) > 0 {
prj.Reference = grp.Reference
}
}
return nil
}
func (prjg *ProjectGroup) fixupGroup(nm string) error {
if Verbose {
log.Printf("Project group: %s", nm)
}
if len(prjg.Workarea) < 2 {
log.Printf("ProjGroup: %s requires a work area", nm)
return errors.New("No workspace provided for " + nm)
}
projWs := os.ExpandEnv(prjg.Workarea)
ws, err := filepath.Abs(projWs)
if err != nil {
log.Printf("%s", err)
return err
}
prjg.Workarea = ws
if Verbose {
log.Printf("Workspace %s", prjg.Workarea)
}
for idx, _ := range prjg.Projects {
err := (&prjg.Projects[idx]).fixupProject(prjg)
if err != nil {
log.Printf("%s", err)
}
}
return nil
}
func LoadConfig(cfgfile string) *Manifest {
if Verbose {
log.Printf("Loading the config file %s", cfgfile)
}
yamlin, _ := os.Open(cfgfile)
defer yamlin.Close()
yamlobjin := yaml.NewDecoder(yamlin)
yamlobjin.Decode(&project)
(&project.Public).fixupGroup("Public")
(&project.Private).fixupGroup("Private")
if Verbose {
project.Public.Show("Public")
project.Private.Show("Private")
}
return &project
}