filebrowser/cmd/docs.go
Henrique Dias 2a9f983d94 feat: generate docs
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
2019-01-05 14:39:55 +00:00

107 lines
2.0 KiB
Go

package cmd
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"sort"
"strings"
"github.com/spf13/cobra"
"github.com/spf13/cobra/doc"
)
func init() {
rootCmd.AddCommand(docsCmd)
docsCmd.Flags().StringP("path", "p", "./docs", "path to save the docs")
}
func removeAll (dir string) error {
return filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if strings.HasPrefix(info.Name(), "filebrowser") {
return os.Remove(path)
}
return nil
})
}
func printToc (names []string) {
for i, name := range names {
name = strings.TrimSuffix(name, filepath.Ext(name))
name = strings.Replace(name, "-", " ", -1)
names[i] = name
}
sort.Strings(names)
toc := ""
for _, name := range names {
toc += "* [" + name + "](cli/" + strings.Replace(name, " ", "-", -1) + ".md)\n"
}
fmt.Println(toc)
}
var docsCmd = &cobra.Command{
Use: "docs",
Hidden: true,
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
dir := mustGetString(cmd, "path")
err := removeAll(dir)
checkErr(err)
err = doc.GenMarkdownTree(rootCmd, dir)
checkErr(err)
names := []string{}
err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() {
return err
}
if !strings.HasPrefix(info.Name(), "filebrowser") {
return nil
}
name := strings.Replace(info.Name(), "_", "-", -1)
names = append(names, name)
newPath := filepath.Join(dir, name)
err = os.Rename(path, newPath)
if err != nil {
return err
}
path = newPath
fd, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm)
if err != nil {
return err
}
defer fd.Close()
content := ""
sc := bufio.NewScanner(fd)
for sc.Scan() {
txt := sc.Text()
if txt == "### SEE ALSO" {
break
}
content += txt + "\n"
}
if err := sc.Err(); err != nil {
return err
}
content = strings.TrimSpace(content) + "\n"
return ioutil.WriteFile(path, []byte(content), 077)
})
checkErr(err)
printToc(names)
},
}