changeset 7:11073a30f71f draft

simplified build process, added pre and post build hooks
author zaitsev.serge
date Fri, 05 Dec 2014 19:03:33 +0000
parents cb66f5b86616
children 90f73028f891
files zs.go
diffstat 1 files changed, 25 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/zs.go	Fri Dec 05 18:26:15 2014 +0000
+++ b/zs.go	Fri Dec 05 19:03:33 2014 +0000
@@ -37,7 +37,6 @@
 	v := map[string]string{
 		"file":   path,
 		"url":    url,
-		"outdir": PUBDIR,
 		"output": filepath.Join(PUBDIR, url),
 		"layout": "index.html",
 	}
@@ -89,10 +88,12 @@
 }
 
 func env(vars map[string]string) []string {
-	env := []string{"ZS=" + os.Args[0]}
+	env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR}
 	env = append(env, os.Environ()...)
-	for k, v := range vars {
-		env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
+	if vars != nil {
+		for k, v := range vars {
+			env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
+		}
 	}
 	return env
 }
@@ -159,35 +160,21 @@
 	return nil
 }
 
-func copyFile(path string) error {
-	if in, err := os.Open(path); err != nil {
-		return err
-	} else {
+func copyFile(path string) (err error) {
+	var in, out *os.File
+	if in, err = os.Open(path); err == nil {
 		defer in.Close()
-		if stat, err := in.Stat(); err != nil {
-			return err
-		} else {
-			// Directory?
-			if stat.Mode().IsDir() {
-				os.Mkdir(filepath.Join(PUBDIR, path), 0755)
-				return nil
-			}
-			if !stat.Mode().IsRegular() {
-				return nil
-			}
-		}
-		if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil {
-			return err
-		} else {
+		if out, err = os.Create(filepath.Join(PUBDIR, path)); err == nil {
 			defer out.Close()
 			_, err = io.Copy(out, in)
-			return err
 		}
 	}
+	return err
 }
 
 func buildAll(once bool) {
 	lastModified := time.Unix(0, 0)
+	modified := false
 	for {
 		os.Mkdir(PUBDIR, 0755)
 		err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
@@ -196,7 +183,15 @@
 				return nil
 			}
 
-			if info.ModTime().After(lastModified) {
+			if info.IsDir() {
+				os.Mkdir(filepath.Join(PUBDIR, path), 0755)
+				return nil
+			} else if info.ModTime().After(lastModified) {
+				if !modified {
+					// About to be modified, so run pre-build hook
+					run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil)
+					modified = true
+				}
 				ext := filepath.Ext(path)
 				if ext == ".md" || ext == "mkd" {
 					log.Println("mkd: ", path)
@@ -211,6 +206,11 @@
 		if err != nil {
 			log.Println("ERROR:", err)
 		}
+		if modified {
+			// Something was modified, so post-build hook
+			run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil)
+			modified = false
+		}
 		lastModified = time.Now()
 		if once {
 			break