github.com/mckael/restic@v0.8.3/cmd/restic/cmd_generate.go (about) 1 package main 2 3 import ( 4 "time" 5 6 "github.com/restic/restic/internal/errors" 7 "github.com/spf13/cobra" 8 "github.com/spf13/cobra/doc" 9 ) 10 11 var cmdGenerate = &cobra.Command{ 12 Use: "generate [command]", 13 Short: "Generate manual pages and auto-completion files (bash, zsh)", 14 Long: ` 15 The "generate" command writes automatically generated files like the man pages 16 and the auto-completion files for bash and zsh). 17 `, 18 DisableAutoGenTag: true, 19 RunE: runGenerate, 20 } 21 22 type generateOptions struct { 23 ManDir string 24 BashCompletionFile string 25 ZSHCompletionFile string 26 } 27 28 var genOpts generateOptions 29 30 func init() { 31 cmdRoot.AddCommand(cmdGenerate) 32 fs := cmdGenerate.Flags() 33 fs.StringVar(&genOpts.ManDir, "man", "", "write man pages to `directory`") 34 fs.StringVar(&genOpts.BashCompletionFile, "bash-completion", "", "write bash completion `file`") 35 fs.StringVar(&genOpts.ZSHCompletionFile, "zsh-completion", "", "write zsh completion `file`") 36 } 37 38 func writeManpages(dir string) error { 39 // use a fixed date for the man pages so that generating them is deterministic 40 date, err := time.Parse("Jan 2006", "Jan 2017") 41 if err != nil { 42 return err 43 } 44 45 header := &doc.GenManHeader{ 46 Title: "restic backup", 47 Section: "1", 48 Source: "generated by `restic generate`", 49 Date: &date, 50 } 51 52 Verbosef("writing man pages to directory %v\n", dir) 53 return doc.GenManTree(cmdRoot, header, dir) 54 } 55 56 func writeBashCompletion(file string) error { 57 Verbosef("writing bash completion file to %v\n", file) 58 return cmdRoot.GenBashCompletionFile(file) 59 } 60 61 func writeZSHCompletion(file string) error { 62 Verbosef("writing zsh completion file to %v\n", file) 63 return cmdRoot.GenZshCompletionFile(file) 64 } 65 66 func runGenerate(cmd *cobra.Command, args []string) error { 67 if genOpts.ManDir != "" { 68 err := writeManpages(genOpts.ManDir) 69 if err != nil { 70 return err 71 } 72 } 73 74 if genOpts.BashCompletionFile != "" { 75 err := writeBashCompletion(genOpts.BashCompletionFile) 76 if err != nil { 77 return err 78 } 79 } 80 81 if genOpts.ZSHCompletionFile != "" { 82 err := writeZSHCompletion(genOpts.ZSHCompletionFile) 83 if err != nil { 84 return err 85 } 86 } 87 88 var empty generateOptions 89 if genOpts == empty { 90 return errors.Fatal("nothing to do, please specify at least one output file/dir") 91 } 92 93 return nil 94 }