Mercurial > yakumo_izuru > aya
comparison zs.go @ 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 | ece0d406f2db |
comparison
equal
deleted
inserted
replaced
6:cb66f5b86616 | 7:11073a30f71f |
---|---|
35 func md(path, s string) (map[string]string, string) { | 35 func md(path, s string) (map[string]string, string) { |
36 url := path[:len(path)-len(filepath.Ext(path))] + ".html" | 36 url := path[:len(path)-len(filepath.Ext(path))] + ".html" |
37 v := map[string]string{ | 37 v := map[string]string{ |
38 "file": path, | 38 "file": path, |
39 "url": url, | 39 "url": url, |
40 "outdir": PUBDIR, | |
41 "output": filepath.Join(PUBDIR, url), | 40 "output": filepath.Join(PUBDIR, url), |
42 "layout": "index.html", | 41 "layout": "index.html", |
43 } | 42 } |
44 if strings.Index(s, "\n\n") == -1 { | 43 if strings.Index(s, "\n\n") == -1 { |
45 return map[string]string{}, s | 44 return map[string]string{}, s |
87 } | 86 } |
88 } | 87 } |
89 } | 88 } |
90 | 89 |
91 func env(vars map[string]string) []string { | 90 func env(vars map[string]string) []string { |
92 env := []string{"ZS=" + os.Args[0]} | 91 env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR} |
93 env = append(env, os.Environ()...) | 92 env = append(env, os.Environ()...) |
94 for k, v := range vars { | 93 if vars != nil { |
95 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v) | 94 for k, v := range vars { |
95 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v) | |
96 } | |
96 } | 97 } |
97 return env | 98 return env |
98 } | 99 } |
99 | 100 |
100 func run(cmd string, args []string, vars map[string]string, output io.Writer) error { | 101 func run(cmd string, args []string, vars map[string]string, output io.Writer) error { |
157 return err | 158 return err |
158 } | 159 } |
159 return nil | 160 return nil |
160 } | 161 } |
161 | 162 |
162 func copyFile(path string) error { | 163 func copyFile(path string) (err error) { |
163 if in, err := os.Open(path); err != nil { | 164 var in, out *os.File |
164 return err | 165 if in, err = os.Open(path); err == nil { |
165 } else { | |
166 defer in.Close() | 166 defer in.Close() |
167 if stat, err := in.Stat(); err != nil { | 167 if out, err = os.Create(filepath.Join(PUBDIR, path)); err == nil { |
168 return err | |
169 } else { | |
170 // Directory? | |
171 if stat.Mode().IsDir() { | |
172 os.Mkdir(filepath.Join(PUBDIR, path), 0755) | |
173 return nil | |
174 } | |
175 if !stat.Mode().IsRegular() { | |
176 return nil | |
177 } | |
178 } | |
179 if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil { | |
180 return err | |
181 } else { | |
182 defer out.Close() | 168 defer out.Close() |
183 _, err = io.Copy(out, in) | 169 _, err = io.Copy(out, in) |
184 return err | 170 } |
185 } | 171 } |
186 } | 172 return err |
187 } | 173 } |
188 | 174 |
189 func buildAll(once bool) { | 175 func buildAll(once bool) { |
190 lastModified := time.Unix(0, 0) | 176 lastModified := time.Unix(0, 0) |
177 modified := false | |
191 for { | 178 for { |
192 os.Mkdir(PUBDIR, 0755) | 179 os.Mkdir(PUBDIR, 0755) |
193 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { | 180 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { |
194 // ignore hidden files and directories | 181 // ignore hidden files and directories |
195 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") { | 182 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") { |
196 return nil | 183 return nil |
197 } | 184 } |
198 | 185 |
199 if info.ModTime().After(lastModified) { | 186 if info.IsDir() { |
187 os.Mkdir(filepath.Join(PUBDIR, path), 0755) | |
188 return nil | |
189 } else if info.ModTime().After(lastModified) { | |
190 if !modified { | |
191 // About to be modified, so run pre-build hook | |
192 run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil) | |
193 modified = true | |
194 } | |
200 ext := filepath.Ext(path) | 195 ext := filepath.Ext(path) |
201 if ext == ".md" || ext == "mkd" { | 196 if ext == ".md" || ext == "mkd" { |
202 log.Println("mkd: ", path) | 197 log.Println("mkd: ", path) |
203 return buildMarkdown(path) | 198 return buildMarkdown(path) |
204 } else { | 199 } else { |
208 } | 203 } |
209 return nil | 204 return nil |
210 }) | 205 }) |
211 if err != nil { | 206 if err != nil { |
212 log.Println("ERROR:", err) | 207 log.Println("ERROR:", err) |
208 } | |
209 if modified { | |
210 // Something was modified, so post-build hook | |
211 run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil) | |
212 modified = false | |
213 } | 213 } |
214 lastModified = time.Now() | 214 lastModified = time.Now() |
215 if once { | 215 if once { |
216 break | 216 break |
217 } | 217 } |