56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
// +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() {
|
|
fs := zeroModTimeFileSystem{
|
|
Source: union.New(map[string]http.FileSystem{
|
|
"/templates": http.Dir("templates"),
|
|
"/source": http.Dir("source"),
|
|
}),
|
|
}
|
|
|
|
err := vfsgen.Generate(fs, vfsgen.Options{})
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|