Skip to content

Commit fc7a8e6

Browse files
committed
Improve repositores code
Signed-off-by: Michael Sverdlov <[email protected]>
1 parent d2207be commit fc7a8e6

File tree

3 files changed

+41
-70
lines changed

3 files changed

+41
-70
lines changed

artifactory/commands/transferfiles/transfer.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"errors"
77
"fmt"
88
"github.com/jfrog/gofrog/safeconvert"
9+
"github.com/jfrog/jfrog-client-go/artifactory/services"
910
"os"
1011
"os/signal"
1112
"path/filepath"
@@ -342,11 +343,11 @@ func (tdc *TransferFilesCommand) NewTransferDataPreChecksRunner() (runner *prech
342343
if err != nil {
343344
return
344345
}
345-
localRepos, err := utils.GetFilteredRepositoriesByNameAndType(serviceManager, tdc.includeReposPatterns, tdc.excludeReposPatterns, utils.Local)
346+
localRepos, err := utils.GetFilteredRepositoriesWithFilterParams(serviceManager, tdc.includeReposPatterns, tdc.excludeReposPatterns, services.RepositoriesFilterParams{RepoType: utils.Local.String()})
346347
if err != nil {
347348
return
348349
}
349-
federatedRepos, err := utils.GetFilteredRepositoriesByNameAndType(serviceManager, tdc.includeReposPatterns, tdc.excludeReposPatterns, utils.Federated)
350+
federatedRepos, err := utils.GetFilteredRepositoriesWithFilterParams(serviceManager, tdc.includeReposPatterns, tdc.excludeReposPatterns, services.RepositoriesFilterParams{RepoType: utils.Federated.String()})
350351
if err != nil {
351352
return
352353
}
@@ -586,11 +587,11 @@ func (tdc *TransferFilesCommand) getAllLocalRepos(serverDetails *config.ServerDe
586587
}
587588
excludeRepoPatternsWithBuildInfo := tdc.excludeReposPatterns
588589
excludeRepoPatternsWithBuildInfo = append(excludeRepoPatternsWithBuildInfo, "*-build-info")
589-
localRepos, err := utils.GetFilteredRepositoriesByNameAndType(serviceManager, tdc.includeReposPatterns, excludeRepoPatternsWithBuildInfo, utils.Local)
590+
localRepos, err := utils.GetFilteredRepositoriesWithFilterParams(serviceManager, tdc.includeReposPatterns, excludeRepoPatternsWithBuildInfo, services.RepositoriesFilterParams{RepoType: utils.Local.String()})
590591
if err != nil {
591592
return []string{}, []string{}, err
592593
}
593-
federatedRepos, err := utils.GetFilteredRepositoriesByNameAndType(serviceManager, tdc.includeReposPatterns, excludeRepoPatternsWithBuildInfo, utils.Federated)
594+
federatedRepos, err := utils.GetFilteredRepositoriesWithFilterParams(serviceManager, tdc.includeReposPatterns, excludeRepoPatternsWithBuildInfo, services.RepositoriesFilterParams{RepoType: utils.Federated.String()})
594595
if err != nil {
595596
return []string{}, []string{}, err
596597
}

artifactory/utils/repositoryutils.go

Lines changed: 19 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import (
66
"path"
77
"strings"
88

9-
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
10-
119
"github.com/jfrog/jfrog-client-go/artifactory"
1210
"github.com/jfrog/jfrog-client-go/artifactory/services"
1311
clientUtils "github.com/jfrog/jfrog-client-go/artifactory/services/utils"
@@ -57,26 +55,6 @@ var blacklistedRepositories = []string{
5755
"jfrog-usage-logs", "jfrog-billing-logs", "jfrog-logs", "artifactory-pipe-info", "auto-trashcan", "jfrog-support-bundle", "_intransit", "artifactory-edge-uploads",
5856
}
5957

60-
// GetRepositories returns the names of local, remote, virtual or federated repositories filtered by their type.
61-
// artDetails - Artifactory server details
62-
// repoTypes - Repository types to filter. If empty - return all repository types.
63-
func GetRepositories(artDetails *config.ServerDetails, repoTypes ...RepoType) ([]string, error) {
64-
sm, err := CreateServiceManager(artDetails, 3, 0, false)
65-
if err != nil {
66-
return nil, err
67-
}
68-
repos := []string{}
69-
for _, repoType := range repoTypes {
70-
filteredRepos, err := GetFilteredRepositoriesByNameAndType(sm, nil, nil, repoType)
71-
if err != nil {
72-
return repos, err
73-
}
74-
repos = append(repos, filteredRepos...)
75-
}
76-
77-
return repos, nil
78-
}
79-
8058
// Since we can't search dependencies in a remote repository, we will turn the search to the repository's cache.
8159
// Local/Virtual repository name will be returned as is.
8260
func GetRepoNameForDependenciesSearch(repoName string, serviceManager artifactory.ArtifactoryServicesManager) (string, error) {
@@ -99,74 +77,52 @@ func IsRemoteRepo(repoName string, serviceManager artifactory.ArtifactoryService
9977
return repoDetails.GetRepoType() == "remote", nil
10078
}
10179

102-
// GetFilteredRepositoriesByName returns the names of local, remote, virtual and federated repositories filtered by their names.
103-
// includePatterns - patterns of repository names (can contain wildcards) to include in the results. A repository's name
80+
// GetFilteredRepositoriesWithFilterParams returns the names of local, remote, virtual, and federated repositories filtered by their names and type.
81+
// servicesManager - The Artifactory services manager used to interact with the Artifactory server.
82+
// includePatterns - Patterns of repository names (can contain wildcards) to include in the results. A repository's name
10483
// must match at least one of these patterns in order to be included in the results. If includePatterns' length is zero,
10584
// all repositories are included.
106-
// excludePatterns - patterns of repository names (can contain wildcards) to exclude from the results. A repository's name
85+
// excludePatterns - Patterns of repository names (can contain wildcards) to exclude from the results. A repository's name
10786
// must NOT match any of these patterns in order to be included in the results.
108-
func GetFilteredRepositoriesByName(servicesManager artifactory.ArtifactoryServicesManager, includePatterns, excludePatterns []string) ([]string, error) {
109-
repoDetailsList, err := servicesManager.GetAllRepositories()
87+
// filterParams - Parameters to filter the repositories by their type.
88+
// Returns a slice of repository names that match the given patterns and type, or an error if the operation fails.
89+
func GetFilteredRepositoriesWithFilterParams(servicesManager artifactory.ArtifactoryServicesManager, includePatterns, excludePatterns []string, filterParams services.RepositoriesFilterParams) ([]string, error) {
90+
repoDetailsList, err := servicesManager.GetAllRepositoriesFiltered(filterParams)
11091
if err != nil {
11192
return nil, err
11293
}
11394

114-
return getFilteredRepositories(repoDetailsList, includePatterns, excludePatterns)
115-
}
116-
117-
// GetFilteredRepositoriesByNameAndType returns the names of local, remote, virtual and federated repositories filtered by their names and type.
118-
// includePatterns - patterns of repository names (can contain wildcards) to include in the results. A repository's name
119-
// must match at least one of these patterns in order to be included in the results. If includePatterns' length is zero,
120-
// all repositories are included.
121-
// excludePatterns - patterns of repository names (can contain wildcards) to exclude from the results. A repository's name
122-
// must NOT match any of these patterns in order to be included in the results.
123-
// repoType - only repositories of this type will be returned.
124-
func GetFilteredRepositoriesByNameAndType(servicesManager artifactory.ArtifactoryServicesManager, includePatterns, excludePatterns []string, repoType RepoType) ([]string, error) {
125-
repoDetailsList, err := servicesManager.GetAllRepositoriesFiltered(services.RepositoriesFilterParams{RepoType: repoType.String()})
126-
if err != nil {
127-
return nil, err
128-
}
129-
130-
return getFilteredRepositories(repoDetailsList, includePatterns, excludePatterns)
131-
}
132-
133-
func getFilteredRepositories(repoDetailsList *[]services.RepositoryDetails, includePatterns, excludePatterns []string) ([]string, error) {
134-
var repoKeys []string
135-
for _, repoDetails := range *repoDetailsList {
136-
repoKeys = append(repoKeys, repoDetails.Key)
95+
repoKeys := make([]string, len(*repoDetailsList))
96+
for i, repoDetails := range *repoDetailsList {
97+
repoKeys[i] = repoDetails.Key
13798
}
13899

139-
return filterRepositoryNames(&repoKeys, includePatterns, excludePatterns)
100+
return filterRepositoryNames(repoKeys, includePatterns, excludePatterns)
140101
}
141102

142-
// GetFilteredBuildInfoRepositories returns the names of all build-info repositories filtered by their names.
143-
// storageInfo - storage info response from Artifactory
144-
// includePatterns - patterns of repository names (can contain wildcards) to include in the results. A repository's name
145-
// must match at least one of these patterns in order to be included in the results. If includePatterns' length is zero,
146-
// all repositories are included.
147-
// excludePatterns - patterns of repository names (can contain wildcards) to exclude from the results. A repository's name
148-
// must NOT match any of these patterns in order to be included in the results.
103+
// GetFilteredBuildInfoRepositories gets build info repositories and applies the include/exclude patterns to return the relevant repository names.
149104
func GetFilteredBuildInfoRepositories(storageInfo *clientUtils.StorageInfo, includePatterns, excludePatterns []string) ([]string, error) {
150-
var repoKeys []string
105+
repoKeys := make([]string, 0, len(storageInfo.RepositoriesSummaryList))
106+
151107
for _, repoSummary := range storageInfo.RepositoriesSummaryList {
152108
if strings.ToLower(repoSummary.PackageType) == buildInfoPackageType {
153109
repoKeys = append(repoKeys, repoSummary.RepoKey)
154110
}
155111
}
156-
return filterRepositoryNames(&repoKeys, includePatterns, excludePatterns)
112+
return filterRepositoryNames(repoKeys, includePatterns, excludePatterns)
157113
}
158114

159115
// Filter repositories by name and return a list of repository names
160116
// repos - The repository keys to filter
161117
// includePatterns - Repositories inclusion wildcard pattern
162118
// excludePatterns - Repositories exclusion wildcard pattern
163-
func filterRepositoryNames(repoKeys *[]string, includePatterns, excludePatterns []string) ([]string, error) {
119+
func filterRepositoryNames(repoKeys []string, includePatterns, excludePatterns []string) ([]string, error) {
164120
includedRepos := datastructures.MakeSet[string]()
165-
includeExcludeFilter := &IncludeExcludeFilter{
121+
includeExcludeFilter := IncludeExcludeFilter{
166122
IncludePatterns: includePatterns,
167123
ExcludePatterns: excludePatterns,
168124
}
169-
for _, repoKey := range *repoKeys {
125+
for _, repoKey := range repoKeys {
170126
repoIncluded, err := includeExcludeFilter.ShouldIncludeRepository(repoKey)
171127
if err != nil {
172128
return nil, err

common/commands/configfile.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package commands
22

33
import (
4+
"fmt"
5+
"github.com/jfrog/jfrog-client-go/artifactory/services"
46
"os"
57
"path/filepath"
68
"strconv"
@@ -134,10 +136,10 @@ func createBuildConfig(global bool, confType project.ProjectType, configFile *Co
134136
}
135137
// Populate, validate and write the config file
136138
configFilePath := filepath.Join(projectDir, confType.String()+".yaml")
137-
if err := configFile.VerifyConfigFile(configFilePath); err != nil {
139+
if err = configFile.VerifyConfigFile(configFilePath); err != nil {
138140
return err
139141
}
140-
if err := handleInteractiveConfigCreation(configFile, confType); err != nil {
142+
if err = handleInteractiveConfigCreation(configFile, confType); err != nil {
141143
return err
142144
}
143145
if err = configFile.validateConfig(); err != nil {
@@ -649,7 +651,19 @@ func getRepositories(serverId string, repoTypes ...utils.RepoType) ([]string, er
649651
return nil, err
650652
}
651653

652-
return utils.GetRepositories(artDetails, repoTypes...)
654+
sm, err := utils.CreateServiceManager(artDetails, 3, 0, false)
655+
if err != nil {
656+
return nil, err
657+
}
658+
repos := []string{}
659+
for _, repoType := range repoTypes {
660+
filteredRepos, err := utils.GetFilteredRepositoriesWithFilterParams(sm, nil, nil, services.RepositoriesFilterParams{RepoType: repoType.String()})
661+
if err != nil {
662+
return nil, fmt.Errorf("failed getting %s repositories list: %w", repoType, err)
663+
}
664+
repos = append(repos, filteredRepos...)
665+
}
666+
return repos, nil
653667
}
654668

655669
func defaultIfNotSet(c *cli.Context, flagName string, defaultValue string) string {

0 commit comments

Comments
 (0)