diff options
Diffstat (limited to 'docs/update.go')
-rw-r--r-- | docs/update.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/docs/update.go b/docs/update.go new file mode 100644 index 0000000..be40427 --- /dev/null +++ b/docs/update.go @@ -0,0 +1,71 @@ +//+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> +` |