annotate zs.go @ 1:d647affd8ae9 draft

fixed eval func prototype in tests
author zaitsev.serge
date Fri, 05 Dec 2014 17:05:46 +0000
parents 45a9e1fac18e
children fd79b3a90bef
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
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
24 func split2(s, delim string) (string, string) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
25 parts := strings.SplitN(s, delim, 2)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
26 if len(parts) == 2 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
27 return parts[0], parts[1]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
28 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
29 return parts[0], ""
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
30 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
31 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
32
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
33 func md(s string) (map[string]string, string) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
34 v := map[string]string{}
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
35 // FIXME: if no header?
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
36 header, body := split2(s, "\n\n")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
37 for _, line := range strings.Split(header, "\n") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
38 key, value := split2(line, ":")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
39 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
40 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
41 return v, body
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
42 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
43
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
44 type EvalFn func(args []string, vars map[string]string) (string, error)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
45
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
46 func render(s string, vars map[string]string, eval EvalFn) (string, error) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
47 b := []byte(s)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
48 delim_open := []byte("{{")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
49 delim_close := []byte("}}")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
50
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
51 out := bytes.NewBuffer(nil)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
52 for {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
53 if from := bytes.Index(b, delim_open); from == -1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
54 out.Write(b)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
55 return out.String(), nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
56 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
57 to := bytes.Index(b, delim_close)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
58 if to == -1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
59 return "", fmt.Errorf("Close delim not found")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
60 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
61 out.Write(b[:from])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
62 cmd := b[from+len(delim_open) : to]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
63 b = b[to+len(delim_close):]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
64 m := strings.Fields(string(cmd))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
65 if len(m) == 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
66 if v, ok := vars[m[0]]; ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
67 out.Write([]byte(v))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
68 continue
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
69 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
70 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
71 if res, err := eval(m, vars); err == nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
72 out.Write([]byte(res))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
73 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
74 log.Println(err) // silent
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
75 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
76 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
77 }
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
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
81 func eval(cmd []string, vars map[string]string) (string, error) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
82 var outbuf, errbuf bytes.Buffer
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
83 c := exec.Command(path.Join(ZSDIR, cmd[0]), cmd[1:]...)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
84 env := []string{"ZS=" + os.Args[0]}
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
85 for k, v := range vars {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
86 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
87 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
88 c.Env = append(c.Env, env...)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
89 c.Stdout = &outbuf
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
90 c.Stderr = &errbuf
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
91 if err := c.Run(); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
92 log.Println(err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
93 c := exec.Command(path.Join(cmd[0]), cmd[1:]...)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
94 c.Env = append(c.Env, env...)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
95 c.Stdout = &outbuf
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
96 c.Stderr = &errbuf
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
97 if err := c.Run(); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
98 return "", err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
99 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
100 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
101 if errbuf.Len() > 0 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
102 log.Println(errbuf.String())
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
103 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
104 return outbuf.String(), nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
105 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
106
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
107 func buildMarkdown(path string) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
108 b, err := ioutil.ReadFile(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
109 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
110 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
111 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
112 v, body := md(string(b))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
113 defaultVars(v, path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
114 content, err := render(body, v, eval)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
115 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
116 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
117 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
118 v["content"] = string(blackfriday.MarkdownBasic([]byte(content)))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
119 b, err = ioutil.ReadFile(filepath.Join(ZSDIR, v["layout"]))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
120 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
121 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
122 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
123 content, err = render(string(b), v, eval)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
124 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
125 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
126 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
127 err = ioutil.WriteFile(v["output"], []byte(content), 0666)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
128 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
129 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
130 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
131 return nil
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 func defaultVars(vars map[string]string, path string) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
135 if _, ok := vars["file"]; !ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
136 vars["file"] = path
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
137 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
138 if _, ok := vars["url"]; !ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
139 vars["url"] = path[:len(path)-len(filepath.Ext(path))] + ".html"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
140 if strings.HasPrefix(vars["url"], "./") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
141 vars["url"] = vars["url"][2:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
142 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
143 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
144 if _, ok := vars["outdir"]; !ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
145 vars["outdir"] = PUBDIR
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
146 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
147 if _, ok := vars["output"]; !ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
148 vars["output"] = filepath.Join(PUBDIR, vars["url"])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
149 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
150 if _, ok := vars["layout"]; !ok {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
151 vars["layout"] = "index.html"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
152 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
153 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
154
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
155 func copyFile(path string) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
156 if in, err := os.Open(path); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
157 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
158 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
159 defer in.Close()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
160 if stat, err := in.Stat(); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
161 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
162 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
163 // Directory?
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
164 if stat.Mode().IsDir() {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
165 os.Mkdir(filepath.Join(PUBDIR, path), 0755)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
166 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
167 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
168 if !stat.Mode().IsRegular() {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
169 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
170 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
171 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
172 if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
173 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
174 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
175 defer out.Close()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
176 _, err = io.Copy(out, in)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
177 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
178 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
179 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
180 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
181
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
182 func buildAll(once bool) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
183 lastModified := time.Unix(0, 0)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
184 for {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
185 os.Mkdir(PUBDIR, 0755)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
186 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
187 // ignore hidden files and directories
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
188 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
189 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
190 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
191
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
192 if info.ModTime().After(lastModified) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
193 ext := filepath.Ext(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
194 if ext == ".md" || ext == "mkd" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
195 log.Println("mkd: ", path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
196 return buildMarkdown(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
197 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
198 log.Println("raw: ", path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
199 return copyFile(path)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
200 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
201 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
202 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
203 })
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
204 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
205 log.Println("ERROR:", err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
206 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
207 lastModified = time.Now()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
208 if once {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
209 break
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
210 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
211 time.Sleep(1 * time.Second)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
212 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
213 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
214
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
215 func main() {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
216 if len(os.Args) == 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
217 fmt.Println(os.Args[0], "<command> [args]")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
218 return
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
219 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
220 cmd := os.Args[1]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
221 args := os.Args[2:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
222 switch cmd {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
223 case "build":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
224 buildAll(true)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
225 case "watch":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
226 buildAll(false) // pass duration
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
227 case "var":
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
228 if len(args) == 0 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
229 // print error
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
230 return
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
231 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
232 if b, err := ioutil.ReadFile(args[0]); err == nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
233 vars, _ := md(string(b))
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
234 defaultVars(vars, args[0])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
235 if len(args) > 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
236 for _, a := range args[1:] {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
237 fmt.Println(vars[a])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
238 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
239 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
240 for k, v := range vars {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
241 fmt.Println(k + ":" + v)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
242 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
243 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
244 } else {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
245 // print error
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
246 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
247 default:
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
248 cmd := exec.Command(path.Join(ZSDIR, cmd), args...)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
249 cmd.Env = append(cmd.Env, "ZS="+os.Args[0])
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
250 cmd.Stdout = os.Stdout
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
251 cmd.Stderr = os.Stderr
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
252 if err := cmd.Run(); err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
253 log.Println(err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
254 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
255 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
256 }