-
Notifications
You must be signed in to change notification settings - Fork 55
/
project.go
58 lines (49 loc) · 1.57 KB
/
project.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
package project
import (
"encoding/json"
"github.com/jfrog/jfrog-cli-core/artifactory/utils/dependenciestree"
"github.com/jfrog/jfrog-cli-core/artifactory/utils/dotnet/dependencies"
)
type Project interface {
Name() string
MarshalJSON() ([]byte, error)
Extractor() dependencies.Extractor
CreateDependencyTree() error
}
func Load(name, rootPath, dependenciesSource string) (Project, error) {
var err error
project := &project{name: name, rootPath: rootPath, dependenciesSource: dependenciesSource}
project.extractor, err = project.getCompatibleExtractor()
return project, err
}
func (project *project) getCompatibleExtractor() (dependencies.Extractor, error) {
extractor, err := dependencies.CreateCompatibleExtractor(project.name, project.dependenciesSource)
return extractor, err
}
func (project *project) CreateDependencyTree() error {
var err error
project.dependencyTree, err = dependencies.CreateDependencyTree(project.extractor)
return err
}
type project struct {
name string
rootPath string
dependenciesSource string
dependencyTree dependenciestree.Tree
extractor dependencies.Extractor
}
func (project *project) Name() string {
return project.name
}
func (project *project) Extractor() dependencies.Extractor {
return project.extractor
}
func (project *project) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Name string `json:"name,omitempty"`
Dependencies dependenciestree.Tree `json:"dependencies,omitempty"`
}{
Name: project.name,
Dependencies: project.dependencyTree,
})
}