From 8df0e5aa7d4dc43b1384d91a820c9a748ccbea6b Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Tue, 13 Aug 2019 12:24:10 -0400 Subject: initial commit --- apply.go | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 apply.go (limited to 'apply.go') diff --git a/apply.go b/apply.go new file mode 100644 index 0000000..7ea5bf9 --- /dev/null +++ b/apply.go @@ -0,0 +1,77 @@ +package main + +import ( + "fmt" + "os" + "path/filepath" + "text/template" +) + +func apply(args []string) error { + if len(args) != 0 { + return applyFiles(args) + } + names, err := getFileNames() + if err != nil { + return err + } + return applyFiles(names) +} + +func applyFiles(names []string) error { + for _, name := range names { + fmt.Printf("applying %s\n", name) + if err := applyFile(name); err != nil { + return fmt.Errorf("could not apply %s: %v", name, err) + } + } + return nil +} + +func applyFile(name string) error { + src := filepath.Join(base, "templates", name) + t, err := template.New(filepath.Base(name)).Funcs(buildFuncMap()).ParseFiles(src) + if err != nil { + return fmt.Errorf("could not build template: %v", err) + } + data, err := getTemplateData() + if err != nil { + return err + } + d := filepath.Join(dest, name) + if err = os.MkdirAll(filepath.Dir(d), 0700); err != nil { + return err + } + out, err := os.OpenFile(d, os.O_CREATE|os.O_WRONLY, 0600) + if err != nil { + return err + } + defer out.Close() + if err = t.Execute(out, data); err != nil { + return fmt.Errorf("could not execute template: %v", err) + } + return nil +} + +func getFileNames() ([]string, error) { + var names []string + d := filepath.Join(base, "templates") + err := filepath.Walk(d, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil + } + name, err := filepath.Rel(d, path) + if err != nil { + return err + } + names = append(names, name) + return nil + }) + if err != nil { + return nil, err + } + return names, nil +} -- cgit v1.2.3