Skip to content

Commit b466173

Browse files
committed
Merge branch 'master' into feature/ls-remote
# Conflicts: # common/helpers.go # common/helpers_test.go
2 parents 23f1ab1 + 31544a5 commit b466173

File tree

4 files changed

+100
-32
lines changed

4 files changed

+100
-32
lines changed

commands/help.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
func Help(notFoundError bool) {
99
theme.Title("pvm: PHP Version Manager")
10-
theme.Info("Version 1.1.1")
10+
theme.Info("Version 1.2.0")
1111

1212
if notFoundError {
1313
theme.Error("Command not found")

commands/install.go

Lines changed: 60 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -85,64 +85,67 @@ func Install(args []string) {
8585
}
8686

8787
// check if .pvm folder exists
88-
if _, err := os.Stat(homeDir + "/.pvm"); os.IsNotExist(err) {
88+
pvmPath := filepath.Join(homeDir, ".pvm")
89+
if _, err := os.Stat(pvmPath); os.IsNotExist(err) {
8990
theme.Info("Creating .pvm folder in home directory")
90-
os.Mkdir(homeDir+"/.pvm", 0755)
91+
os.Mkdir(pvmPath, 0755)
9192
}
9293

9394
// check if .pvm/versions folder exists
94-
if _, err := os.Stat(homeDir + "/.pvm/versions"); os.IsNotExist(err) {
95+
versionsPath := filepath.Join(pvmPath, "versions")
96+
if _, err := os.Stat(versionsPath); os.IsNotExist(err) {
9597
theme.Info("Creating .pvm/versions folder in home directory")
96-
os.Mkdir(homeDir+"/.pvm/versions", 0755)
98+
os.Mkdir(versionsPath, 0755)
9799
}
98100

99101
theme.Info("Downloading")
100102

101-
// Get the data
102-
downloadResponse, err := http.Get("https://windows.php.net" + desiredVersion.Url)
103-
if err != nil {
104-
log.Fatalln(err)
105-
}
106-
107-
defer downloadResponse.Body.Close()
108-
109103
// zip filename from url
104+
zipUrl := "https://windows.php.net" + desiredVersion.Url
110105
zipFileName := strings.Split(desiredVersion.Url, "/")[len(strings.Split(desiredVersion.Url, "/"))-1]
106+
zipPath := filepath.Join(versionsPath, zipFileName)
111107

112108
// check if zip already exists
113-
if _, err := os.Stat(homeDir + "/.pvm/versions/" + zipFileName); err == nil {
109+
if _, err := os.Stat(zipPath); err == nil {
114110
theme.Error(fmt.Sprintf("PHP %s already exists", desiredVersion))
115111
return
116112
}
117113

118-
// Create the file
119-
out, err := os.Create(homeDir + "/.pvm/versions/" + zipFileName)
120-
if err != nil {
121-
log.Fatalln(err)
122-
}
123-
124-
// Write the body to file
125-
_, err = io.Copy(out, downloadResponse.Body)
126-
127-
if err != nil {
128-
out.Close()
129-
log.Fatalln(err)
114+
// Get the data
115+
if _, err := downloadFile(zipUrl, zipPath); err != nil {
116+
log.Fatalf("Error while downloading PHP from %v: %v!", zipUrl, err)
130117
}
131118

132-
// Close the file
133-
out.Close()
134-
135119
// extract the zip file to a folder
120+
phpFolder := strings.Replace(zipFileName, ".zip", "", -1)
121+
phpPath := filepath.Join(versionsPath, phpFolder)
136122
theme.Info("Unzipping")
137-
Unzip(homeDir+"/.pvm/versions/"+zipFileName, homeDir+"/.pvm/versions/"+strings.Replace(zipFileName, ".zip", "", -1))
123+
Unzip(zipPath, phpPath)
138124

139125
// remove the zip file
140126
theme.Info("Cleaning up")
141-
err = os.Remove(homeDir + "/.pvm/versions/" + zipFileName)
127+
err = os.Remove(zipPath)
142128
if err != nil {
143129
log.Fatalln(err)
144130
}
145131

132+
// install composer
133+
composerFolderPath := filepath.Join(phpPath, "composer")
134+
if _, err := os.Stat(composerFolderPath); os.IsNotExist(err) {
135+
theme.Info("Creating composer folder")
136+
os.Mkdir(composerFolderPath, 0755)
137+
}
138+
139+
composerPath := filepath.Join(composerFolderPath, "composer.phar")
140+
composerUrl := "https://getcomposer.org/download/latest-stable/composer.phar"
141+
if desiredVersion.LessThan(common.Version{Major: 7, Minor: 2}) {
142+
composerUrl = "https://getcomposer.org/download/latest-2.2.x/composer.phar"
143+
}
144+
145+
if _, err := downloadFile(composerUrl, composerPath); err != nil {
146+
log.Fatalf("Error while downloading Composer from %v: %v!", composerUrl, err)
147+
}
148+
146149
theme.Success(fmt.Sprintf("Finished installing PHP %s", desiredVersion))
147150
}
148151

@@ -258,3 +261,30 @@ func FindLatestMinor(versions []common.Version, major int, threadSafe bool) comm
258261

259262
return latestMinor
260263
}
264+
265+
func downloadFile(fileUrl string, filePath string) (bool, error) {
266+
downloadResponse, err := http.Get(fileUrl)
267+
if err != nil {
268+
return false, err
269+
}
270+
271+
defer downloadResponse.Body.Close()
272+
273+
// Create the file
274+
out, err := os.Create(filePath)
275+
if err != nil {
276+
return false, err
277+
}
278+
279+
// Write the body to file
280+
_, err = io.Copy(out, downloadResponse.Body)
281+
282+
if err != nil {
283+
out.Close()
284+
return false, err
285+
}
286+
287+
// Close the file
288+
out.Close()
289+
return true, nil
290+
}

commands/use.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,22 @@ func Use(args []string) {
108108
os.Remove(shPathCGI)
109109
}
110110

111+
// remove old composer bat script
112+
batPathComposer := filepath.Join(binPath, "composer.bat")
113+
if _, err := os.Stat(batPathComposer); err == nil {
114+
os.Remove(batPathComposer)
115+
}
116+
117+
// remove the old composer sh script
118+
shPathComposer := filepath.Join(binPath, "composer")
119+
if _, err := os.Stat(shPathComposer); err == nil {
120+
os.Remove(shPathComposer)
121+
}
122+
111123
versionFolderPath := filepath.Join(homeDir, ".pvm", "versions", selectedVersion.folder.Name())
112124
versionPath := filepath.Join(versionFolderPath, "php.exe")
113125
versionPathCGI := filepath.Join(versionFolderPath, "php-cgi.exe")
126+
composerPath := filepath.Join(versionFolderPath, "composer", "composer.phar")
114127

115128
// create bat script for php
116129
batCommand := "@echo off \n"
@@ -158,6 +171,31 @@ func Use(args []string) {
158171
log.Fatalln(err)
159172
}
160173

174+
// create bat script for composer
175+
batCommandComposer := "@echo off \n"
176+
batCommandComposer = batCommandComposer + "set filepath=\"" + versionPath + "\"\n"
177+
batCommandComposer = batCommandComposer + "set composerpath=\"" + composerPath + "\"\n"
178+
batCommandComposer = batCommandComposer + "set arguments=%*\n"
179+
batCommandComposer = batCommandComposer + "%filepath% %composerpath% %arguments%\n"
180+
181+
err = os.WriteFile(batPathComposer, []byte(batCommandComposer), 0755)
182+
183+
if err != nil {
184+
log.Fatalln(err)
185+
}
186+
187+
// create sh script for php
188+
shCommandComposer := "#!/bin/bash\n"
189+
shCommandComposer = shCommandComposer + "filepath=\"" + versionPath + "\"\n"
190+
shCommandComposer = shCommandComposer + "composerpath=\"" + composerPath + "\"\n"
191+
shCommandComposer = shCommandComposer + "\"$filepath\" \"$composerpath\" \"$@\""
192+
193+
err = os.WriteFile(shPathComposer, []byte(shCommandComposer), 0755)
194+
195+
if err != nil {
196+
log.Fatalln(err)
197+
}
198+
161199
// create directory link to ext directory
162200
extensionDirPath := filepath.Join(versionFolderPath, "ext")
163201
extensionLinkPath := filepath.Join(binPath, "ext")

common/helpers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ func Test_Version_Compare(t *testing.T) {
2525
v7 := Version{Major: 1, Minor: 2}
2626

2727
assert.Equal(t, v6.LessThan(v7), false)
28-
}
28+
}

0 commit comments

Comments
 (0)