Fix replace feature

This commit is contained in:
Patrick O'brien 2017-02-05 02:24:20 +10:00
parent acaf94ef5f
commit 60814eed1f
2 changed files with 32 additions and 19 deletions

View file

@ -198,8 +198,7 @@ func (s *State) initTemplates() error {
return err return err
} }
testMain := s.Config.DriverName + "_main.tpl" s.TestMainTemplate, err = loadTemplate(filepath.Join(basePath, templatesTestMainDirectory), s.Config.DriverName+"_main.tpl")
s.TestMainTemplate, err = loadTemplate(nil, testMain, filepath.Join(basePath, templatesTestMainDirectory, testMain))
if err != nil { if err != nil {
return err return err
} }
@ -218,18 +217,21 @@ func (s *State) processReplacements() error {
toReplace, replaceWith := splits[0], splits[1] toReplace, replaceWith := splits[0], splits[1]
toReplaceSplit := strings.Split(toReplace, string(filepath.Separator))
fileName := toReplaceSplit[len(toReplaceSplit)-1]
var err error var err error
switch filepath.Dir(toReplace) { switch filepath.Dir(toReplace) {
case templatesDirectory: case templatesDirectory:
_, err = loadTemplate(s.Templates.Template, toReplace, replaceWith) err = replaceTemplate(s.Templates.Template, fileName, replaceWith)
case templatesSingletonDirectory: case templatesSingletonDirectory:
_, err = loadTemplate(s.SingletonTemplates.Template, toReplace, replaceWith) err = replaceTemplate(s.SingletonTemplates.Template, fileName, replaceWith)
case templatesTestDirectory: case templatesTestDirectory:
_, err = loadTemplate(s.TestTemplates.Template, toReplace, replaceWith) err = replaceTemplate(s.TestTemplates.Template, fileName, replaceWith)
case templatesSingletonTestDirectory: case templatesSingletonTestDirectory:
_, err = loadTemplate(s.SingletonTestTemplates.Template, toReplace, replaceWith) err = replaceTemplate(s.SingletonTestTemplates.Template, fileName, replaceWith)
case templatesTestMainDirectory: case templatesTestMainDirectory:
s.TestMainTemplate, err = loadTemplate(nil, toReplace, replaceWith) err = replaceTemplate(s.TestMainTemplate, fileName, replaceWith)
default: default:
return errors.Errorf("replace file's directory not part of any known folder: %s", toReplace) return errors.Errorf("replace file's directory not part of any known folder: %s", toReplace)
} }

View file

@ -111,24 +111,35 @@ func loadTemplates(dir string) (*templateList, error) {
return &templateList{Template: tpl}, err return &templateList{Template: tpl}, err
} }
// loadTemplate loads a single template, uses tpl as a base template if provided // loadTemplate loads a single template file
// and creates a new base template if not. func loadTemplate(dir string, filename string) (*template.Template, error) {
func loadTemplate(tpl *template.Template, name, filename string) (*template.Template, error) { pattern := filepath.Join(dir, filename)
tpl, err := template.New("").Funcs(templateFunctions).ParseFiles(pattern)
if err != nil {
return nil, err
}
return tpl.Lookup(filename), err
}
// replaceTemplate finds the template matching with name and replaces its
// contents with the contents of the template located at filename
func replaceTemplate(tpl *template.Template, name, filename string) error {
if tpl == nil {
return fmt.Errorf("template for %s is nil", name)
}
b, err := ioutil.ReadFile(filename) b, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed reading template file: %s", filename) return errors.Wrapf(err, "failed reading template file: %s", filename)
} }
if tpl == nil { if tpl, err = tpl.New(name).Funcs(templateFunctions).Parse(string(b)); err != nil {
tpl = template.New(name) return errors.Wrapf(err, "failed to parse template file: %s", filename)
} else {
tpl = tpl.New(name)
}
if tpl, err = tpl.Funcs(templateFunctions).Parse(string(b)); err != nil {
return nil, errors.Wrapf(err, "failed to parse template file: %s", filename)
} }
return tpl, nil return nil
} }
// set is to stop duplication from named enums, allowing a template loop // set is to stop duplication from named enums, allowing a template loop