forked from cloudfoundry/libbuildpack
/
models.go
74 lines (66 loc) · 1.82 KB
/
models.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
package packager
import "github.com/Masterminds/semver"
type Dependency struct {
URI string `yaml:"uri"`
File string `yaml:"file"`
SHA256 string `yaml:"sha256"`
Name string `yaml:"name"`
Version string `yaml:"version"`
Stacks []string `yaml:"cf_stacks"`
SubDependencies []SubDependency `yaml:"dependencies"`
}
type SubDependency struct{ Name string }
type Dependencies []Dependency
type Manifest struct {
Language string `yaml:"language"`
Stack string `yaml:"stack"`
IncludeFiles []string `yaml:"include_files"`
PrePackage string `yaml:"pre_package"`
Dependencies Dependencies `yaml:"dependencies"`
Defaults []struct {
Name string `yaml:"name"`
Version string `yaml:"version"`
} `yaml:"default_versions"`
}
type File struct {
Name, Path string
}
func (d Dependencies) Len() int { return len(d) }
func (d Dependencies) Swap(i, j int) { d[i], d[j] = d[j], d[i] }
func (d Dependencies) Less(i, j int) bool {
if d[i].Name < d[j].Name {
return true
} else if d[i].Name == d[j].Name {
v1, e1 := semver.NewVersion(d[i].Version)
v2, e2 := semver.NewVersion(d[j].Version)
if e1 == nil && e2 == nil {
return v1.LessThan(v2)
} else {
return d[i].Version < d[j].Version
}
}
return false
}
func (m Manifest) hasStack(stack string) bool {
for _, e := range m.Dependencies {
for _, s := range e.Stacks {
if s == stack {
return true
}
}
}
return false
}
func (m Manifest) versionsOfDependencyWithStack(depName, stack string) []string {
versions := []string{}
for _, e := range m.Dependencies {
if e.Name == depName {
for _, s := range e.Stacks {
if s == stack {
versions = append(versions, e.Version)
}
}
}
}
return versions
}