|
- 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)
- }
- }
|