Skip to content

Instantly share code, notes, and snippets.

@scribu
Last active December 15, 2015 03:49
man.go
package main
import (
"bytes"
"encoding/json"
"io"
"log"
"os"
"os/exec"
"strings"
)
var WP_CLI_PATH, WP_PATH string
type Command struct {
Name, Synopsis, Description string
Subcommands []Command
}
func getCommandsAsJSON() bytes.Buffer {
cmd := exec.Command(WP_CLI_PATH+"/bin/wp", "--cmd-dump")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
return out
}
func decodeJSON(out bytes.Buffer) Command {
dec := json.NewDecoder(bytes.NewReader(out.Bytes()))
var c Command
for {
if err := dec.Decode(&c); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
}
return c
}
func generateMan(part string, done chan bool) {
defer func() { done <- true }()
cmd := exec.Command(WP_CLI_PATH+"/bin/wp", part, "--man")
cmd.Dir = WP_PATH
out, _ := cmd.CombinedOutput()
log.Println(part)
log.Println(strings.Trim(string(out), "\n"))
}
func main() {
if len(os.Args) < 3 {
log.Fatal("usage: go run man.go /path/to/wp-cli /path/to/wp-dir")
}
WP_CLI_PATH = os.Args[1]
WP_PATH = os.Args[2]
wp := decodeJSON(getCommandsAsJSON())
done := make(chan bool)
for _, cmd := range wp.Subcommands {
go generateMan(cmd.Name, done)
}
for i := len(wp.Subcommands); i > 0; i-- {
<-done
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment