diff --git a/cmd/gen-docs/main.go b/cmd/gen-docs/main.go index 4a0bff26b..bfd4a12d0 100644 --- a/cmd/gen-docs/main.go +++ b/cmd/gen-docs/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os" + "path/filepath" "strings" "github.com/cli/cli/internal/docs" @@ -13,27 +14,30 @@ import ( ) func main() { - var flagError pflag.ErrorHandling - docCmd := pflag.NewFlagSet("", flagError) - manPage := docCmd.BoolP("man-page", "", false, "Generate manual pages") - website := docCmd.BoolP("website", "", false, "Generate website pages") - dir := docCmd.StringP("doc-path", "", "", "Path directory where you want generate doc files") - help := docCmd.BoolP("help", "h", false, "Help about any command") - - if err := docCmd.Parse(os.Args); err != nil { + if err := run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) os.Exit(1) } +} + +func run(args []string) error { + flags := pflag.NewFlagSet("", pflag.ContinueOnError) + manPage := flags.BoolP("man-page", "", false, "Generate manual pages") + website := flags.BoolP("website", "", false, "Generate website pages") + dir := flags.StringP("doc-path", "", "", "Path directory where you want generate doc files") + help := flags.BoolP("help", "h", false, "Help about any command") + + if err := flags.Parse(args); err != nil { + return err + } if *help { - _, err := fmt.Fprintf(os.Stderr, "Usage of %s:\n\n%s", os.Args[0], docCmd.FlagUsages()) - if err != nil { - fatal(err) - } - os.Exit(1) + fmt.Fprintf(os.Stderr, "Usage of %s:\n\n%s", filepath.Base(args[0]), flags.FlagUsages()) + return nil } if *dir == "" { - fatal("no dir set") + return fmt.Errorf("error: --doc-path not set") } io, _, _, _ := iostreams.Test() @@ -43,15 +47,13 @@ func main() { }, "", "") rootCmd.InitDefaultHelpCmd() - err := os.MkdirAll(*dir, 0755) - if err != nil { - fatal(err) + if err := os.MkdirAll(*dir, 0755); err != nil { + return err } if *website { - err = docs.GenMarkdownTreeCustom(rootCmd, *dir, filePrepender, linkHandler) - if err != nil { - fatal(err) + if err := docs.GenMarkdownTreeCustom(rootCmd, *dir, filePrepender, linkHandler); err != nil { + return err } } @@ -62,11 +64,12 @@ func main() { Source: "", Manual: "", } - err = docs.GenManTree(rootCmd, header, *dir) - if err != nil { - fatal(err) + if err := docs.GenManTree(rootCmd, header, *dir); err != nil { + return err } } + + return nil } func filePrepender(filename string) string { @@ -82,11 +85,6 @@ func linkHandler(name string) string { return fmt.Sprintf("./%s", strings.TrimSuffix(name, ".md")) } -func fatal(msg interface{}) { - fmt.Fprintln(os.Stderr, msg) - os.Exit(1) -} - type browser struct{} func (b *browser) Browse(url string) error { diff --git a/cmd/gen-docs/main_test.go b/cmd/gen-docs/main_test.go new file mode 100644 index 000000000..5c69ff6b2 --- /dev/null +++ b/cmd/gen-docs/main_test.go @@ -0,0 +1,32 @@ +package main + +import ( + "io/ioutil" + "strings" + "testing" +) + +func Test_run(t *testing.T) { + dir := t.TempDir() + args := []string{"--man-page", "--website", "--doc-path", dir} + err := run(args) + if err != nil { + t.Fatalf("got error: %v", err) + } + + manPage, err := ioutil.ReadFile(dir + "/gh-issue-create.1") + if err != nil { + t.Fatalf("error reading `gh-issue-create.1`: %v", err) + } + if !strings.Contains(string(manPage), `\fBgh issue create`) { + t.Fatal("man page corrupted") + } + + markdownPage, err := ioutil.ReadFile(dir + "/gh_issue_create.md") + if err != nil { + t.Fatalf("error reading `gh_issue_create.md`: %v", err) + } + if !strings.Contains(string(markdownPage), `## gh issue create`) { + t.Fatal("markdown page corrupted") + } +}