mirror of
https://github.com/strongdm/comply
synced 2024-10-06 08:56:37 +00:00
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|