From bc88881c559ce1dd429d599e0ff7276a9a49c767 Mon Sep 17 00:00:00 2001 From: Brenden Soares Date: Mon, 23 Feb 2015 21:47:11 -0800 Subject: [PATCH] Overwrites generated app files instead of deleting directory --- harness/build.go | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/harness/build.go b/harness/build.go index bee1fc2..a4ac1ea 100755 --- a/harness/build.go +++ b/harness/build.go @@ -162,14 +162,44 @@ func getAppVersion() string { func cleanSource(dirs ...string) { for _, dir := range dirs { - tmpPath := path.Join(revel.AppPath, dir) - err := os.RemoveAll(tmpPath) + cleanDir(dir) if err != nil { revel.ERROR.Println("Failed to remove dir:", err) } } } +func cleanDir(dir string) { + revel.INFO.Println("Cleaning dir " + dir) + tmpPath := path.Join(revel.AppPath, dir) + f, err := os.Open(tmpPath) + if err != nil { + revel.ERROR.Println("Failed to clean dir:", err) + } else { + defer f.Close() + infos, err := f.Readdir(0) + if err != nil { + revel.ERROR.Println("Failed to clean dir:", err) + } else { + for _, info := range infos { + path := path.Join(tmpPath, info.Name()) + if info.IsDir() { + err := os.RemoveAll(path) + if err != nil { + revel.ERROR.Println("Failed to remove dir:", err) + } + } else { + err := os.Remove(path) + if err != nil { + revel.ERROR.Println("Failed to remove file:", err) + } + } + } + } + } +} + + // genSource renders the given template to produce source code, which it writes // to the given directory and file. func genSource(dir, filename, templateSource string, args map[string]interface{}) { @@ -178,14 +208,11 @@ func genSource(dir, filename, templateSource string, args map[string]interface{} args) // Create a fresh dir. + cleanSource(dir) tmpPath := path.Join(revel.AppPath, dir) - err := os.RemoveAll(tmpPath) - if err != nil { - revel.ERROR.Println("Failed to remove dir:", err) - } - err = os.Mkdir(tmpPath, 0777) - if err != nil { - revel.ERROR.Fatalf("Failed to make tmp directory: %v", err) + err := os.Mkdir(tmpPath, 0777) + if err != nil && !os.IsExist(err) { + revel.ERROR.Fatalf("Failed to make '%v' directory: %v", dir, err) } // Create the file