github.com/jfrog/jfrog-cli-core@v1.12.1/artifactory/utils/dotnet/dependencies/dependencies.go (about) 1 package dependencies 2 3 import ( 4 "fmt" 5 deptree "github.com/jfrog/jfrog-cli-core/artifactory/utils/dependenciestree" 6 "github.com/jfrog/jfrog-client-go/artifactory/buildinfo" 7 "github.com/jfrog/jfrog-client-go/utils/log" 8 ) 9 10 const absentNupkgWarnMsg = " Skipping adding this dependency to the build info. This might be because the package already exists in a different NuGet cache," + 11 " possibly the SDK's NuGetFallbackFolder cache. Removing the package from this cache may resolve the issue." 12 13 var extractors []Extractor 14 15 // Register dependency extractor 16 func register(dependencyType Extractor) { 17 extractors = append(extractors, dependencyType) 18 } 19 20 // The extractor responsible to calculate the project dependencies. 21 type Extractor interface { 22 // Check whether the extractor is compatible with the current dependency resolution method 23 IsCompatible(projectName, dependenciesSource string) bool 24 // Get all the dependencies for the project 25 AllDependencies() (map[string]*buildinfo.Dependency, error) 26 // Get all the root dependencies of the project 27 DirectDependencies() ([]string, error) 28 // Dependencies relations map 29 ChildrenMap() (map[string][]string, error) 30 31 new(dependenciesSource string) (Extractor, error) 32 } 33 34 func CreateCompatibleExtractor(projectName, dependenciesSource string) (Extractor, error) { 35 extractor, err := getCompatibleExtractor(projectName, dependenciesSource) 36 if err != nil { 37 return nil, err 38 } 39 return extractor, nil 40 } 41 42 func CreateDependencyTree(extractor Extractor) (deptree.Root, error) { 43 rootDependencies, err := extractor.DirectDependencies() 44 if err != nil { 45 return nil, err 46 } 47 allDependencies, err := extractor.AllDependencies() 48 if err != nil { 49 return nil, err 50 } 51 childrenMap, err := extractor.ChildrenMap() 52 if err != nil { 53 return nil, err 54 } 55 return deptree.CreateDependencyTree(rootDependencies, allDependencies, childrenMap), nil 56 } 57 58 // Find suitable registered dependencies extractor. 59 func getCompatibleExtractor(projectName, dependenciesSource string) (Extractor, error) { 60 for _, extractor := range extractors { 61 if extractor.IsCompatible(projectName, dependenciesSource) { 62 return extractor.new(dependenciesSource) 63 } 64 } 65 log.Debug(fmt.Sprintf("Unsupported project dependencies for project: %s", projectName)) 66 return nil, nil 67 }