107 lines
2.0 KiB
Go
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)
|
|
},
|
|
}
|