| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- // Copyright (C) 2014 The Syncthing Authors.
 
- //
 
- // This Source Code Form is subject to the terms of the Mozilla Public
 
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
 
- // You can obtain one at http://mozilla.org/MPL/2.0/.
 
- // +build ignore
 
- package main
 
- import (
 
- 	"bytes"
 
- 	"compress/gzip"
 
- 	"encoding/base64"
 
- 	"flag"
 
- 	"go/format"
 
- 	"io"
 
- 	"net/http"
 
- 	"os"
 
- 	"path/filepath"
 
- 	"strings"
 
- 	"text/template"
 
- 	"time"
 
- )
 
- var tpl = template.Must(template.New("assets").Parse(`package auto
 
- import (
 
- 	"encoding/base64"
 
- )
 
- const (
 
- 	AssetsBuildDate = "{{.BuildDate}}"
 
- )
 
- func Assets() map[string][]byte {
 
- 	var assets = make(map[string][]byte, {{.Assets | len}})
 
- {{range $asset := .Assets}}
 
- 	assets["{{$asset.Name}}"], _ = base64.StdEncoding.DecodeString("{{$asset.Data}}"){{end}}
 
- 	return assets
 
- }
 
- `))
 
- type asset struct {
 
- 	Name string
 
- 	Data string
 
- }
 
- var assets []asset
 
- func walkerFor(basePath string) filepath.WalkFunc {
 
- 	return func(name string, info os.FileInfo, err error) error {
 
- 		if err != nil {
 
- 			return err
 
- 		}
 
- 		if strings.HasPrefix(filepath.Base(name), ".") {
 
- 			// Skip dotfiles
 
- 			return nil
 
- 		}
 
- 		if info.Mode().IsRegular() {
 
- 			fd, err := os.Open(name)
 
- 			if err != nil {
 
- 				return err
 
- 			}
 
- 			var buf bytes.Buffer
 
- 			gw := gzip.NewWriter(&buf)
 
- 			io.Copy(gw, fd)
 
- 			fd.Close()
 
- 			gw.Flush()
 
- 			gw.Close()
 
- 			name, _ = filepath.Rel(basePath, name)
 
- 			assets = append(assets, asset{
 
- 				Name: filepath.ToSlash(name),
 
- 				Data: base64.StdEncoding.EncodeToString(buf.Bytes()),
 
- 			})
 
- 		}
 
- 		return nil
 
- 	}
 
- }
 
- type templateVars struct {
 
- 	Assets    []asset
 
- 	BuildDate string
 
- }
 
- func main() {
 
- 	flag.Parse()
 
- 	filepath.Walk(flag.Arg(0), walkerFor(flag.Arg(0)))
 
- 	var buf bytes.Buffer
 
- 	tpl.Execute(&buf, templateVars{
 
- 		Assets:    assets,
 
- 		BuildDate: time.Now().UTC().Format(http.TimeFormat),
 
- 	})
 
- 	bs, err := format.Source(buf.Bytes())
 
- 	if err != nil {
 
- 		panic(err)
 
- 	}
 
- 	os.Stdout.Write(bs)
 
- }
 
 
  |