You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.7 KiB

//+build ignore
// The update command creates/updates the <html><head> elements of
// each subpackage beneath docs so that "go get" requests redirect
// to GitHub and other HTTP requests redirect to godoc.corp.
//
// Usage:
//
// $ cd $GOPATH/src/go.starlark.net
// $ go run docs/update.go
//
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
)
func main() {
log.SetFlags(0)
log.SetPrefix("update: ")
cwd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
if filepath.Base(cwd) != "go.starlark.net" {
log.Fatalf("must run from the go.starlark.net directory")
}
cmd := exec.Command("go", "list", "./...")
cmd.Stdout = new(bytes.Buffer)
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
for _, pkg := range strings.Split(strings.TrimSpace(fmt.Sprint(cmd.Stdout)), "\n") {
rel := strings.TrimPrefix(pkg, "go.starlark.net/") // e.g. "cmd/starlark"
subdir := filepath.Join("docs", rel)
if err := os.MkdirAll(subdir, 0777); err != nil {
log.Fatal(err)
}
// Create missing docs/$rel/index.html files.
html := filepath.Join(subdir, "index.html")
if _, err := os.Stat(html); os.IsNotExist(err) {
data := strings.Replace(defaultHTML, "$PKG", pkg, -1)
if err := ioutil.WriteFile(html, []byte(data), 0666); err != nil {
log.Fatal(err)
}
log.Printf("created %s", html)
}
}
}
const defaultHTML = `<html>
<head>
<meta name="go-import" content="go.starlark.net git https://github.com/google/starlark-go"></meta>
<meta http-equiv="refresh" content="0;URL='http://godoc.org/$PKG'" /></meta>
</head>
<body>
Redirecting to godoc.org page for $PKG...
</body>
</html>
`