Skip to content

Commit 312a1d3

Browse files
committed
use only one Version struct!
removed version sort function because wasn't used anymore with its test look for a given version with just one loop instead of three
1 parent 484ca6b commit 312a1d3

File tree

5 files changed

+51
-225
lines changed

5 files changed

+51
-225
lines changed

commands/install.go

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@ import (
1414
"strings"
1515
)
1616

17-
type Version struct {
18-
Major int
19-
Minor int
20-
Patch int
21-
Url string
22-
ThreadSafe bool
23-
}
24-
2517
func Install(args []string) {
2618
if len(args) < 2 {
2719
theme.Error("You must specify a version to install.")
@@ -48,7 +40,7 @@ func Install(args []string) {
4840
theme.Warning("Non-thread safe version will be installed")
4941
}
5042

51-
desiredVersionNumbers := common.GetVersion(args[1])
43+
desiredVersionNumbers := common.GetVersion(args[1], desireThreadSafe, "")
5244

5345
if desiredVersionNumbers == (common.Version{}) {
5446
theme.Error("Invalid version specified")
@@ -77,7 +69,7 @@ func Install(args []string) {
7769
re := regexp.MustCompile(`<A HREF="([a-zA-Z0-9./-]+)">([a-zA-Z0-9./-]+)</A>`)
7870
matches := re.FindAllStringSubmatch(sb, -1)
7971

80-
versions := make([]Version, 0)
72+
versions := make([]common.Version, 0)
8173

8274
for _, match := range matches {
8375
url := match[1]
@@ -118,25 +110,12 @@ func Install(args []string) {
118110
continue
119111
}
120112

121-
// regex match name
122-
versionNumbers := common.GetVersion(name)
123-
124-
major := versionNumbers.Major
125-
minor := versionNumbers.Minor
126-
patch := versionNumbers.Patch
127-
128-
// push to versions
129-
versions = append(versions, Version{
130-
Major: major,
131-
Minor: minor,
132-
Patch: patch,
133-
Url: url,
134-
ThreadSafe: threadSafe,
135-
})
113+
// regex match name and push to versions
114+
versions = append(versions, common.GetVersion(name, threadSafe, url))
136115
}
137116

138117
// find desired version
139-
var desiredVersion Version
118+
var desiredVersion common.Version
140119

141120
if desiredMajorVersion > -1 && desiredMinorVersion > -1 && desiredPatchVersion > -1 {
142121
desiredVersion = FindExactVersion(versions, desiredMajorVersion, desiredMinorVersion, desiredPatchVersion, desireThreadSafe)
@@ -150,12 +129,12 @@ func Install(args []string) {
150129
desiredVersion = FindLatestMinor(versions, desiredMajorVersion, desireThreadSafe)
151130
}
152131

153-
if desiredVersion == (Version{}) {
132+
if desiredVersion == (common.Version{}) {
154133
theme.Error(fmt.Sprintf("Could not find the desired version: %s %s", args[1], threadSafeString))
155134
return
156135
}
157136

158-
fmt.Printf("Installing PHP %d.%d.%d %s\n", desiredVersion.Major, desiredVersion.Minor, desiredVersion.Patch, threadSafeString)
137+
fmt.Printf("Installing PHP %s\n", desiredVersion)
159138

160139
homeDir, err := os.UserHomeDir()
161140

@@ -190,7 +169,7 @@ func Install(args []string) {
190169

191170
// check if zip already exists
192171
if _, err := os.Stat(homeDir + "/.pvm/versions/" + zipFileName); err == nil {
193-
theme.Error(fmt.Sprintf("PHP %d.%d.%d %s already exists", desiredVersion.Major, desiredVersion.Minor, desiredVersion.Patch, threadSafeString))
172+
theme.Error(fmt.Sprintf("PHP %s already exists", desiredVersion))
194173
return
195174
}
196175

@@ -222,7 +201,7 @@ func Install(args []string) {
222201
log.Fatalln(err)
223202
}
224203

225-
theme.Success(fmt.Sprintf("Finished installing PHP %d.%d.%d %s", desiredVersion.Major, desiredVersion.Minor, desiredVersion.Patch, threadSafeString))
204+
theme.Success(fmt.Sprintf("Finished installing PHP %s", desiredVersion))
226205
}
227206

228207
func Unzip(src, dest string) error {
@@ -289,7 +268,7 @@ func Unzip(src, dest string) error {
289268
return nil
290269
}
291270

292-
func FindExactVersion(versions []Version, major int, minor int, patch int, threadSafe bool) Version {
271+
func FindExactVersion(versions []common.Version, major int, minor int, patch int, threadSafe bool) common.Version {
293272
for _, version := range versions {
294273
if version.ThreadSafe != threadSafe {
295274
continue
@@ -299,11 +278,11 @@ func FindExactVersion(versions []Version, major int, minor int, patch int, threa
299278
}
300279
}
301280

302-
return Version{}
281+
return common.Version{}
303282
}
304283

305-
func FindLatestPatch(versions []Version, major int, minor int, threadSafe bool) Version {
306-
latestPatch := Version{}
284+
func FindLatestPatch(versions []common.Version, major int, minor int, threadSafe bool) common.Version {
285+
latestPatch := common.Version{}
307286

308287
for _, version := range versions {
309288
if version.ThreadSafe != threadSafe {
@@ -319,8 +298,8 @@ func FindLatestPatch(versions []Version, major int, minor int, threadSafe bool)
319298
return latestPatch
320299
}
321300

322-
func FindLatestMinor(versions []Version, major int, threadSafe bool) Version {
323-
latestMinor := Version{}
301+
func FindLatestMinor(versions []common.Version, major int, threadSafe bool) common.Version {
302+
latestMinor := common.Version{}
324303

325304
for _, version := range versions {
326305
if version.ThreadSafe != threadSafe {

commands/list.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"hjbdev/pvm/theme"
55
"log"
66
"os"
7-
87
"github.com/fatih/color"
98
)
109

commands/use.go

Lines changed: 20 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"os"
99
"os/exec"
1010
"path/filepath"
11-
"sort"
1211
"strings"
1312
)
1413

@@ -57,61 +56,32 @@ func Use(args []string) {
5756
log.Fatalln(err)
5857
}
5958

60-
// transform to easily sortable slice
61-
var availableVersions []versionMeta
62-
for i, version := range versions {
63-
availableVersions = append(availableVersions, versionMeta{
64-
number: common.GetVersion(version.Name()),
65-
folder: versions[i],
66-
})
67-
}
68-
69-
// check if version exists
7059
var selectedVersion *versionMeta
71-
for _, version := range availableVersions {
72-
if fmt.Sprintf("%d.%d.%d", version.number.Major, version.number.Minor, version.number.Patch) == args[0] {
73-
if threadSafe && !strings.Contains(version.folder.Name(), "nts") {
74-
selectedVersion = &versionMeta{
75-
number: version.number,
76-
folder: version.folder,
77-
}
78-
} else if !threadSafe && strings.Contains(version.folder.Name(), "nts") {
79-
selectedVersion = &versionMeta{
80-
number: version.number,
81-
folder: version.folder,
82-
}
60+
// loop over all found installed versions
61+
for i, version := range versions {
62+
safe := true
63+
if strings.Contains(version.Name(), "nts") || strings.Contains(version.Name(), "NTS") {
64+
safe = false
65+
}
66+
foundVersion := common.GetVersion(version.Name(), safe, "")
67+
if threadSafe == foundVersion.ThreadSafe && strings.HasPrefix(foundVersion.String(), args[0]) {
68+
selectedVersion = &versionMeta{
69+
number: foundVersion,
70+
folder: versions[i],
8371
}
8472
}
8573
}
8674

87-
// if patch version is not specified, use the newest matching major.minor
8875
if selectedVersion == nil {
89-
// Sort by newest patch first
90-
availableVersions = sortVersions(availableVersions)
91-
92-
for _, version := range availableVersions {
93-
if fmt.Sprintf("%d.%d", version.number.Major, version.number.Minor) == args[0] {
94-
if threadSafe && !strings.Contains(version.folder.Name(), "nts") {
95-
selectedVersion = &versionMeta{
96-
number: version.number,
97-
folder: version.folder,
98-
}
99-
} else if !threadSafe && strings.Contains(version.folder.Name(), "nts") {
100-
selectedVersion = &versionMeta{
101-
number: version.number,
102-
folder: version.folder,
103-
}
104-
}
105-
break
106-
}
107-
}
76+
theme.Error("The specified version is not installed.")
77+
return
78+
}
10879

109-
if selectedVersion == nil {
110-
theme.Error("The specified version is not installed.")
111-
return
112-
} else {
113-
theme.Warning(fmt.Sprintf("No patch version specified, assumed newest patch version %s.", selectedVersion.number.String()))
114-
}
80+
requestedVersion := common.GetVersion(args[0], threadSafe, "")
81+
if requestedVersion.Minor == -1 {
82+
theme.Warning(fmt.Sprintf("No minor version specified, assumed newest minor version %s.", selectedVersion.number.String()))
83+
} else if requestedVersion.Patch == -1 {
84+
theme.Warning(fmt.Sprintf("No patch version specified, assumed newest patch version %s.", selectedVersion.number.String()))
11585
}
11686

11787
// remove old php bat script
@@ -214,28 +184,7 @@ func Use(args []string) {
214184
}
215185
// end of ext directory link creation
216186

217-
var threadSafeString string
218-
if threadSafe {
219-
threadSafeString = "thread safe"
220-
} else {
221-
threadSafeString = "non-thread safe"
222-
}
223-
224-
theme.Success("Using PHP " + selectedVersion.number.String() + " " + threadSafeString)
225-
}
226-
227-
func sortVersions(in []versionMeta) []versionMeta {
228-
sort.Slice(in, func(i, j int) bool {
229-
if in[i].number.Major != in[j].number.Major {
230-
return in[i].number.Major > in[j].number.Major
231-
}
232-
if in[i].number.Minor != in[j].number.Minor {
233-
return in[i].number.Minor > in[j].number.Minor
234-
}
235-
return in[i].number.Patch > in[j].number.Patch
236-
})
237-
238-
return in
187+
theme.Success(fmt.Sprintf("Using PHP %s", selectedVersion.number))
239188
}
240189

241190
type versionMeta struct {

commands/use_test.go

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

33
import (
4-
"github.com/stretchr/testify/assert"
5-
"hjbdev/pvm/common"
64
"io/fs"
75
"os"
8-
"testing"
96
)
107

118
// mock os.DirEntry for test
@@ -26,109 +23,3 @@ func (f fakeDirEntry) Type() os.FileMode {
2623
func (f fakeDirEntry) Info() (os.FileInfo, error) {
2724
return nil, nil
2825
}
29-
30-
func Test_sortVersions_sortsVersionsDescending(t *testing.T) {
31-
input := []versionMeta{
32-
{
33-
number: common.Version{
34-
Major: 7,
35-
Minor: 4,
36-
Patch: 1,
37-
},
38-
folder: fakeDirEntry{},
39-
},
40-
{
41-
number: common.Version{
42-
Major: 7,
43-
Minor: 4,
44-
Patch: 2,
45-
},
46-
folder: fakeDirEntry{},
47-
},
48-
{
49-
number: common.Version{
50-
Major: 8,
51-
Minor: 3,
52-
Patch: 0,
53-
},
54-
folder: fakeDirEntry{},
55-
},
56-
{
57-
number: common.Version{
58-
Major: 8,
59-
Minor: 3,
60-
Patch: 1,
61-
},
62-
folder: fakeDirEntry{},
63-
},
64-
{
65-
number: common.Version{
66-
Major: 8,
67-
Minor: 2,
68-
Patch: 0,
69-
},
70-
folder: fakeDirEntry{},
71-
},
72-
{
73-
number: common.Version{
74-
Major: 8,
75-
Minor: 2,
76-
Patch: 5,
77-
},
78-
folder: fakeDirEntry{},
79-
},
80-
}
81-
82-
output := sortVersions(input)
83-
84-
assert.Equal(t, []versionMeta{
85-
{
86-
number: common.Version{
87-
Major: 8,
88-
Minor: 3,
89-
Patch: 1,
90-
},
91-
folder: fakeDirEntry{},
92-
},
93-
{
94-
number: common.Version{
95-
Major: 8,
96-
Minor: 3,
97-
Patch: 0,
98-
},
99-
folder: fakeDirEntry{},
100-
},
101-
{
102-
number: common.Version{
103-
Major: 8,
104-
Minor: 2,
105-
Patch: 5,
106-
},
107-
folder: fakeDirEntry{},
108-
},
109-
{
110-
number: common.Version{
111-
Major: 8,
112-
Minor: 2,
113-
Patch: 0,
114-
},
115-
folder: fakeDirEntry{},
116-
},
117-
{
118-
number: common.Version{
119-
Major: 7,
120-
Minor: 4,
121-
Patch: 2,
122-
},
123-
folder: fakeDirEntry{},
124-
},
125-
{
126-
number: common.Version{
127-
Major: 7,
128-
Minor: 4,
129-
Patch: 1,
130-
},
131-
folder: fakeDirEntry{},
132-
},
133-
}, output)
134-
}

0 commit comments

Comments
 (0)