1//+build ignore 2 3// The update command creates/updates the <html><head> elements of 4// each subpackage beneath docs so that "go get" requests redirect 5// to GitHub and other HTTP requests redirect to godoc.corp. 6// 7// Usage: 8// 9// $ cd $GOPATH/src/go.starlark.net 10// $ go run docs/update.go 11// 12package main 13 14import ( 15 "bytes" 16 "fmt" 17 "io/ioutil" 18 "log" 19 "os" 20 "os/exec" 21 "path/filepath" 22 "strings" 23) 24 25func main() { 26 log.SetFlags(0) 27 log.SetPrefix("update: ") 28 29 cwd, err := os.Getwd() 30 if err != nil { 31 log.Fatal(err) 32 } 33 if filepath.Base(cwd) != "go.starlark.net" { 34 log.Fatalf("must run from the go.starlark.net directory") 35 } 36 37 cmd := exec.Command("go", "list", "./...") 38 cmd.Stdout = new(bytes.Buffer) 39 cmd.Stderr = os.Stderr 40 if err := cmd.Run(); err != nil { 41 log.Fatal(err) 42 } 43 for _, pkg := range strings.Split(strings.TrimSpace(fmt.Sprint(cmd.Stdout)), "\n") { 44 rel := strings.TrimPrefix(pkg, "go.starlark.net/") // e.g. "cmd/starlark" 45 subdir := filepath.Join("docs", rel) 46 if err := os.MkdirAll(subdir, 0777); err != nil { 47 log.Fatal(err) 48 } 49 50 // Create missing docs/$rel/index.html files. 51 html := filepath.Join(subdir, "index.html") 52 if _, err := os.Stat(html); os.IsNotExist(err) { 53 data := strings.Replace(defaultHTML, "$PKG", pkg, -1) 54 if err := ioutil.WriteFile(html, []byte(data), 0666); err != nil { 55 log.Fatal(err) 56 } 57 log.Printf("created %s", html) 58 } 59 } 60} 61 62const defaultHTML = `<html> 63<head> 64 <meta name="go-import" content="go.starlark.net git https://github.com/google/starlark-go"></meta> 65 <meta http-equiv="refresh" content="0;URL='http://godoc.org/$PKG'" /></meta> 66</head> 67<body> 68 Redirecting to godoc.org page for $PKG... 69</body> 70</html> 71` 72