From c85b00902c38f1ab066280f30224521656155aba Mon Sep 17 00:00:00 2001 From: Kevin Manley Date: Tue, 10 May 2016 20:36:39 -0400 Subject: [PATCH 1/2] added verbose flag --- cmd/ego/main.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/cmd/ego/main.go b/cmd/ego/main.go index e22fa37..ab97b7b 100644 --- a/cmd/ego/main.go +++ b/cmd/ego/main.go @@ -8,7 +8,7 @@ import ( "os" "path/filepath" "regexp" - + "time" "github.com/benbjohnson/ego" ) @@ -16,9 +16,12 @@ import ( var version string func main() { + start := time.Now() + outfile := flag.String("o", "ego.go", "output file") pkgname := flag.String("package", "", "package name") versionFlag := flag.Bool("version", false, "print version") + verbose := flag.Bool("verbose", false, "verbose output") flag.Parse() log.SetFlags(0) @@ -53,6 +56,9 @@ func main() { // Parse every *.ego file. var templates []*ego.Template for _, path := range v.paths { + if *verbose { + fmt.Printf("parsing file: %s\n", path) + } t, err := ego.ParseFile(path) if err != nil { log.Fatal("parse file: ", err) @@ -62,6 +68,9 @@ func main() { // If we have no templates then exit. if len(templates) == 0 { + if *verbose { + fmt.Printf("no templates found\n") + } os.Exit(0) } @@ -73,10 +82,19 @@ func main() { } defer f.Close() + if *verbose { + fmt.Printf("writing %s\n", *outfile) + } + // Write template to file. if err := p.Write(f); err != nil { log.Fatal("write: ", err) } + + if *verbose { + elapsed := time.Since(start) + fmt.Printf("ego finished in %s\n", elapsed) + } } // visitor iterates over From 12075119e26d804cee85383bf2746dcc58e367a1 Mon Sep 17 00:00:00 2001 From: Kevin Manley Date: Tue, 10 May 2016 22:28:27 -0400 Subject: [PATCH 2/2] only write if at least one template is newer than the generated file --- cmd/ego/main.go | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/cmd/ego/main.go b/cmd/ego/main.go index ab97b7b..48f01f3 100644 --- a/cmd/ego/main.go +++ b/cmd/ego/main.go @@ -9,6 +9,7 @@ import ( "path/filepath" "regexp" "time" + "github.com/benbjohnson/ego" ) @@ -17,7 +18,7 @@ var version string func main() { start := time.Now() - + outfile := flag.String("o", "ego.go", "output file") pkgname := flag.String("package", "", "package name") versionFlag := flag.Bool("version", false, "print version") @@ -44,8 +45,14 @@ func main() { *pkgname = regexp.MustCompile(`(\w+).*`).ReplaceAllString(*pkgname, "$1") } - // Recursively retrieve all ego templates var v visitor + + fileInfo, err := os.Stat(*outfile) + if err == nil { + v.outfileModTime = fileInfo.ModTime() + } + + // Recursively retrieve all ego templates for _, root := range roots { if err := filepath.Walk(root, v.visit); err != nil { scanner.PrintError(os.Stderr, err) @@ -53,6 +60,13 @@ func main() { } } + if !v.anyFilesChanged { + if *verbose { + fmt.Printf("nothing to do\n") + } + os.Exit(0) + } + // Parse every *.ego file. var templates []*ego.Template for _, path := range v.paths { @@ -70,7 +84,7 @@ func main() { if len(templates) == 0 { if *verbose { fmt.Printf("no templates found\n") - } + } os.Exit(0) } @@ -85,12 +99,12 @@ func main() { if *verbose { fmt.Printf("writing %s\n", *outfile) } - + // Write template to file. if err := p.Write(f); err != nil { log.Fatal("write: ", err) } - + if *verbose { elapsed := time.Since(start) fmt.Printf("ego finished in %s\n", elapsed) @@ -99,7 +113,9 @@ func main() { // visitor iterates over type visitor struct { - paths []string + outfileModTime time.Time + paths []string + anyFilesChanged bool } func (v *visitor) visit(path string, info os.FileInfo, err error) error { @@ -108,6 +124,9 @@ func (v *visitor) visit(path string, info os.FileInfo, err error) error { } if !info.IsDir() && filepath.Ext(path) == ".ego" { v.paths = append(v.paths, path) + if info.ModTime().After(v.outfileModTime) { + v.anyFilesChanged = true + } } return nil }