annotate zs.go @ 12:7119cca186bf draft

added travis button
author zaitsev.serge
date Fri, 10 Apr 2015 12:11:37 +0000
parents 11073a30f71f
children ece0d406f2db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
1 package main
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
2
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
3 import (
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
4 "bytes"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
5 "fmt"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
6 "io"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
7 "io/ioutil"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
8 "log"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
9 "os"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
10 "os/exec"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
11 "path"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
12 "path/filepath"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
13 "strings"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
14 "time"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
15
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
16 "github.com/russross/blackfriday"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
17 )
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
18
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
19 const (
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
20 ZSDIR = ".zs"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
21 PUBDIR = ".pub"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
22 )
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
23
3
53dea9841cd9 moved eval func type to the top, added some error logs
zaitsev.serge
parents: 2
diff changeset
24 type EvalFn func(args []string, vars map[string]string) (string, error)
53dea9841cd9 moved eval func type to the top, added some error logs
zaitsev.serge
parents: 2
diff changeset
25
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
26 func split2(s, delim string) (string, string) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
27 parts := strings.SplitN(s, delim, 2)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
28 if len(parts) == 2 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
29 return parts[0], parts[1]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
30 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
31 return parts[0], ""
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
32 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
33 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
34
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
35 func md(path, s string) (map[string]string, string) {
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
36 url := path[:len(path)-len(filepath.Ext(path))] + ".html"
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
37 v := map[string]string{
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
38 "file": path,
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
39 "url": url,
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
40 "output": filepath.Join(PUBDIR, url),
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
41 "layout": "index.html",
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
42 }
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 0
diff changeset
43 if strings.Index(s, "\n\n") == -1 {
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 0
diff changeset
44 return map[string]string{}, s
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 0
diff changeset
45 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
46 header, body := split2(s, "\n\n")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
47 for _, line := range strings.Split(header, "\n") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
48 key, value := split2(line, ":")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
49 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
50 }
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
51 if strings.HasPrefix(v["url"], "./") {
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
52 v["url"] = v["url"][2:]
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
53 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
54 return v, body
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
55 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
56
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
57 func render(s string, vars map[string]string, eval EvalFn) (string, error) {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
58 delim_open := "{{"
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
59 delim_close := "}}"
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
60
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
61 out := bytes.NewBuffer(nil)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
62 for {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
63 if from := strings.Index(s, delim_open); from == -1 {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
64 out.WriteString(s)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
65 return out.String(), nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
66 } else {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
67 if to := strings.Index(s, delim_close); to == -1 {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
68 return "", fmt.Errorf("Close delim not found")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
69 } else {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
70 out.WriteString(s[:from])
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
71 cmd := s[from+len(delim_open) : to]
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
72 s = s[to+len(delim_close):]
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
73 m := strings.Fields(cmd)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
74 if len(m) == 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
75 if v, ok := vars[m[0]]; ok {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
76 out.WriteString(v)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
77 continue
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
78 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
79 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
80 if res, err := eval(m, vars); err == nil {
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
81 out.WriteString(res)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
82 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
83 log.Println(err) // silent
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
84 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
85 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
86 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
87 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
88 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
89
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
90 func env(vars map[string]string) []string {
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
91 env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR}
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
92 env = append(env, os.Environ()...)
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
93 if vars != nil {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
94 for k, v := range vars {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
95 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
96 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
97 }
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
98 return env
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
99 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
100
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
101 func run(cmd string, args []string, vars map[string]string, output io.Writer) error {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
102 var errbuf bytes.Buffer
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
103 c := exec.Command(cmd, args...)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
104 c.Env = env(vars)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
105 c.Stdout = output
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
106 c.Stderr = &errbuf
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
107
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
108 err := c.Run()
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
109
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
110 if errbuf.Len() > 0 {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
111 log.Println(errbuf.String())
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
112 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
113
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
114 if err != nil {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
115 return err
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
116 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
117 return nil
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
118 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
119
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
120 func eval(cmd []string, vars map[string]string) (string, error) {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
121 outbuf := bytes.NewBuffer(nil)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
122 err := run(path.Join(ZSDIR, cmd[0]), cmd[1:], vars, outbuf)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
123 if err != nil {
5
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
124 if _, ok := err.(*exec.ExitError); ok {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
125 return "", err
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
126 }
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
127 outbuf = bytes.NewBuffer(nil)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
128 err := run(cmd[0], cmd[1:], vars, outbuf)
5
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
129 // Return exit errors, but ignore if the command was not found
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
130 if _, ok := err.(*exec.ExitError); ok {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
131 return "", err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
132 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
133 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
134 return outbuf.String(), nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
135 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
136
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
137 func buildMarkdown(path string) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
138 b, err := ioutil.ReadFile(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
139 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
140 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
141 }
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
142 v, body := md(path, string(b))
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
143 content, err := render(body, v, eval)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
144 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
145 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
146 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
147 v["content"] = string(blackfriday.MarkdownBasic([]byte(content)))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
148 b, err = ioutil.ReadFile(filepath.Join(ZSDIR, v["layout"]))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
149 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
150 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
151 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
152 content, err = render(string(b), v, eval)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
153 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
154 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
155 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
156 err = ioutil.WriteFile(v["output"], []byte(content), 0666)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
157 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
158 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
159 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
160 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
161 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
162
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
163 func copyFile(path string) (err error) {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
164 var in, out *os.File
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
165 if in, err = os.Open(path); err == nil {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
166 defer in.Close()
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
167 if out, err = os.Create(filepath.Join(PUBDIR, path)); err == nil {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
168 defer out.Close()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
169 _, err = io.Copy(out, in)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
170 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
171 }
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
172 return err
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
173 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
174
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
175 func buildAll(once bool) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
176 lastModified := time.Unix(0, 0)
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
177 modified := false
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
178 for {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
179 os.Mkdir(PUBDIR, 0755)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
180 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
181 // ignore hidden files and directories
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
182 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
183 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
184 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
185
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
186 if info.IsDir() {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
187 os.Mkdir(filepath.Join(PUBDIR, path), 0755)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
188 return nil
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
189 } else if info.ModTime().After(lastModified) {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
190 if !modified {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
191 // About to be modified, so run pre-build hook
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
192 run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
193 modified = true
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
194 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
195 ext := filepath.Ext(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
196 if ext == ".md" || ext == "mkd" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
197 log.Println("mkd: ", path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
198 return buildMarkdown(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
199 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
200 log.Println("raw: ", path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
201 return copyFile(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
202 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
203 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
204 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
205 })
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
206 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
207 log.Println("ERROR:", err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
208 }
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
209 if modified {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
210 // Something was modified, so post-build hook
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
211 run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
212 modified = false
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
213 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
214 lastModified = time.Now()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
215 if once {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
216 break
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
217 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
218 time.Sleep(1 * time.Second)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
219 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
220 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
221
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
222 func main() {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
223 if len(os.Args) == 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
224 fmt.Println(os.Args[0], "<command> [args]")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
225 return
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
226 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
227 cmd := os.Args[1]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
228 args := os.Args[2:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
229 switch cmd {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
230 case "build":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
231 buildAll(true)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
232 case "watch":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
233 buildAll(false) // pass duration
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
234 case "var":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
235 if len(args) == 0 {
3
53dea9841cd9 moved eval func type to the top, added some error logs
zaitsev.serge
parents: 2
diff changeset
236 log.Println("ERROR: filename expected")
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
237 return
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
238 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
239 if b, err := ioutil.ReadFile(args[0]); err == nil {
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
240 vars, _ := md(args[0], string(b))
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
241 if len(args) > 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
242 for _, a := range args[1:] {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
243 fmt.Println(vars[a])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
244 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
245 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
246 for k, v := range vars {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
247 fmt.Println(k + ":" + v)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
248 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
249 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
250 } else {
3
53dea9841cd9 moved eval func type to the top, added some error logs
zaitsev.serge
parents: 2
diff changeset
251 log.Println(err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
252 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
253 default:
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
254 err := run(path.Join(ZSDIR, cmd), args, map[string]string{}, os.Stdout)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
255 if err != nil {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
256 log.Println(err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
257 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
258 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
259 }