diff --git a/flag-generator/.gitignore b/flag-gen/.gitignore similarity index 100% rename from flag-generator/.gitignore rename to flag-gen/.gitignore diff --git a/flag-gen/assets_generate.go b/flag-gen/assets_generate.go new file mode 100644 index 0000000..b587253 --- /dev/null +++ b/flag-gen/assets_generate.go @@ -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) + } +} diff --git a/flag-generator/fs_vfsdata.go b/flag-gen/assets_vfsdata.go similarity index 99% rename from flag-generator/fs_vfsdata.go rename to flag-gen/assets_vfsdata.go index 2122fcf..d039e9f 100644 --- a/flag-generator/fs_vfsdata.go +++ b/flag-gen/assets_vfsdata.go @@ -14,8 +14,8 @@ import ( "time" ) -// fs statically implements the virtual filesystem provided to vfsgen. -var fs = func() http.FileSystem { +// assets statically implements the virtual filesystem provided to vfsgen. +var assets = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", diff --git a/flag-generator/go.mod b/flag-gen/go.mod similarity index 100% rename from flag-generator/go.mod rename to flag-gen/go.mod diff --git a/flag-generator/go.sum b/flag-gen/go.sum similarity index 100% rename from flag-generator/go.sum rename to flag-gen/go.sum diff --git a/flag-generator/main.go b/flag-gen/main.go similarity index 59% rename from flag-generator/main.go rename to flag-gen/main.go index 1f6d5b6..3e463ff 100644 --- a/flag-generator/main.go +++ b/flag-gen/main.go @@ -1,17 +1,15 @@ +//go:generate go run assets_generate.go + package main import ( "encoding/json" "fmt" - "github.com/shurcooL/httpfs/union" - "github.com/shurcooL/vfsgen" "github.com/urfave/cli" "io/ioutil" "log" - "net/http" "os" "text/template" - "time" ) type CliFlagInfo struct { @@ -31,34 +29,6 @@ type FlagType struct { 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() { app := cli.NewApp() @@ -68,36 +38,17 @@ func main() { app.Action = ActionFunc - err := GenerateAssets() - if err != nil { - log.Fatal(err) - } - - err = app.Run(os.Args) + 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 { var info CliFlagInfo var tpl *template.Template - inFile, err := fs.Open("/source/flag-types.json") + inFile, err := assets.Open("/source/flag-types.json") if err != nil { log.Fatal(err) } @@ -149,7 +100,7 @@ func ActionFunc(_ *cli.Context) 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 { return nil, err } diff --git a/flag-generator/source/flag-types.json b/flag-gen/source/flag-types.json similarity index 100% rename from flag-generator/source/flag-types.json rename to flag-gen/source/flag-types.json diff --git a/flag-generator/templates/altsrc_flags_generated.gotpl b/flag-gen/templates/altsrc_flags_generated.gotpl similarity index 100% rename from flag-generator/templates/altsrc_flags_generated.gotpl rename to flag-gen/templates/altsrc_flags_generated.gotpl diff --git a/flag-generator/templates/cli_flags_generated.gotpl b/flag-gen/templates/cli_flags_generated.gotpl similarity index 100% rename from flag-generator/templates/cli_flags_generated.gotpl rename to flag-gen/templates/cli_flags_generated.gotpl