| package main |
| |
| import ( |
| "bufio" |
| "bytes" |
| "flag" |
| "fmt" |
| "os" |
| "os/exec" |
| "strings" |
| ) |
| |
| const bindatafile = "bindata.go" |
| |
| func isDebug(args []string) bool { |
| flagset := flag.NewFlagSet("", flag.ContinueOnError) |
| debug := flagset.Bool("debug", false, "") |
| debugArgs := make([]string, 0) |
| for _, arg := range args { |
| if strings.HasPrefix(arg, "-debug") { |
| debugArgs = append(debugArgs, arg) |
| } |
| } |
| flagset.Parse(debugArgs) |
| if debug == nil { |
| return false |
| } |
| return *debug |
| } |
| |
| func main() { |
| if _, err := exec.LookPath("go-bindata"); err != nil { |
| fmt.Println("Cannot find go-bindata executable in path") |
| fmt.Println("Maybe you need: go get github.com/elazarl/go-bindata-assetfs/...") |
| os.Exit(1) |
| } |
| cmd := exec.Command("go-bindata", os.Args[1:]...) |
| cmd.Stdin = os.Stdin |
| cmd.Stdout = os.Stdout |
| cmd.Stderr = os.Stderr |
| if err := cmd.Run(); err != nil { |
| os.Exit(1) |
| } |
| in, err := os.Open(bindatafile) |
| if err != nil { |
| fmt.Fprintln(os.Stderr, "Cannot read", bindatafile, err) |
| return |
| } |
| out, err := os.Create("bindata_assetfs.go") |
| if err != nil { |
| fmt.Fprintln(os.Stderr, "Cannot write 'bindata_assetfs.go'", err) |
| return |
| } |
| debug := isDebug(os.Args[1:]) |
| r := bufio.NewReader(in) |
| done := false |
| for line, isPrefix, err := r.ReadLine(); err == nil; line, isPrefix, err = r.ReadLine() { |
| if !isPrefix { |
| line = append(line, '\n') |
| } |
| if _, err := out.Write(line); err != nil { |
| fmt.Fprintln(os.Stderr, "Cannot write to 'bindata_assetfs.go'", err) |
| return |
| } |
| if !done && !isPrefix && bytes.HasPrefix(line, []byte("import (")) { |
| if debug { |
| fmt.Fprintln(out, "\t\"net/http\"") |
| } else { |
| fmt.Fprintln(out, "\t\"github.com/elazarl/go-bindata-assetfs\"") |
| } |
| done = true |
| } |
| } |
| if debug { |
| fmt.Fprintln(out, ` |
| func assetFS() http.FileSystem { |
| for k := range _bintree.Children { |
| return http.Dir(k) |
| } |
| panic("unreachable") |
| }`) |
| } else { |
| fmt.Fprintln(out, ` |
| func assetFS() *assetfs.AssetFS { |
| assetInfo := func(path string) (os.FileInfo, error) { |
| return os.Stat(path) |
| } |
| for k := range _bintree.Children { |
| return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k} |
| } |
| panic("unreachable") |
| }`) |
| } |
| // Close files BEFORE remove calls (don't use defer). |
| in.Close() |
| out.Close() |
| if err := os.Remove(bindatafile); err != nil { |
| fmt.Fprintln(os.Stderr, "Cannot remove", bindatafile, err) |
| } |
| } |