Skip to content

Commit 742dc71

Browse files
Refactoring (aquaproj#2147)
* refactor: move error to util * fix: use the basename of the package name as the default command name * refactor: early return * refactor: merge versionSelector * refactor: rewrite if statements with switch * refactor: move Copy to util
1 parent 1fa43d1 commit 742dc71

16 files changed

Lines changed: 111 additions & 131 deletions

File tree

pkg/cargo/error.go

Lines changed: 0 additions & 7 deletions
This file was deleted.

pkg/cargo/versions.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"encoding/json"
66
"fmt"
77
"net/http"
8+
9+
"github.com/aquaproj/aqua/v2/pkg/util"
810
)
911

1012
type Payload struct {
@@ -91,7 +93,7 @@ func getCrate(ctx context.Context, client *http.Client, uri string) (*CratePaylo
9193
}
9294
defer resp.Body.Close()
9395
if resp.StatusCode >= 300 { //nolint:gomnd
94-
return nil, resp.StatusCode, errHTTPStatusCodeIsGreaterEqualThan300
96+
return nil, resp.StatusCode, util.ErrHTTPStatusCodeIsGreaterEqualThan300
9597
}
9698
payload := &CratePayload{}
9799
if err := json.NewDecoder(resp.Body).Decode(payload); err != nil {
@@ -111,7 +113,7 @@ func listInstallableVersions(ctx context.Context, client *http.Client, uri strin
111113
}
112114
defer resp.Body.Close()
113115
if resp.StatusCode >= 300 { //nolint:gomnd
114-
return nil, resp.StatusCode, errHTTPStatusCodeIsGreaterEqualThan300
116+
return nil, resp.StatusCode, util.ErrHTTPStatusCodeIsGreaterEqualThan300
115117
}
116118
payload := &Payload{}
117119
if err := json.NewDecoder(resp.Body).Decode(payload); err != nil {

pkg/config/registry/package_info.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ func (pkgInfo *PackageInfo) getDefaultCmdName() string {
573573
}
574574
return path.Base(pkgInfo.GetPath())
575575
}
576-
return ""
576+
return path.Base(pkgInfo.GetName())
577577
}
578578

579579
func (pkgInfo *PackageInfo) SLSASourceURI() string {

pkg/controller/exec/exec.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,26 +87,28 @@ func (ctrl *Controller) Exec(ctx context.Context, logE *logrus.Entry, param *con
8787
if err != nil {
8888
return err //nolint:wrapcheck
8989
}
90-
if findResult.Package != nil { //nolint:nestif
91-
logE = logE.WithFields(logrus.Fields{
92-
"package": findResult.Package.Package.Name,
93-
"package_version": findResult.Package.Package.Version,
94-
})
90+
if findResult.Package == nil {
91+
return ctrl.execCommandWithRetry(ctx, logE, findResult.ExePath, args...)
92+
}
9593

96-
policyCfgs, err := ctrl.policyConfigReader.Append(logE, findResult.ConfigFilePath, policyCfgs, globalPolicyPaths)
97-
if err != nil {
98-
return err //nolint:wrapcheck
99-
}
94+
logE = logE.WithFields(logrus.Fields{
95+
"package": findResult.Package.Package.Name,
96+
"package_version": findResult.Package.Package.Version,
97+
})
10098

101-
if param.DisableLazyInstall {
102-
if _, err := ctrl.fs.Stat(findResult.ExePath); err != nil {
103-
return logerr.WithFields(errExecNotFoundDisableLazyInstall, logE.WithField("doc", "https://aquaproj.github.io/docs/reference/codes/006").Data) //nolint:wrapcheck
104-
}
105-
}
106-
if err := ctrl.install(ctx, logE, findResult, policyCfgs); err != nil {
107-
return err
99+
policyCfgs, err = ctrl.policyConfigReader.Append(logE, findResult.ConfigFilePath, policyCfgs, globalPolicyPaths)
100+
if err != nil {
101+
return err //nolint:wrapcheck
102+
}
103+
104+
if param.DisableLazyInstall {
105+
if _, err := ctrl.fs.Stat(findResult.ExePath); err != nil {
106+
return logerr.WithFields(errExecNotFoundDisableLazyInstall, logE.WithField("doc", "https://aquaproj.github.io/docs/reference/codes/006").Data) //nolint:wrapcheck
108107
}
109108
}
109+
if err := ctrl.install(ctx, logE, findResult, policyCfgs); err != nil {
110+
return err
111+
}
110112
return ctrl.execCommandWithRetry(ctx, logE, findResult.ExePath, args...)
111113
}
112114

pkg/controller/generate/cargo.go

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,24 @@ import (
44
"context"
55

66
"github.com/aquaproj/aqua/v2/pkg/config"
7-
"github.com/ktr0731/go-fuzzyfinder"
87
"github.com/sirupsen/logrus"
98
)
109

1110
func (ctrl *Controller) getCargoVersion(ctx context.Context, logE *logrus.Entry, param *config.Param, pkg *FindingPackage) string {
1211
pkgInfo := pkg.PackageInfo
1312
if param.SelectVersion {
14-
versions, err := ctrl.cargoClient.ListVersions(ctx, *pkgInfo.Crate)
13+
versionStrings, err := ctrl.cargoClient.ListVersions(ctx, *pkgInfo.Crate)
1514
if err != nil {
1615
logE.WithError(err).Warn("list versions")
1716
return ""
1817
}
19-
idx, err := ctrl.crateVersionSelector.Find(versions)
18+
versions := convertStringsToVersions(versionStrings)
19+
20+
idx, err := ctrl.versionSelector.Find(versions, false)
2021
if err != nil {
2122
return ""
2223
}
23-
return versions[idx]
24+
return versions[idx].Version
2425
}
2526
version, err := ctrl.cargoClient.GetLatestVersion(ctx, *pkgInfo.Crate)
2627
if err != nil {
@@ -29,28 +30,3 @@ func (ctrl *Controller) getCargoVersion(ctx context.Context, logE *logrus.Entry,
2930
}
3031
return version
3132
}
32-
33-
type CrateVersionSelector interface {
34-
Find(versions []string) (int, error)
35-
}
36-
37-
type MockCrateVersionSelector struct {
38-
Index int
39-
Err error
40-
}
41-
42-
func (mock *MockCrateVersionSelector) Find(versions []string) (int, error) {
43-
return mock.Index, mock.Err
44-
}
45-
46-
type CrateVersionSelectorImpl struct{}
47-
48-
func NewCrateVersionSelectorImpl() *CrateVersionSelectorImpl {
49-
return &CrateVersionSelectorImpl{}
50-
}
51-
52-
func (selector *CrateVersionSelectorImpl) Find(versions []string) (int, error) {
53-
return fuzzyfinder.Find(versions, func(i int) string { //nolint:wrapcheck
54-
return versions[i]
55-
})
56-
}

pkg/controller/generate/generate.go

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,30 @@ import (
2323
)
2424

2525
type Controller struct {
26-
stdin io.Reader
27-
github RepositoriesService
28-
registryInstaller rgst.Installer
29-
configFinder ConfigFinder
30-
configReader reader.ConfigReader
31-
fuzzyFinder FuzzyFinder
32-
versionSelector VersionSelector
33-
fs afero.Fs
34-
outputter Outputter
35-
cargoClient cargo.Client
36-
crateVersionSelector CrateVersionSelector
26+
stdin io.Reader
27+
github RepositoriesService
28+
registryInstaller rgst.Installer
29+
configFinder ConfigFinder
30+
configReader reader.ConfigReader
31+
fuzzyFinder FuzzyFinder
32+
versionSelector VersionSelector
33+
fs afero.Fs
34+
outputter Outputter
35+
cargoClient cargo.Client
3736
}
3837

39-
func New(configFinder ConfigFinder, configReader reader.ConfigReader, registInstaller rgst.Installer, gh RepositoriesService, fs afero.Fs, fuzzyFinder FuzzyFinder, versionSelector VersionSelector, cargoClient cargo.Client, crateVersionSelector CrateVersionSelector) *Controller {
38+
func New(configFinder ConfigFinder, configReader reader.ConfigReader, registInstaller rgst.Installer, gh RepositoriesService, fs afero.Fs, fuzzyFinder FuzzyFinder, versionSelector VersionSelector, cargoClient cargo.Client) *Controller {
4039
return &Controller{
41-
stdin: os.Stdin,
42-
configFinder: configFinder,
43-
configReader: configReader,
44-
registryInstaller: registInstaller,
45-
github: gh,
46-
fs: fs,
47-
fuzzyFinder: fuzzyFinder,
48-
versionSelector: versionSelector,
49-
cargoClient: cargoClient,
50-
crateVersionSelector: crateVersionSelector,
51-
outputter: output.New(os.Stdout, fs),
40+
stdin: os.Stdin,
41+
configFinder: configFinder,
42+
configReader: configReader,
43+
registryInstaller: registInstaller,
44+
github: gh,
45+
fs: fs,
46+
fuzzyFinder: fuzzyFinder,
47+
versionSelector: versionSelector,
48+
cargoClient: cargoClient,
49+
outputter: output.New(os.Stdout, fs),
5250
}
5351
}
5452

pkg/controller/generate/generate_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,8 @@ packages:
405405
configReader := reader.New(fs, d.param)
406406
fuzzyFinder := generate.NewMockFuzzyFinder(d.idxs, d.fuzzyFinderErr)
407407
versionSelector := generate.NewMockVersionSelector(d.idx, d.versionSelectorErr)
408-
crateVersionSelector := &generate.MockCrateVersionSelector{}
409408
cargoClient := &cargo.MockClient{}
410-
ctrl := generate.New(configFinder, configReader, registryInstaller, gh, fs, fuzzyFinder, versionSelector, cargoClient, crateVersionSelector)
409+
ctrl := generate.New(configFinder, configReader, registryInstaller, gh, fs, fuzzyFinder, versionSelector, cargoClient)
411410
if err := ctrl.Generate(ctx, logE, d.param, d.args...); err != nil {
412411
if d.isErr {
413412
return

pkg/controller/generate/github_release.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (ctrl *Controller) selectVersionFromReleases(ctx context.Context, logE *log
2323
URL: release.GetHTMLURL(),
2424
}
2525
}
26-
idx, err := ctrl.versionSelector.Find(versions)
26+
idx, err := ctrl.versionSelector.Find(versions, true)
2727
if err != nil {
2828
return ""
2929
}

pkg/controller/generate/github_tag.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,10 @@ func (ctrl *Controller) selectVersionFromGitHubTag(ctx context.Context, logE *lo
9797
versions := make([]*Version, len(tags))
9898
for i, tag := range tags {
9999
versions[i] = &Version{
100-
Name: tag.GetName(),
101100
Version: tag.GetName(),
102101
}
103102
}
104-
idx, err := ctrl.versionSelector.Find(versions)
103+
idx, err := ctrl.versionSelector.Find(versions, false)
105104
if err != nil {
106105
return ""
107106
}

pkg/controller/generate/version_selector.go

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type Version struct {
1414
}
1515

1616
type VersionSelector interface {
17-
Find(versions []*Version) (int, error)
17+
Find(versions []*Version, hasPreview bool) (int, error)
1818
}
1919

2020
type versionSelector struct{}
@@ -35,20 +35,25 @@ type mockVersionSelector struct {
3535
err error
3636
}
3737

38-
func (selector *mockVersionSelector) Find(versions []*Version) (int, error) {
38+
func (selector *mockVersionSelector) Find(versions []*Version, hasPreview bool) (int, error) {
3939
return selector.idx, selector.err
4040
}
4141

42-
func (selector *versionSelector) Find(versions []*Version) (int, error) {
42+
func (selector *versionSelector) Find(versions []*Version, hasPreview bool) (int, error) {
43+
if hasPreview {
44+
return fuzzyfinder.Find(versions, func(i int) string { //nolint:wrapcheck
45+
return getVersionItem(versions[i])
46+
},
47+
fuzzyfinder.WithPreviewWindow(func(i, w, h int) string {
48+
if i < 0 {
49+
return "No version matches"
50+
}
51+
return getVersionPreview(versions[i], i, w)
52+
}))
53+
}
4354
return fuzzyfinder.Find(versions, func(i int) string { //nolint:wrapcheck
4455
return getVersionItem(versions[i])
45-
},
46-
fuzzyfinder.WithPreviewWindow(func(i, w, h int) string {
47-
if i < 0 {
48-
return "No package matches"
49-
}
50-
return getVersionPreview(versions[i], i, w)
51-
}))
56+
})
5257
}
5358

5459
func getVersionItem(version *Version) string {
@@ -60,7 +65,7 @@ func getVersionPreview(version *Version, i, w int) string {
6065
return ""
6166
}
6267
s := version.Version
63-
if version.Name != version.Version {
68+
if version.Name != "" && version.Name != version.Version {
6469
s += fmt.Sprintf(" (%s)", version.Name)
6570
}
6671
if version.URL != "" || version.Description != "" {
@@ -74,3 +79,13 @@ func getVersionPreview(version *Version, i, w int) string {
7479
}
7580
return s
7681
}
82+
83+
func convertStringsToVersions(arr []string) []*Version {
84+
versions := make([]*Version, len(arr))
85+
for i, a := range arr {
86+
versions[i] = &Version{
87+
Version: a,
88+
}
89+
}
90+
return versions
91+
}

0 commit comments

Comments
 (0)