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  }