mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
12b2c21522
Read https://github.com/filebrowser/filebrowser/pull/575.
Former-commit-id: 7aedcaaf72b863033e3f089d6df308d41a3fd00c [formerly bdbe4d49161b901c4adf9c245895a1be2d62e4a7] [formerly acfc1ec67c423e0b3e065a8c1f8897c5249af65b [formerly d309066def
]]
Former-commit-id: 0c7d925a38a68ccabdf2c4bbd8c302ee89b93509 [formerly a6173925a1382955d93b334ded93f70d6dddd694]
Former-commit-id: e032e0804dd051df86f42962de2b39caec5318b7
130 lines
2.6 KiB
Go
130 lines
2.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(docsCmd)
|
|
docsCmd.Flags().StringP("path", "p", "./docs", "path to save the docs")
|
|
}
|
|
|
|
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")
|
|
generateDocs(rootCmd, dir)
|
|
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
|
|
}
|
|
|
|
names = append(names, info.Name())
|
|
return nil
|
|
})
|
|
|
|
checkErr(err)
|
|
printToc(names)
|
|
},
|
|
}
|
|
|
|
func generateDocs(cmd *cobra.Command, dir string) {
|
|
for _, c := range cmd.Commands() {
|
|
if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
|
|
continue
|
|
}
|
|
|
|
generateDocs(c, dir)
|
|
}
|
|
|
|
basename := strings.Replace(cmd.CommandPath(), " ", "-", -1) + ".md"
|
|
filename := filepath.Join(dir, basename)
|
|
f, err := os.Create(filename)
|
|
checkErr(err)
|
|
defer f.Close()
|
|
generateMarkdown(cmd, f)
|
|
}
|
|
|
|
func generateMarkdown(cmd *cobra.Command, w io.Writer) {
|
|
cmd.InitDefaultHelpCmd()
|
|
cmd.InitDefaultHelpFlag()
|
|
|
|
buf := new(bytes.Buffer)
|
|
name := cmd.CommandPath()
|
|
|
|
short := cmd.Short
|
|
long := cmd.Long
|
|
if len(long) == 0 {
|
|
long = short
|
|
}
|
|
|
|
buf.WriteString("---\ndescription: " + short + "\n---\n\n")
|
|
buf.WriteString("# " + name + "\n\n")
|
|
buf.WriteString("## Synopsis\n\n")
|
|
buf.WriteString(long + "\n\n")
|
|
|
|
if cmd.Runnable() {
|
|
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine()))
|
|
}
|
|
|
|
if len(cmd.Example) > 0 {
|
|
buf.WriteString("## Examples\n\n")
|
|
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example))
|
|
}
|
|
|
|
printOptions(buf, cmd, name)
|
|
_, err := buf.WriteTo(w)
|
|
checkErr(err)
|
|
}
|
|
|
|
func printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) {
|
|
flags := cmd.NonInheritedFlags()
|
|
flags.SetOutput(buf)
|
|
if flags.HasAvailableFlags() {
|
|
buf.WriteString("## Options\n\n```\n")
|
|
flags.PrintDefaults()
|
|
buf.WriteString("```\n\n")
|
|
}
|
|
|
|
parentFlags := cmd.InheritedFlags()
|
|
parentFlags.SetOutput(buf)
|
|
if parentFlags.HasAvailableFlags() {
|
|
buf.WriteString("### Inherited\n\n```\n")
|
|
parentFlags.PrintDefaults()
|
|
buf.WriteString("```\n")
|
|
}
|
|
}
|