| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
- // license. Its contents can be found at:
- // http://creativecommons.org/publicdomain/zero/1.0/
- package bindata
- import (
- "fmt"
- "io"
- )
- // writeDebug writes the debug code file.
- func writeDebug(w io.Writer, c *Config, toc []Asset) error {
- err := writeDebugHeader(w, c)
- if err != nil {
- return err
- }
- err = writeAssetFS(w, c)
- if err != nil {
- return err
- }
- for i := range toc {
- err = writeDebugAsset(w, c, &toc[i])
- if err != nil {
- return err
- }
- }
- return nil
- }
- // writeDebugHeader writes output file headers.
- // This targets debug builds.
- func writeDebugHeader(w io.Writer, c *Config) error {
- var header string
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "net/http"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- } else {
- header = `import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- }
- _, err := fmt.Fprintf(w, `%s
- )
- // bindataRead reads the given file from disk. It returns an error on failure.
- func bindataRead(path, name string) ([]byte, error) {
- buf, err := ioutil.ReadFile(path)
- if err != nil {
- err = fmt.Errorf("Error reading asset %%s at %%s: %%v", name, path, err)
- }
- return buf, err
- }
- type asset struct {
- bytes []byte
- info os.FileInfo
- }
- type bindataFileInfo struct {
- name string
- size int64
- mode os.FileMode
- modTime time.Time
- }
- // Name return file name
- func (fi bindataFileInfo) Name() string {
- return fi.name
- }
- // Size return file size
- func (fi bindataFileInfo) Size() int64 {
- return fi.size
- }
- // Mode return file mode
- func (fi bindataFileInfo) Mode() os.FileMode {
- return fi.mode
- }
- // ModTime return file modify time
- func (fi bindataFileInfo) ModTime() time.Time {
- return fi.modTime
- }
- // IsDir return file whether a directory
- func (fi bindataFileInfo) IsDir() bool {
- return fi.mode&os.ModeDir != 0
- }
- // Sys return file is sys mode
- func (fi bindataFileInfo) Sys() interface{} {
- return nil
- }
- `, header)
- return err
- }
- // writeDebugAsset write a debug entry for the given asset.
- // A debug entry is simply a function which reads the asset from
- // the original file (e.g.: from disk).
- func writeDebugAsset(w io.Writer, c *Config, asset *Asset) error {
- pathExpr := fmt.Sprintf("%q", asset.Path)
- if c.Dev {
- pathExpr = fmt.Sprintf("filepath.Join(rootDir, %q)", asset.Name)
- }
- _, err := fmt.Fprintf(w, `// %s reads file data from disk. It returns an error on failure.
- func %s() (*asset, error) {
- path := %s
- name := %q
- bytes, err := bindataRead(path, name)
- if err != nil {
- return nil, err
- }
- fi, err := os.Stat(path)
- if err != nil {
- err = fmt.Errorf("Error reading asset info %%s at %%s: %%v", name, path, err)
- }
- a := &asset{bytes: bytes, info: fi}
- return a, err
- }
- `, asset.Func, asset.Func, pathExpr, asset.Name)
- return err
- }
|