Skip to content

Commit

Permalink
refactor: code optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
voidint committed Nov 19, 2023
1 parent d46fae3 commit 531f383
Show file tree
Hide file tree
Showing 12 changed files with 140 additions and 104 deletions.
31 changes: 6 additions & 25 deletions cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@ import (
"io"
"os"
"path/filepath"
"sort"
"strings"
"time"

"github.com/Masterminds/semver/v3"
"github.com/fatih/color"
"github.com/urfave/cli/v2"
"github.com/voidint/g/internal/build"
Expand Down Expand Up @@ -119,40 +117,23 @@ func installed() (versions map[string]bool) {
continue
}
vname := d.Name()
v, err := version.Semantify(vname)
if err != nil || v == nil {
continue
}
versions[vname] = (vname == inused)
}

return
}

var go1_21_0 = semver.MustParse("1.21.0") // https://github.com/golang/go/issues/57631

// render 渲染go版本列表
func render(installed map[string]bool, items []*semver.Version, out io.Writer) {
sort.Sort(semver.Collection(items))

for i := range items {
fields := strings.SplitN(items[i].String(), "-", 2)

v := fields[0]
if items[i].LessThan(go1_21_0) {
v = strings.TrimSuffix(strings.TrimSuffix(v, ".0"), ".0")
}
if len(fields) > 1 {
v += fields[1]
}
if inused, found := installed[v]; found {
func render(installed map[string]bool, items []*version.Version, out io.Writer) {
for _, v := range items {
if inused, found := installed[v.Name()]; found {
if inused {
color.New(color.FgGreen).Fprintf(out, "* %s\n", v)
color.New(color.FgGreen).Fprintf(out, "* %s\n", v.Name())
} else {
color.New(color.FgGreen).Fprintf(out, " %s\n", v)
color.New(color.FgGreen).Fprintf(out, " %s\n", v.Name())
}
} else {
fmt.Fprintf(out, " %s\n", v)
fmt.Fprintf(out, " %s\n", v.Name())
}
}
}
Expand Down
19 changes: 12 additions & 7 deletions cli/cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import (
"fmt"
"os"
"path/filepath"
"sort"
"strings"
"testing"
"time"

"github.com/Masterminds/semver/v3"
"github.com/stretchr/testify/assert"
"github.com/voidint/g/internal/version"
)

func Test_ghome(t *testing.T) {
Expand Down Expand Up @@ -40,14 +41,18 @@ func Test_inuse(t *testing.T) {
func Test_render(t *testing.T) {
t.Run("渲染go版本列表", func(t *testing.T) {
var buf strings.Builder
v0, _ := semver.NewVersion("1.13-beta1")
v1, _ := semver.NewVersion("1.11.11")
v2, _ := semver.NewVersion("1.7.0")
v3, _ := semver.NewVersion("1.8.1")
items := []*semver.Version{v0, v1, v2, v3}
items := []*version.Version{
version.MustNew("1.19beta1"),
version.MustNew("1.10beta2"),
version.MustNew("1.7"),
version.MustNew("1.8.1"),
version.MustNew("1.21.0"),
version.MustNew("1.21rc4"),
}
sort.Sort(version.Collection(items))

render(map[string]bool{"1.8.1": true}, items, &buf)
assert.Equal(t, " 1.7\n* 1.8.1\n 1.11.11\n 1.13beta1\n", buf.String())
assert.Equal(t, " 1.7\n* 1.8.1\n 1.10beta2\n 1.19beta1\n 1.21rc4\n 1.21.0\n", buf.String())
})
}

Expand Down
2 changes: 1 addition & 1 deletion cli/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ func install(ctx *cli.Context) (err error) {
if err = mkSymlink(targetV, goroot); err != nil {
return cli.Exit(errstring(err), 1)
}
fmt.Printf("Now using go%s\n", v.Name)
fmt.Printf("Now using go%s\n", v.Name())
return nil
}

Expand Down
5 changes: 2 additions & 3 deletions cli/ls.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"os"

"github.com/Masterminds/semver/v3"
"github.com/k0kubun/go-ansi"
"github.com/urfave/cli/v2"
"github.com/voidint/g/internal/version"
Expand All @@ -16,13 +15,13 @@ func list(*cli.Context) (err error) {
fmt.Printf("No version installed yet\n\n")
return nil
}
items := make([]*semver.Version, 0, len(dirs))
items := make([]*version.Version, 0, len(dirs))
for _, d := range dirs {
if !d.IsDir() {
continue
}

v, err := version.Semantify(d.Name())
v, err := version.New(d.Name())
if err != nil || v == nil {
continue
}
Expand Down
8 changes: 1 addition & 7 deletions cli/ls_remote.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"os"
"strings"

"github.com/Masterminds/semver/v3"
"github.com/k0kubun/go-ansi"
"github.com/urfave/cli/v2"
"github.com/voidint/g/internal/collector"
Expand Down Expand Up @@ -43,11 +42,6 @@ func listRemote(ctx *cli.Context) (err error) {
return cli.Exit(errstring(err), 1)
}

items := make([]*semver.Version, 0, len(vs))
for _, ver := range vs {
items = append(items, ver.SemanticVersion)
}

render(installed(), items, ansi.NewAnsiStdout())
render(installed(), vs, ansi.NewAnsiStdout())
return nil
}
7 changes: 6 additions & 1 deletion internal/collector/aliyun/aliyun_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"net/http"
stdurl "net/url"
"sort"
"strings"

"github.com/PuerkitoBio/goquery"
Expand Down Expand Up @@ -79,7 +80,11 @@ func (c *Collector) AllVersions() (vers []*version.Version, err error) {
if len(items) == 0 {
return make([]*version.Version, 0, 0), nil
}
return convert2Versions(items)
if vers, err = convert2Versions(items); err != nil {
return nil, err
}
sort.Sort(version.Collection(vers))
return vers, nil
}

func (c *Collector) findGoFileItems(table *goquery.Selection) (items []*goFileItem) {
Expand Down
3 changes: 1 addition & 2 deletions internal/collector/aliyun/go_file_item.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,11 @@ func convert2Versions(items []*goFileItem) (vers []*version.Version, err error)

vers = make([]*version.Version, 0, len(pkgMap))
for vname, pkgs := range pkgMap {
v, err := version.New(vname, pkgs)
v, err := version.New(vname, version.WithPackages(pkgs))
if err != nil {
return nil, err
}
vers = append(vers, v)
}

return vers, nil
}
11 changes: 8 additions & 3 deletions internal/collector/official/official_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"net/http"
stdurl "net/url"
"sort"
"strings"

"github.com/PuerkitoBio/goquery"
Expand Down Expand Up @@ -107,7 +108,7 @@ func (c *Collector) StableVersions() (items []*version.Version, err error) {
var v *version.Version
if v, err = version.New(
strings.TrimPrefix(vname, "go"),
c.findPackages(div.Find("table").First()),
version.WithPackages(c.findPackages(div.Find("table").First())),
); err != nil {
return false
}
Expand All @@ -119,6 +120,7 @@ func (c *Collector) StableVersions() (items []*version.Version, err error) {
if err != nil {
return nil, err
}
sort.Sort(version.Collection(items))
return items, nil
}

Expand All @@ -133,7 +135,7 @@ func (c *Collector) UnstableVersions() (items []*version.Version, err error) {
var v *version.Version
if v, err = version.New(
strings.TrimPrefix(vname, "go"),
c.findPackages(div.Find("table").First()),
version.WithPackages(c.findPackages(div.Find("table").First())),
); err != nil {
return false
}
Expand All @@ -145,6 +147,7 @@ func (c *Collector) UnstableVersions() (items []*version.Version, err error) {
if err != nil {
return nil, err
}
sort.Sort(version.Collection(items))
return items, nil
}

Expand All @@ -159,7 +162,7 @@ func (c *Collector) ArchivedVersions() (items []*version.Version, err error) {
var v *version.Version
if v, err = version.New(
strings.TrimPrefix(vname, "go"),
c.findPackages(div.Find("table").First()),
version.WithPackages(c.findPackages(div.Find("table").First())),
); err != nil {
return false
}
Expand All @@ -171,6 +174,7 @@ func (c *Collector) ArchivedVersions() (items []*version.Version, err error) {
if err != nil {
return nil, err
}
sort.Sort(version.Collection(items))
return items, nil
}

Expand All @@ -191,5 +195,6 @@ func (c *Collector) AllVersions() (items []*version.Version, err error) {
return nil, err
}
items = append(items, unstables...)
sort.Sort(version.Collection(items))
return items, nil
}
14 changes: 8 additions & 6 deletions internal/collector/official/official_collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ func TestUnstableVersions(t *testing.T) {
items, err := c.UnstableVersions()
assert.Nil(t, err)
assert.Equal(t, 1, len(items))
assert.Equal(t, "1.13beta1", items[0].Name)
assert.Equal(t, 15, len(items[0].Packages))
assert.Equal(t, "1.13beta1", items[0].Name())
assert.Equal(t, 15, len(items[0].Packages()))
})
}

Expand All @@ -221,8 +221,10 @@ func TestArchivedVersions(t *testing.T) {
items, err := c.ArchivedVersions()
assert.Nil(t, err)
assert.Equal(t, 70, len(items))
assert.Equal(t, "1.12.6", items[0].Name)
assert.Equal(t, 15, len(items[0].Packages))
assert.Equal(t, "1", items[0].Name())
assert.Equal(t, 2, len(items[0].Packages()))
assert.Equal(t, "1.12.6", items[len(items)-1].Name())
assert.Equal(t, 15, len(items[len(items)-1].Packages()))
})
}

Expand All @@ -235,7 +237,7 @@ func TestAllVersions(t *testing.T) {
items, err := c.AllVersions()
assert.Nil(t, err)
assert.Equal(t, 73, len(items))
assert.Equal(t, "1.13beta1", items[len(items)-1].Name)
assert.Equal(t, 15, len(items[len(items)-1].Packages))
assert.Equal(t, "1.13beta1", items[len(items)-1].Name())
assert.Equal(t, 15, len(items[len(items)-1].Packages()))
})
}
15 changes: 15 additions & 0 deletions internal/version/sort.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package version

type Collection []*Version

func (c Collection) Len() int {
return len(c)
}

func (c Collection) Less(i, j int) bool {
return c[i].sv.LessThan(c[j].sv)
}

func (c Collection) Swap(i, j int) {
c[i], c[j] = c[j], c[i]
}
Loading

0 comments on commit 531f383

Please sign in to comment.