github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/cmd/genassets/main.go (about) 1 // Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). 2 // All rights reserved. Use of this source code is governed by an MIT-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "compress/gzip" 10 "flag" 11 "fmt" 12 "go/format" 13 "io" 14 "os" 15 "path/filepath" 16 "text/template" 17 ) 18 19 var tpl = template.Must(template.New("assets").Parse(`package auto 20 21 import ( 22 "bytes" 23 "compress/gzip" 24 "encoding/hex" 25 "io/ioutil" 26 ) 27 28 var Assets = make(map[string][]byte) 29 30 func init() { 31 var bs []byte 32 var gr *gzip.Reader 33 {{range $asset := .assets}} 34 bs, _ = hex.DecodeString("{{$asset.HexData}}") 35 gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) 36 bs, _ = ioutil.ReadAll(gr) 37 Assets["{{$asset.Name}}"] = bs 38 {{end}} 39 } 40 `)) 41 42 type asset struct { 43 Name string 44 HexData string 45 } 46 47 var assets []asset 48 49 func walkerFor(basePath string) filepath.WalkFunc { 50 return func(name string, info os.FileInfo, err error) error { 51 if err != nil { 52 return err 53 } 54 55 if info.Mode().IsRegular() { 56 fd, err := os.Open(name) 57 if err != nil { 58 return err 59 } 60 61 var buf bytes.Buffer 62 gw := gzip.NewWriter(&buf) 63 io.Copy(gw, fd) 64 fd.Close() 65 gw.Flush() 66 gw.Close() 67 68 name, _ = filepath.Rel(basePath, name) 69 assets = append(assets, asset{ 70 Name: filepath.ToSlash(name), 71 HexData: fmt.Sprintf("%x", buf.Bytes()), 72 }) 73 } 74 75 return nil 76 } 77 } 78 79 func main() { 80 flag.Parse() 81 82 filepath.Walk(flag.Arg(0), walkerFor(flag.Arg(0))) 83 var buf bytes.Buffer 84 tpl.Execute(&buf, map[string][]asset{"assets": assets}) 85 bs, err := format.Source(buf.Bytes()) 86 if err != nil { 87 panic(err) 88 } 89 os.Stdout.Write(bs) 90 }