forked from voidint/g
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathls_remote.go
74 lines (63 loc) · 1.52 KB
/
ls_remote.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package cli
import (
"os"
"strings"
"github.com/Masterminds/semver"
"github.com/urfave/cli"
"github.com/voidint/g/version"
)
const (
stableChannel = "stable"
unstableChannel = "unstable"
archivedChannel = "archived"
)
func listRemote(ctx *cli.Context) (err error) {
channel := ctx.Args().First()
if channel != "" && channel != stableChannel && channel != unstableChannel && channel != archivedChannel {
return cli.ShowSubcommandHelp(ctx)
}
var url string
if url = os.Getenv("G_MIRROR"); url == "" {
url = version.DefaultURL
}
c, err := version.NewCollector(url)
if err != nil {
return cli.NewExitError(errstring(err), 1)
}
var vs []*version.Version
switch channel {
case stableChannel:
vs, err = c.StableVersions()
case unstableChannel:
vs, err = c.UnstableVersions()
case archivedChannel:
vs, err = c.ArchivedVersions()
default:
vs, err = c.AllVersions()
}
if err != nil {
return cli.NewExitError(errstring(err), 1)
}
items := make([]*semver.Version, 0, len(vs))
for i := range vs {
vname := vs[i].Name
var idx int
if strings.Contains(vname, "alpha") {
idx = strings.Index(vname, "alpha")
} else if strings.Contains(vname, "beta") {
idx = strings.Index(vname, "beta")
} else if strings.Contains(vname, "rc") {
idx = strings.Index(vname, "rc")
}
if idx > 0 {
vname = vname[:idx] + "-" + vname[idx:]
}
v, err := semver.NewVersion(vname)
if err != nil || v == nil {
continue
}
items = append(items, v)
}
render(inuse(goroot), items, os.Stdout)
return nil
}