move around code
change package to flag-gen to avoid conflict with flag-generator binary test code generation
This commit is contained in:
parent
065fe9e9af
commit
2a084945a4
53
flag-gen/assets_generate.go
Normal file
53
flag-gen/assets_generate.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// +build ignore
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/shurcooL/httpfs/union"
|
||||||
|
"github.com/shurcooL/vfsgen"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// zeroModTimeFileSystem is an http.FileSystem wrapper.
|
||||||
|
// It exposes a filesystem exactly like Source, except
|
||||||
|
// all file modification times are changed to zero.
|
||||||
|
// See https://github.com/shurcooL/vfsgen/pull/40#issuecomment-355416103
|
||||||
|
type zeroModTimeFileSystem struct {
|
||||||
|
Source http.FileSystem
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fs zeroModTimeFileSystem) Open(name string) (http.File, error) {
|
||||||
|
f, err := fs.Source.Open(name)
|
||||||
|
return file{f}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type file struct {
|
||||||
|
http.File
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f file) Stat() (os.FileInfo, error) {
|
||||||
|
fi, err := f.File.Stat()
|
||||||
|
return fileInfo{fi}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type fileInfo struct {
|
||||||
|
os.FileInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fi fileInfo) ModTime() time.Time { return time.Time{} }
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := vfsgen.Generate(zeroModTimeFileSystem{
|
||||||
|
Source: union.New(map[string]http.FileSystem{
|
||||||
|
"/templates": http.Dir("templates"),
|
||||||
|
"/source": http.Dir("source"),
|
||||||
|
}),
|
||||||
|
}, vfsgen.Options{})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
@ -14,8 +14,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// fs statically implements the virtual filesystem provided to vfsgen.
|
// assets statically implements the virtual filesystem provided to vfsgen.
|
||||||
var fs = func() http.FileSystem {
|
var assets = func() http.FileSystem {
|
||||||
fs := vfsgen۰FS{
|
fs := vfsgen۰FS{
|
||||||
"/": &vfsgen۰DirInfo{
|
"/": &vfsgen۰DirInfo{
|
||||||
name: "/",
|
name: "/",
|
@ -1,17 +1,15 @@
|
|||||||
|
//go:generate go run assets_generate.go
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/shurcooL/httpfs/union"
|
|
||||||
"github.com/shurcooL/vfsgen"
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"text/template"
|
"text/template"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type CliFlagInfo struct {
|
type CliFlagInfo struct {
|
||||||
@ -31,34 +29,6 @@ type FlagType struct {
|
|||||||
ParserCast string `json:"parser_cast"`
|
ParserCast string `json:"parser_cast"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// zeroModTimeFileSystem is an http.FileSystem wrapper.
|
|
||||||
// It exposes a filesystem exactly like Source, except
|
|
||||||
// all file modification times are changed to zero.
|
|
||||||
// See https://github.com/shurcooL/vfsgen/pull/40#issuecomment-355416103
|
|
||||||
type zeroModTimeFileSystem struct {
|
|
||||||
Source http.FileSystem
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fs zeroModTimeFileSystem) Open(name string) (http.File, error) {
|
|
||||||
f, err := fs.Source.Open(name)
|
|
||||||
return file{f}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
type file struct {
|
|
||||||
http.File
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f file) Stat() (os.FileInfo, error) {
|
|
||||||
fi, err := f.File.Stat()
|
|
||||||
return fileInfo{fi}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
type fileInfo struct {
|
|
||||||
os.FileInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fi fileInfo) ModTime() time.Time { return time.Time{} }
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
app := cli.NewApp()
|
app := cli.NewApp()
|
||||||
|
|
||||||
@ -68,36 +38,17 @@ func main() {
|
|||||||
|
|
||||||
app.Action = ActionFunc
|
app.Action = ActionFunc
|
||||||
|
|
||||||
err := GenerateAssets()
|
err := app.Run(os.Args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = app.Run(os.Args)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAssets() error {
|
|
||||||
fs := zeroModTimeFileSystem{
|
|
||||||
Source: union.New(map[string]http.FileSystem{
|
|
||||||
"/templates": http.Dir("templates"),
|
|
||||||
"/source": http.Dir("source"),
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
return vfsgen.Generate(fs, vfsgen.Options{
|
|
||||||
PackageName: "main",
|
|
||||||
VariableName: "fs",
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ActionFunc(_ *cli.Context) error {
|
func ActionFunc(_ *cli.Context) error {
|
||||||
var info CliFlagInfo
|
var info CliFlagInfo
|
||||||
var tpl *template.Template
|
var tpl *template.Template
|
||||||
|
|
||||||
inFile, err := fs.Open("/source/flag-types.json")
|
inFile, err := assets.Open("/source/flag-types.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -149,7 +100,7 @@ func ActionFunc(_ *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ReadTemplate(packageName string) ([]byte, error) {
|
func ReadTemplate(packageName string) ([]byte, error) {
|
||||||
templateFile, err := fs.Open(fmt.Sprintf("/templates/%s_flags_generated.gotpl", packageName))
|
templateFile, err := assets.Open(fmt.Sprintf("/templates/%s_flags_generated.gotpl", packageName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user