This repository has been archived by the owner on Nov 17, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 91
/
Copy pathmain.go
154 lines (139 loc) · 4.12 KB
/
main.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/hashicorp/go-version"
"github.com/mattn/gover"
)
func usage() {
fmt.Printf(`Usage of %s:
Tasks:
gom build [options] : Build with _vendor packages
gom install [options] : Install bundled packages into _vendor directory, by default.
GOM_VENDOR_NAME=. gom install [options], for regular src folder.
gom test [options] : Run tests with bundles
gom run [options] : Run go file with bundles
gom doc [options] : Run godoc for bundles
gom exec [arguments] : Execute command with bundle environment
gom tool [options] : Run go tool with bundles
gom env [arguments] : Run go env
gom fmt [arguments] : Run go fmt
gom list [arguments] : Run go list
gom vet [arguments] : Run go vet
gom update : Update all dependencies (Experiment)
gom gen travis-yml : Generate .travis.yml which uses "gom test"
gom gen gomfile : Scan packages from current directory as root
recursively, and generate Gomfile
gom lock : Generate Gomfile.lock
`, os.Args[0])
os.Exit(1)
}
var productionEnv = flag.Bool("production", false, "production environment")
var developmentEnv = flag.Bool("development", false, "development environment")
var testEnv = flag.Bool("test", false, "test environment")
var customGroups = flag.String("groups", "", "comma-separated list of Gomfile groups")
var customGroupList []string
var vendorFolder string
var isVendoringSupported bool
func init() {
isVendoringSupported = checkVendoringSupport()
if isVendoringSupported {
vendorFolder = "vendor"
} else {
if len(os.Getenv("GOM_VENDOR_NAME")) > 0 {
vendorFolder = os.Getenv("GOM_VENDOR_NAME")
} else {
vendorFolder = "_vendor"
}
}
}
func goversion() string {
defer recover()
return gover.Version()
}
// checkVendoringSupport return whether go have native vendor support.
// If return false, gom behave vendor directory as GOPATH.
// If return true, gom doesn't move anything.
func checkVendoringSupport() bool {
go150, _ := version.NewVersion("1.5.0")
go160, _ := version.NewVersion("1.6.0")
go173, _ := version.NewVersion("1.7.3")
ver := goversion()
// TODO: maybe gccgo?
if ver == "" {
return true
}
goVer, err := version.NewVersion(strings.TrimPrefix(ver, "go"))
if err != nil {
panic(fmt.Sprintf("gover.Version() returned invalid semantic version: %s", ver))
}
// See: https://golang.org/doc/go1.6#go_command
if goVer.LessThan(go150) {
return false
} else if (goVer.Equal(go150) || goVer.GreaterThan(go150)) && goVer.LessThan(go160) {
return os.Getenv("GO15VENDOREXPERIMENT") == "1"
} else if (goVer.Equal(go160) || goVer.GreaterThan(go160)) && goVer.LessThan(go173) {
return os.Getenv("GO15VENDOREXPERIMENT") != "0"
} else {
return true
}
}
func vendorSrc(vendor string) string {
if isVendoringSupported {
return vendor
} else {
return filepath.Join(vendor, "src")
}
}
func main() {
flag.Usage = usage
flag.Parse()
if flag.NArg() == 0 {
usage()
}
handleSignal()
if !*productionEnv && !*developmentEnv && !*testEnv {
*developmentEnv = true
}
customGroupList = strings.Split(*customGroups, ",")
var err error
subArgs := flag.Args()[1:]
switch flag.Arg(0) {
case "install", "i":
err = install(subArgs)
case "build", "b":
err = run(append([]string{"go", "build"}, subArgs...), None)
case "test", "t":
err = run(append([]string{"go", "test"}, subArgs...), None)
case "run", "r":
err = run(append([]string{"go", "run"}, subArgs...), None)
case "doc", "d":
err = run(append([]string{"godoc"}, subArgs...), None)
case "exec", "e":
err = run(subArgs, None)
case "env", "tool", "fmt", "list", "vet":
err = run(append([]string{"go", flag.Arg(0)}, subArgs...), None)
case "update", "u":
err = update()
case "gen", "g":
switch flag.Arg(1) {
case "travis-yml":
err = genTravisYml()
case "gomfile":
err = genGomfile()
default:
usage()
}
case "lock", "l":
err = genGomfileLock()
default:
usage()
}
if err != nil {
fmt.Fprintln(os.Stderr, "gom: ", err)
os.Exit(1)
}
}