| // Copyright 2017 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // The go-contrib-init command helps new Go contributors get their development |
| // environment set up for the Go contribution process. |
| // |
| // It aims to be a complement or alternative to https://golang.org/doc/contribute.html. |
| package main |
| |
| import ( |
| "bytes" |
| "flag" |
| "io/ioutil" |
| "log" |
| "os" |
| "path/filepath" |
| "runtime" |
| "strings" |
| ) |
| |
| var repo = flag.String("repo", "go", "Which go repo you want to contribute to. Use \"go\" for the core, or e.g. \"net\" for golang.org/x/net/*") |
| |
| func main() { |
| log.SetFlags(0) |
| flag.Parse() |
| |
| checkCLA() |
| checkGoroot() |
| checkWorkingDir() |
| } |
| |
| func checkCLA() { |
| slurp, err := ioutil.ReadFile(cookiesFile()) |
| if err != nil && !os.IsNotExist(err) { |
| log.Fatal(err) |
| } |
| if bytes.Contains(slurp, []byte("go.googlesource.com")) && |
| bytes.Contains(slurp, []byte("go-review.googlesource.com")) { |
| // Probably good. |
| return |
| } |
| log.Fatal("Your .gitcookies file isn't configured.\n" + |
| "Next steps:\n" + |
| " * Submit a CLA (https://golang.org/doc/contribute.html#cla) if not done\n" + |
| " * Go to https://go.googlesource.com/ and click \"Generate Password\" at the top,\n" + |
| " then follow instructions.\n" + |
| " * Run go-contrib-init again.\n") |
| } |
| |
| func cookiesFile() string { |
| if runtime.GOOS == "windows" { |
| return filepath.Join(os.Getenv("USERPROFILE"), ".gitcookies") |
| } |
| return filepath.Join(os.Getenv("HOME"), ".gitcookies") |
| } |
| |
| func checkGoroot() { |
| v := os.Getenv("GOROOT") |
| if v == "" { |
| return |
| } |
| if *repo == "go" { |
| if strings.HasPrefix(v, "/usr/") { |
| log.Fatalf("Your GOROOT environment variable is set to %q\n"+ |
| "This is almost certainly not what you want. Either unset\n"+ |
| "your GOROOT or set it to the path of your development version\n"+ |
| "of Go.", v) |
| } |
| slurp, err := ioutil.ReadFile(filepath.Join(v, "VERSION")) |
| if err == nil { |
| slurp = bytes.TrimSpace(slurp) |
| log.Fatalf("Your GOROOT environment variable is set to %q\n"+ |
| "But that path is to a binary release of Go, with VERSION file %q.\n"+ |
| "You should hack on Go in a fresh checkout of Go. Fix or unset your GOROOT.\n", |
| v, slurp) |
| } |
| } |
| } |
| |
| func checkWorkingDir() { |
| // TODO |
| } |