Skip to content

Commit d532797

Browse files
committed
add: reference operations for cmds
1 parent 8e18250 commit d532797

File tree

6 files changed

+92
-27
lines changed

6 files changed

+92
-27
lines changed

cmd/downgrade.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package cmd
22

33
import (
4-
"fmt"
5-
4+
"context"
5+
"github.com/GoFarsi/gvm/internal"
66
"github.com/spf13/cobra"
7+
"log"
78
)
89

910
// downgradeCmd represents the downgrade command
@@ -20,7 +21,19 @@ For example:
2021
$ gvm downgrade --version 1.x.x --backup
2122
`,
2223
Run: func(cmd *cobra.Command, args []string) {
23-
fmt.Println("implement me!!")
24+
ver, err := cmd.Flags().GetString("version")
25+
if err != nil {
26+
log.Fatalln(err)
27+
}
28+
29+
backup, err := cmd.Flags().GetBool("backup")
30+
if err != nil {
31+
log.Fatalln(err)
32+
}
33+
34+
if err := internal.DowngradeGo(context.Background(), ver, backup); err != nil {
35+
log.Fatalln(err)
36+
}
2437
},
2538
}
2639

cmd/install.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cmd
22

33
import (
4-
"fmt"
4+
"context"
5+
"github.com/GoFarsi/gvm/internal"
6+
"log"
57

68
"github.com/spf13/cobra"
79
)
@@ -20,7 +22,19 @@ For example:
2022
$ gvm install --version 1.x.x --backup
2123
`,
2224
Run: func(cmd *cobra.Command, args []string) {
23-
fmt.Println("implement me!!!")
25+
ver, err := cmd.Flags().GetString("version")
26+
if err != nil {
27+
log.Fatalln(err)
28+
}
29+
30+
backup, err := cmd.Flags().GetBool("backup")
31+
if err != nil {
32+
log.Fatalln(err)
33+
}
34+
35+
if err := internal.InstallGo(context.Background(), ver, backup); err != nil {
36+
log.Fatalln(err)
37+
}
2438
},
2539
}
2640

cmd/list.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package cmd
22

33
import (
44
"fmt"
5-
"github.com/GoFarsi/gvm/api"
65
"github.com/GoFarsi/gvm/errors"
6+
"github.com/GoFarsi/gvm/internal"
77
"log"
88

99
"github.com/spf13/cobra"
@@ -19,7 +19,7 @@ For example:
1919
$ gvm list
2020
$ gvm list --line 10`,
2121
Run: func(cmd *cobra.Command, args []string) {
22-
list, err := api.NewList()
22+
list, err := internal.NewList()
2323
if err != nil {
2424
log.Fatalln(errors.ERR_NETWORK_TIMEOUT)
2525
}

cmd/upgrade.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cmd
22

33
import (
4-
"fmt"
4+
"context"
5+
"github.com/GoFarsi/gvm/internal"
6+
"log"
57

68
"github.com/spf13/cobra"
79
)
@@ -20,7 +22,19 @@ For example:
2022
$ gvm upgrade --version 1.x.x --backup
2123
`,
2224
Run: func(cmd *cobra.Command, args []string) {
23-
fmt.Println("upgrade called")
25+
ver, err := cmd.Flags().GetString("version")
26+
if err != nil {
27+
log.Fatalln(err)
28+
}
29+
30+
backup, err := cmd.Flags().GetBool("backup")
31+
if err != nil {
32+
log.Fatalln(err)
33+
}
34+
35+
if err := internal.UpgradeGo(context.Background(), ver, backup); err != nil {
36+
log.Fatalln(err)
37+
}
2438
},
2539
}
2640

api/download.go renamed to internal/download.go

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
package api
1+
package internal
22

33
import (
44
"context"
55
"fmt"
66
"github.com/Code-Hex/pget"
77
"github.com/GoFarsi/gvm/cli"
8+
"github.com/GoFarsi/gvm/errors"
9+
"log"
810
"net/http"
911
"os"
1012
"runtime"
@@ -13,16 +15,19 @@ import (
1315
type Download struct {
1416
version string
1517
downloadPath string
18+
backup bool
1619
}
1720

1821
type Target struct {
1922
FileName string
23+
Path string
2024
ContentLength int64
2125
Url string
26+
backup bool
2227
}
2328

24-
func newDownload(ver string, downloadPath string) (*Download, error) {
25-
def, err := defaultCfg()
29+
func newDownload(ver string, backup bool) (*Download, error) {
30+
def, err := defaultCfg(backup)
2631
if err != nil {
2732
return nil, err
2833
}
@@ -31,35 +36,46 @@ func newDownload(ver string, downloadPath string) (*Download, error) {
3136
def.version = ver
3237
}
3338

34-
if len(downloadPath) != 0 {
35-
def.downloadPath = downloadPath
36-
}
37-
3839
return def, nil
3940
}
4041

41-
func defaultCfg() (*Download, error) {
42+
func defaultCfg(backup bool) (*Download, error) {
4243
list, err := NewList()
4344
if err != nil {
4445
return nil, err
4546
}
46-
return &Download{
47+
48+
dl := &Download{
4749
version: list.LastVersion(),
4850
downloadPath: os.TempDir(),
49-
}, nil
51+
backup: backup,
52+
}
53+
54+
if backup {
55+
home, err := os.UserHomeDir()
56+
if err != nil {
57+
return nil, err
58+
}
59+
dl.downloadPath = home
60+
}
61+
62+
return dl, nil
5063
}
5164

52-
func (d *Download) Download(ctx context.Context) error {
65+
func (d *Download) download(ctx context.Context) (*Target, error) {
5366
target := d.getFileInfo(ctx, fmt.Sprintf(filePattern, d.version, runtime.GOARCH))
5467
if target == nil {
55-
return nil
68+
return nil, errors.ERR_CANT_FIND_ACTIVE_MIRROR
5669
}
5770

58-
if err := target.download(ctx, d.downloadPath); err != nil {
59-
return err
71+
target.Path = d.downloadPath
72+
target.backup = d.backup
73+
74+
if err := target.download(ctx); err != nil {
75+
return nil, err
6076
}
6177

62-
return nil
78+
return target, nil
6379
}
6480

6581
func (*Download) getFileInfo(ctx context.Context, fileName string) *Target {
@@ -92,17 +108,25 @@ func (*Download) getFileInfo(ctx context.Context, fileName string) *Target {
92108
return nil
93109
}
94110

95-
func (t *Target) download(ctx context.Context, downloadPath string) error {
111+
func (t *Target) download(ctx context.Context) error {
112+
log.Printf("started download %s with size %d MB...", t.FileName, t.ContentLength/1024/1024)
96113
dl := pget.New()
97114
args := []string{
98115
"-o",
99-
downloadPath,
116+
t.Path,
100117
"-t",
101118
"30",
102119
t.Url,
103120
}
104121
if err := dl.Run(ctx, "", args); err != nil {
105122
return err
106123
}
124+
125+
if t.backup {
126+
log.Printf("download file %s completed and backed up in %s path.", t.FileName, t.Path)
127+
return nil
128+
}
129+
130+
log.Printf("download file %s completed.", t.FileName)
107131
return nil
108132
}

api/list.go renamed to internal/list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package api
1+
package internal
22

33
import (
44
"context"

0 commit comments

Comments
 (0)