github.com/fredbi/git-chglog@v0.0.0-20190706071416-d35c598eac81/cmd/git-chglog/initializer.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "path/filepath" 6 7 "github.com/fatih/color" 8 gitcmd "github.com/tsuyoshiwada/go-gitcmd" 9 ) 10 11 // Initializer ... 12 type Initializer struct { 13 ctx *InitContext 14 client gitcmd.Client 15 fs FileSystem 16 logger *Logger 17 questioner Questioner 18 configBuilder ConfigBuilder 19 templateBuilderFactory TemplateBuilderFactory 20 } 21 22 // NewInitializer ... 23 func NewInitializer( 24 ctx *InitContext, 25 fs FileSystem, 26 questioner Questioner, 27 configBuilder ConfigBuilder, 28 tplBuilderFactory TemplateBuilderFactory) *Initializer { 29 return &Initializer{ 30 ctx: ctx, 31 fs: fs, 32 logger: NewLogger(ctx.Stdout, ctx.Stderr, false, false), 33 questioner: questioner, 34 configBuilder: configBuilder, 35 templateBuilderFactory: tplBuilderFactory, 36 } 37 } 38 39 // Run ... 40 func (init *Initializer) Run() int { 41 ans, err := init.questioner.Ask() 42 if err != nil { 43 init.logger.Error(err.Error()) 44 return ExitCodeError 45 } 46 47 if err = init.fs.MkdirP(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir)); err != nil { 48 init.logger.Error(err.Error()) 49 return ExitCodeError 50 } 51 52 if err = init.generateConfig(ans); err != nil { 53 init.logger.Error(err.Error()) 54 return ExitCodeError 55 } 56 57 if err = init.generateTemplate(ans); err != nil { 58 init.logger.Error(err.Error()) 59 return ExitCodeError 60 } 61 62 success := color.CyanString("✔") 63 init.logger.Log(fmt.Sprintf(` 64 :sparkles: %s 65 %s %s 66 %s %s 67 `, 68 color.GreenString("Configuration file and template generation completed!"), 69 success, 70 filepath.Join(ans.ConfigDir, defaultConfigFilename), 71 success, 72 filepath.Join(ans.ConfigDir, defaultTemplateFilename), 73 )) 74 75 return ExitCodeOK 76 } 77 78 func (init *Initializer) generateConfig(ans *Answer) error { 79 s, err := init.configBuilder.Build(ans) 80 if err != nil { 81 return err 82 } 83 84 return init.fs.WriteFile(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir, defaultConfigFilename), []byte(s)) 85 } 86 87 func (init *Initializer) generateTemplate(ans *Answer) error { 88 templateBuilder := init.templateBuilderFactory(ans.Template) 89 s, err := templateBuilder.Build(ans) 90 if err != nil { 91 return err 92 } 93 94 return init.fs.WriteFile(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir, defaultTemplateFilename), []byte(s)) 95 }