forked from ribice/glice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dependency.go
107 lines (90 loc) · 2.46 KB
/
dependency.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 glice
import (
"encoding/base64"
"fmt"
"os"
"path/filepath"
"github.com/fatih/color"
)
// Dependency holds information about a dependency
type Dependency struct {
r *Repository
Import string `yaml:"import" json:"name,omitempty"`
RepoURL string `yaml:"repo" json:"url,omitempty"`
Host string `yaml:"-" json:"host,omitempty"`
Author string `yaml:"-" json:"author,omitempty"`
Project string `yaml:"-" json:"project,omitempty"`
LicenseID string `yaml:"license" json:"license"`
LicenseURL string `yaml:"legalese" json:"legalese"`
Added string `yaml:"added" json:"added"`
}
// Repository returns the associated Repository object
func (dep *Dependency) Repository() *Repository {
return dep.r
}
func (dep *Dependency) GetLicenseFilepath(dir string) string {
filename := fmt.Sprintf("%s-%s-license.md",
dep.Author,
dep.Project)
return filepath.Join(dir, filename)
}
type SaveDependencyMsgFunc func(dep *Dependency, filepath string)
// SaveLicense saves a license to a file
func (dep *Dependency) SaveLicense(dir string, msgFunc SaveDependencyMsgFunc) (err error) {
var dec []byte
var f *os.File
var fp string
text := dep.GetLicenseText()
if text == "" {
goto end
}
dec, err = base64.StdEncoding.DecodeString(text)
if err != nil {
err = fmt.Errorf("unable to decode license text for '%s'; %w", dep.Import, err)
goto end
}
fp = dep.GetLicenseFilepath(dir)
msgFunc(dep, fp)
f, err = os.Create(fp)
if err != nil {
err = fmt.Errorf("unable to create file %s; %w", fp, err)
goto end
}
defer MustClose(f)
_, err = f.Write(dec)
if err != nil {
err = fmt.Errorf("unable to write to file %s; %w", fp, err)
goto end
}
err = f.Sync()
if err != nil {
err = fmt.Errorf("unable to synchronize file %s; %w", fp, err)
goto end
}
end:
return err
}
func (dep *Dependency) GetLicenseText() (text string) {
if dep.r == nil {
goto end
}
if dep.r.license == nil {
goto end
}
text = dep.r.license.GetText()
end:
return text
}
func (dep *Dependency) GetReportRow() []string {
return []string{dep.Import, dep.RepoURL, dep.LicenseID, dep.Added}
}
var reportLicenseCol = 2
func (dep *Dependency) GetColorizedReportRow() []string {
row := dep.GetReportRow()
row[reportLicenseCol] = dep.GetColorizedLicenseName()
return row
}
// GetColorizedLicenseName reGetRepoName()turns a colorized name
func (dep *Dependency) GetColorizedLicenseName() (name string) {
return color.New(GetLicenseColor(dep.LicenseID)).Sprintf(name)
}